IDA破解apk的初次尝试
来源:互联网 发布:杰尼斯偶像结婚知乎 编辑:程序博客网 时间:2024/04/28 04:24
1、背景介绍
做APP开发一年多的时候,我突然对破解有了浓厚的兴趣,看了些资料,自己也动手写了写,老早之前有这样一篇文章,一直没空拿出来分享一下。最近又重新整理了一下,感觉写得还是比较详细的,拿出来和大家分享探讨一下。
2、工具和环境
工具:IDA Pro6.1,C32arm,apktool
环境:win7,jdk1.6
文件:crackme02.apk
上面的工具和文件大家自己准备一下,最后的crackme02.apk这个文件我会上传一份到CSDN让大家下载,好与我的文件保持一致。
实际上本文也是《Android软件安全与逆向分析》一书中的总结,大家也可以找这本书看看。
3、加载apk到IDA
首先使用zip解压缩文件取出crackme02.apk文件中的classes.dex文件,然后打开IDA Pro编译器,将程序拖入到IDA Pro编译器中,会有一个弹窗“Load a new file0”对话框,直接点击OK按钮。(注意选择Android文件)
这时,程序会进入反汇编的界面,稍等一下,IDA Pro分析完classes.dex后会出现如下图所示的情形:
4、定位资源选项
按照破解思路,我们找到资源文件中的string.xml文件,可以看到对应的字符串为unsuccessed。然后我们使用apktool反编译crackme02.apk文件,从smali文件的R文件中找到R$string.smali文件中的unsuccessed所对应的id值,如下图所示,我们得到的结果是:0x7f05000c
当找到字符串对应的id值之后,我们回到IDA Pro界面上来,在IDA的主窗口按下Alt+T快捷键,会弹出字符串搜索的窗口,我们在该窗口中输入刚才找到的id值0x7f05000c,如图所示:
然后会看到鼠标定位到了0x7f05000c所对应的地方。
这时候,我们向上查找最近的判断语句,很快会定位到CODE:0002CDD2行的if-nez。
5、查找指令代码
我们点击IDA Pro主界面上的“Hex View-A”选项卡,发现这行代码的指令为“39 00 0f 00”第一个字节39为if-nez的指令操作码,我们只需将其改为if-eqz的指令码就行了。查表如图所示:
6、修改
关闭IDA Pro,在弹出的Save datebase对话框中勾选“DON'T SAVE the database”然后点击OK退出程序。
使用十六进制编辑工具打开classes.dex文件,本处使用C32asm,定位到0X2CDD2处,修改39为38,保存退出。
7、签名
apk程序在安装的时候会调用dexopt对dex进行验证与优化,dex文件的DexHeader头的checksum字段标识了dex文件的合法性。当我们修改了classes.dex文件之后,dex文件在验证时计算checksum会失败,这样我们需要重新计算并写回checksum的值。
最后我们将修改后的classes.dex文件压缩到刚才解压的zip包中,然后删除MAIN-INF文件,使用Auto-sign签名文件对它签名即可。
8、测试
测试通过!
9、文件地址
http://download.csdn.net/detail/ljtyzhr/8071745
- IDA破解apk的初次尝试
- MyCat的初次尝试
- 又一次掏出IDA尝试逆向当年CCTF的apk题——失败待续
- 关于信号量的初次尝试
- Storm IScheduler的初次尝试
- sublime text3 的初次尝试
- vue.js的初次尝试
- sea.js的初次尝试
- 初次尝试
- 我的gulp的初次尝试
- 嵌入式应用Linux裁减的初次尝试
- 嵌入式应用Linux裁减的初次尝试
- 嵌入式应用Linux裁减的初次尝试
- Matlab下的多线程初次尝试
- 自制Minecraft的初次尝试【01】
- android sqlite 初次尝试遇到的坑
- [LeetCode] TwoSum LeetCode的初次尝试
- D3结合Drupal8的初次尝试
- [Android 调试] LogCat中不输出任何的信息
- Yii 查询无限极分类
- 【数据结构】单链表(一)单链表的定义,插入,删除和查找操作
- unity3D获取和设置鼠标的位置
- leetcode - Permutations
- IDA破解apk的初次尝试
- ioctl ( 0, FIONREAD, &nread );
- Javascript面向对象编程(二):构造函数的继承
- 经典SQL语句大全
- Linux时间子系统之六:高精度定时器(HRTIMER)的原理和实现
- postgresql过程语言
- vc6.0转vs2013出现错误ON_WM_TIMER()
- linux设备驱动的编译与下载
- Selenium 2.0 WebDriver 使用指南