-
-
MSC 2015 Android区 解题报告
-
发表于: 2015-10-18 21:33 2970
-
MSC 2015 Android区 解题报告
题目一:
先用apktook反编译出来源代码
java -jar apktool.jar d -d AliCrackme_1.apk -o out
通过看代码知道密码验证代码在:
进入 out\smali\k2015\a1目录,查看 Check.java文件, 查找 public static check(Ljava/lang/String;)Z 的return 行:
return v4 前面有个goto_0标签,找到从什么东方跳到这个,找到36188行这里:
看这里的代码:
在 36182行前面添加System.out.println, 输出 v4, v10看是什么数值:
就成了:
代码修改好后就可以用apktook重新打包了:
java -jar apktool.jar b -d out -o debug.apk
重新签名:
JAVA -jar .\sign\signapk.JAR .\SIGN\TESTKEY.X509.PEM .\SIGN\TESTKEY.PK8 DEBUG.APK DEBUG.SIG.APK
安装:
adb install .\DEBUG.SIG.apk
动行程序,然后输入数值,点击,就可以在DDMS里查看System.out.println的输出的值:
输入 0, 点击输出的是:(DDMS的logcat图片的前两行)
520676
124750
输入 1, 点击输出的是:(DDMS的logcat图片的3、4行)
520676
124751
输入100,点击输入:(DDMS的logcat图片的5、6行)
520676
124850
520676不会改变,变的是每次输出的第二个数值,即v4和v10, 要v4==v10才能,将值1赋给v4, 再跳到 goto_0, return v4。
f(x)=520676
f(0)=124750
f(1)=124751
f(100)=124850
f(x)=124750+x
520676=124750+x
x=520676-124750=395926
得到密码 395926
题目一:
先用apktook反编译出来源代码
java -jar apktool.jar d -d AliCrackme_1.apk -o out
C:\apktool>java -jar apktool.jar d -d AliCrackme_1.apk -o out I: 使用 ShakaApktool 2.0.0-20150914 I: 正在加载资源列表... I: 反编译 AndroidManifest.xml 与资源... I: 正在从框架文件加载资源列表: C:\Documents and Settings\Administrator\apktool\framework\1.apk I: 常规资源列表... I: 反编译资源文件... I: 反编译 values */* XMLs... I: 反编译 classes.dex... I: 复制 assets 和 libs... I: 复制未知文件... I: 复制原始文件...
通过看代码知道密码验证代码在:
k2015.a1.Check { public static boolean check(String;){ return ; } }
进入 out\smali\k2015\a1目录,查看 Check.java文件, 查找 public static check(Ljava/lang/String;)Z 的return 行:
12343 a=0;// move-result v4 12344 a=0;// 12345 a=0;// :goto_0 ;会有代码跳到这儿来 12346 a=0;// return v4
return v4 前面有个goto_0标签,找到从什么东方跳到这个,找到36188行这里:
看这里的代码:
a=0;// cmp-long v4, v4, v10 ;比较v4,v10两long,将 v4-v10的值赋给v4 a=0;// a=0;// if-nez v4, :cond_3 ;如果v4不等于0,就跳到 a=0;// a=0;// const/4 v4, 0x1 ;等于0,就将 1赋给v4 a=0;// a=0;// goto/16 :goto_0 ;跳到goto_0标签(goto_0:return v4)
在 36182行前面添加System.out.println, 输出 v4, v10看是什么数值:
a=0;// sget-object v7, Ljava/lang/System;->out:Ljava/io/PrintStream; a=0;// a=0;// invoke-virtual {v7, v4, v5}, Ljava/io/PrintStream;->println(J)V a=0;// a=0;// invoke-virtual {v7, v10, v11}, Ljava/io/PrintStream;->println(J)V
就成了:
代码修改好后就可以用apktook重新打包了:
java -jar apktool.jar b -d out -o debug.apk
重新签名:
JAVA -jar .\sign\signapk.JAR .\SIGN\TESTKEY.X509.PEM .\SIGN\TESTKEY.PK8 DEBUG.APK DEBUG.SIG.APK
安装:
adb install .\DEBUG.SIG.apk
动行程序,然后输入数值,点击,就可以在DDMS里查看System.out.println的输出的值:
输入 0, 点击输出的是:(DDMS的logcat图片的前两行)
520676
124750
输入 1, 点击输出的是:(DDMS的logcat图片的3、4行)
520676
124751
输入100,点击输入:(DDMS的logcat图片的5、6行)
520676
124850
520676不会改变,变的是每次输出的第二个数值,即v4和v10, 要v4==v10才能,将值1赋给v4, 再跳到 goto_0, return v4。
f(x)=520676
f(0)=124750
f(1)=124751
f(100)=124850
f(x)=124750+x
520676=124750+x
x=520676-124750=395926
得到密码 395926
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
谁下载
谁下载
看原图
赞赏
雪币:
留言: