静态分析Android程序——使用IDA Pro破解

版权声明:作者:cheese0_0,转载请注明出处来自https://blog.csdn.net/cheese0_0 商业转载请联系作者获得授权,非商业转载请注明出处 https://blog.csdn.net/cheese0_0/article/details/84344735

一、实验题目
实验二 使用IDA Pro分析Android程序
二、预备知识

三、实验操作过程及实验结果
实验二 使用IDA Pro分析Android程序
实验一是使用apktool对Android程序进行分析,实验二使用IDA Pro,同样对AppCracking进行破解。
首先将AppCracking.apk更改为AppCracking.zip压缩包,再用zip解压缩软件取出里面的classes.dex文件,注意这里是使用解压缩软件取出classes.dex文件,并没有解压。将其直接拖入IDA Pro的工作区。
在这里插入图片描述
默认选项即可。使其加载分析classes.dex。
在这里插入图片描述
在这里插入图片描述
和实验一的思路一样,需要找“fail”字符串,在使用IDA Pro中Search菜单中的text选项,在弹出的“Text search”搜索框中输入fail字符串的id值0x7F0B0028。然后发现在该行的上三行位置出现了“if-nez”。
在这里插入图片描述
在这里插入图片描述
然后点击工作区的“Hex View-I”窗口标签,在同一行的位置,发现其十六进制代码的指令为:“39 00 0F 00”,第一个字节39为“if-nez”指令的opcode,我们只需要将其改为“if-eqz”指令的opcode就可以了。
在这里插入图片描述
我并不知道“if-eqz”指令的opcode是多少,除了可以翻看Dalvik指令集列表,也可以在IDA View-A中搜索“if-eqz”,然后再去Hex View-I中查看对应的opcode。如下图所示,该值为38,可以检验与Dalvik指令集列表中一致。
在这里插入图片描述
在这里插入图片描述
下面我想把39改为38,但是在IDA Pro中无法进行修改,需要使用C32asm,启动C32asm,然后将classes.dex拖到界面中,选择十六进制模式。
在这里插入图片描述
主界面显示的是classes.dex的十六进制代码段。然后找到需要修改的这一行,将39改成38,然后保存后退出。
在这里插入图片描述
在这里插入图片描述
APK程序安装时会调用dexopt进行优化和验证,dex文件中的DexHeader头checksum字段标识了dex文件的合法性,被篡改过的dex文件在验证时计算checksum会失败,这样会导致程序安装失败,因此再打包安装程序前需要重新计算并写回checksum。
所以接下来使用DexFixer工具,将修改过的classes.dex拖进来。
在这里插入图片描述
接着将classes.dex放入AppCracking.zip中,删除META-INF文件夹,并打包为AppCracking.apk。
然后再使用signapk.jar工具包进行签名,这次我打开了另一个手机进行安装测试。和实验一一样,在点击“SIGN IN”(注册)后,提示“registration successful ”(注册成功),同时按钮显示灰色不可用。
在这里插入图片描述
在这里插入图片描述
四、遇到的问题及解决方法
遇到问题:
破解后并签名得到的signed.apk无法在手机上安装。原因是在取classes.dex时,我将.zip文件解压缩了,而且没有将classes.dex取出来,直接在原文件中进行修改,生成了冗余文件,然后又直接将该文件夹压缩回.zip文件,并打包成.apk,对实验造成影响。
在这里插入图片描述
解决方法:删除这个apk,重新进行实验二,这次将classes.dex 直接拖到IDE Pro中。

猜你喜欢

转载自blog.csdn.net/cheese0_0/article/details/84344735