IDA Pro分析APK 1.0

1. 工具介绍

  • IDA pro 7.0: 反编译DEX文件
  • C32asm:修改DEX文件
  • DexFixer:修改DEX header
  • java:生成自己的签名,并对修改后的APK重新签名

2. 代码分析

测试APK:crackme0502.apk (网盘提取指令:xtt2)

2.1 初步安装分析

安装之后界面为
APK界面
程序功能简单,输入注册码并检验注册码。获取注册码按钮时,程序Toast了3个句子,但输入之后均不行,所以我们反编译DEX文件分析一下原因。

2.2 分析DEX

2.2.1 解压APK并加载DEX文件到IDA pro

这里写图片描述
我们可以看到加载成功,并且DEX的header大小为0x70。
这里写图片描述

2.2.2 思路1:发现onClick

从APK解密可以发现,APK中存在两个onClick事件,并且其中一个onClick中有涉及到用于判断注册码正确与否的逻辑,所以我们先搜索关于onClick的地方。

Tips: IDA pro中寻找字符串快捷键为Alt+T,前进快捷键为Ctrl+T。

寻找过程中我们发现ManiActivity中存在两个onClick方法,同时还有其他MainActivity中的一些方法,这就是我们的入手点。
这里写图片描述

2.2.3 思路2:分析onClick

如下两图为onClick实现
onClick1
这里写图片描述
分析上图可以发现,显然onClick2是我们需要的方法,它的逻辑大致为:
* 1)从EditText中获取到输入的注册码
* 2)调用SNCkecker方法
* 3)判断条件是否成立,if-eqz表示值是否为0
* 4)成立则调用Toast,否则直接结束方法

2.2.4 思路3:修改if条件

其实这里我们只需要修改if条件即可,将代码中的if-eqz修改为if-neq即可,找到需要修改的代码位置。

Tips : 寻找方法是点击IDA View-A中代码,然后Hex View-1中对应的地址和相应的16进制代码

这里if-eqz v2, loc_2D0DC对应的地址是loc_2D0BE,十六进制代码是:38 02 0F 00,这里38即表示if-eqz,39表示if-neq,所以我们可以将38改为39即可。主要过程为:
* 1)修改方式为利用C32asm找到对应的代码位置,并修改。
* 2)利用DEXFixer修改表头
* 3)删除META-INF目录下除MANIFEST.MF之外的文件
* 4)重新签名,安装
我们发现这里注册码已经验证成功了。

2.2.5 思路4:尝试改进版

如果程序中,多次验证注册码,那么我们就需要找出所有调用点,然后修改所有if条件,这种方式可行但并不完美,最好的方式是找到检测函数,然后修改检测函数的返回值。从图中可以看出检测函数为isRegister,我们可以直接修改return值,让return一直返回true
这里写图片描述
这里写图片描述
比如这里,我们可以直接修改result=v5,将之改为result=v9,因为v9是非零常量,所以它所有的返回值均为非零了。对应地址为loc_2D13B的十六进制代码为0F 05,改为0F 09,重新编译运行发现可行。

3. 重签名

3.1 重新签名

重签名首先需要删除原先的签名文件,即删除META-INF目录下除MANIFEST.MF之外的文件。

3.1.1 生成keystore

签名分为两部分,首先生成签名keystore,命令为:

keytool -genkey -alias <keystore alias> -keyalg RSA -validity 20000 -keystore <output>

其中

  • genkey 生成文件
  • alias 别名
  • keyalg 加密算法
  • validity 有效期
  • keystore 文件名

这里写图片描述

4. 总结

IDA pro是一个很强大的逆向分析工具,分析时关键是要抓住切入点,如果DEX加入了某些反逆向措施,则更加需要深入分析。

references: 《Android软件安全与逆向分析》5.6章节

猜你喜欢

转载自blog.csdn.net/zjx839524906/article/details/80959778
IDA