第5章 IDA Pro 破解实战
1、工具IDA Pro 6.6版本
1、定位关键码
1) 搜索特殊字符串
首先按下快捷键CTRL+S 打开段选择对话框,双击STRINGS段跳转到字符串段,然后按下ALT+T,打开文本搜索对话框,在String旁边的文本框输入要搜索的字符串后点击OK按钮,稍等片刻就会定位到搜索结果。
2) 搜索关键API
首先按下快捷键CTRL+S打开段选择对话框,双击第一个CODE段跳转到数据起始段,然后按下ALT+T,打开文本搜索对话框,在String旁边的文本框中输入要搜索的API名称后点击OK按钮,如果API被多次调用,按CTRL+T来搜索下一项。
3) 判断方法功能,这个办法比较笨拙,对于混淆过的代码,定位关键代码比较困难。
比如crackme0502.apk程序的主Activity类为MainActivity,于是在Exports(注意:中文版是导出表)选项卡页面上输入Main,代码会自动定位到Main开头所在行如下:
2 、破解crackme0502.apk包
1) 首先安装运行apk程序,运行后有两个按钮,点击获取注解,按钮会Toast弹出3条信息。在文本框中输入任何字符串后,点击“检测注册码”按钮,程序弹出注册码错误的提示信息。这里以按钮事件响应为突破口来查找关键代码。
2) 开启andriod虚拟机(注意:这里不介绍了前面的章节已经介绍过了)
3) 使用adb命令安装crackme0502.apk包
root@strom-virtual-machine:~/apktool#adb install crackme0502.apk
1357 KB/s (157657 bytes in 0.113s)
pkg: /data/local/tmp/crackme0502.apk
Success
4) 通过IDA Pro工具查看反汇编代码
查找onClick() 方法
5) 在IDA Pro反汇编中调用了MainActivity的getAnnotations()方法
注意:这样就知道了MainActivity$1.onClick()就是前面的按钮事件的响应代码。
6) 查看MainActivity$2.onClick()方法然后按下空格键如下:
代码对应着if-qez v2 ,loc_2D0C6。(注意:左图上方的红色箭头表示不满足条件线路,右上方的绿色箭头表示满足条件线路)
7) 接着将鼠标选择loc_2D0C6位置,再次按下空格键这时IDA-游览器A会跳到选择loc_2D0C6位置。
注意:可以看到if-eqz对应的code是0x2D0BE
根据前面所学的知识将“38 02 0F 00”改为“39 02 0F 00”通过C32asm工具进行修改,接着通过检验签名工具进行重新生成校验码。
8) 破解成功