【超入门】Android_Apk破解实战

某天晚上,夜深人静,月黑风高。这时,忽然收到了小学期的作业——破解某Apk包,想起了之前在CTF中做过的一道类似的题,便拿来热热手。

目的

题目是这样的:
1、某Apk包;这里是下载链接

2、在android设备或android模拟器上,运行Test.apk后,得到如下图1所示的界面;
图1

任意输入字符,并点击button按钮得到“wrong”提示,如图2。
图2

破解原理

  • 通过修改原始apk包,可以获得“correct!”提示。
  • 可以在不篡改apk包的情况下,反编译原始apk,得到预设的密码,在输入框输入后,得到“correct!”提示。

破解过程

方法一|修改原始APK

通过修改原始的Apk包,可以获得“correct!”的提示:

0x00
使用ApkToolKit软件将提供的Apk文件反编译得到源文件:
步骤1

0x01
在smali文件夹中有反编译得到的smali文件:
步骤2

Smali是指安卓系统里的Java虚拟机(Dalvik)所使用的一种.dex格式文件的汇编器。

0x02
逐个文件查找“wrong”关键字符串,在MainActivity.smali文件中,我们找到了该字符串,将其修改为“correct!”,并保存。
步骤3
步骤3

0x03
删掉test\original\META-INF中的CERT.RSA文件和CERT.SF文件,以防止重新打包签名的时候失败:
步骤4

0x04
重新编译APK文件并签名(人类与动物的根本区别是会使用工具…):
步骤5
步骤5

0x05
安装新apk,测试:
步骤6

方法二|得到正确密码

0x00
将所提供的.apk文件直接解压,得到其中的classes.dex文件:
步骤1

0x01
使用dex2jar工具,将刚才得到的classes.dex文件转换为.jar文件:
步骤2
得到classes_dex2jar.jar文件:
步骤2

0x02
使用jd-gui工具查看该jar的源码:
步骤3
从这里可以看到通过this.t.solve(str)来判断弹出’correct!’还是’wrong’,下一步来找这个函数的所在——

0x03
在test.class中,发现了solve(str)的踪迹~~
步骤4

可以很明显地看出,该字符串为arrayOfChar2={227,206,199,199,196} ^ 0xAB:
写一个脚本来得到字符串:

1
2
3
4
arr=[227,206,199,199,196]
for i in arr :
print(chr(0xAB ^ i),end = '')

Script

0x04
测试一下,Success!
步骤5

以上就是本次超入门破解的全部内容啦( ^-^)ρ(^0^ )