[实例]利用IDA Pro分析Android软件基础教程
本帖最后由 淡然出尘 于 2014-2-13 10:33 编辑说明:本图文教程的方法及工具均分享自看雪移动区版主@非虫的原创图书《Android软件安全与逆向分析》#5.6.3#
特为整理出来,新手教程 求高手指点啊O(∩_∩)O
========
使用IDA Pro定位关键代码的方法:
1、搜索特征字符串。具体操作为:①快捷键Ctrl+S,打开搜索类型选择对话框-->双击Strings,跳到字符串段-->菜单项“Search-->Text”;
②快捷键Alt+T,打开文本搜索对话框,在String文本框中输入要搜索的字符串点击OK即可;
不过 目前IDA Pro对中文字符串的显示和搜索都不支持,需要编写相关的字符串处理插件来解决。
2、搜索关键的API。搜索方法与上面的是一样的。
Tips:
Android API(可供调用的系统接口)可以分为:可选API、Wi-Fi API、定位服务、多媒体API、图形API等;
3、通过方法名来判断方法的功能。这种方法比较笨拙 对于混淆过的代码,定位关键代码比较困难。下面的CrackMe就可以通过方法名来定位关键代码。
========
下面我们就以一个CrackMe为实例来演示IDA Pro分析Android的流程。
首先安装运行APK程序 可以看到主界面上有两个按钮,点击第一个按钮“获取注解” 会Toast弹出三条信息;点击第二个按钮“检测注册码”
则会显示“注册码错误”。很显然 第一个按钮是混淆视听的。
Tips:
IDA Pro是直接分析Android程序的主体dex文件 所以需要将dex文件从原程序中分离出来 可以用RAR压缩解压缩软件直接将dex从apk中拉出来,修改修复以后再借助它压缩进去即可。
所以我们就可以按钮事件的响应为突破口来查找关键代码。
很容易知道该CrackMe.apk的主Activity类为MainActivity,于是在Exports选项卡页面上输入Main,代码会自动定位到以Main开头的所在行 其中
的方法也就一目了然了。
Tips:
一个Android程序是由一个或多个的Activity以及其他组件组成 每个Activity都是相同级别的,不同的Activity实现不同的功能。每个Activity都是Android程序的一个显示“页面” 主要负责数据的处理及展示工作。
每个Android程序有且仅有一个主Activity(隐藏程序除外) 它是程序启动的第一个Activity 通常标识为“android.intent.action.MAIN”.
通过图我们可以看到有两个名为OnClick()的方法 我们可以试试它们分别是对应哪一个。分别双击这两个代码行 会来到相应的反汇编代码(IDA View-A)处,
按下空格键切换到流程图。从而容易得出第二个OnClick()方法是关键 且可以看到代码的分水岭就是“if-eqz v2,loc_2D0DC”。左边红色箭头表示不满足时执行的路线;
右边表示条件满足时执行的路线。
将鼠标定位到指令“if-eqz v2,loc_2D0DC”,然后点击IDA Pro主界面上的“Hex View-A”选项卡,
知偏移地址为0x2D0BE 相应的字节码为“38 02 0f 00”,
所以只需将if-eqz的OpCode值38改为if-nez的OpCode值39即可。
(说明:也就是利用十六进制编辑器 将偏移地址0x2D0BE的“38 02 0f ”改为“39 02 0f”,具体什么什么是OpCode 我不明白了o(╯□╰)o)
修改好之后的修复dex文件的合法性 所以就借助@非虫的工具
修复好之后 拖进RAR解压压缩软件 并删除其中的签名文件夹“META-INF”,这时CrackMe.apk的破解就完成了 签名安装就可以测试了。
附件:
本帖最后由 傲世V雄哥720 于 2014-12-5 18:51 编辑
改SO简单易懂教程:
打开IDA
载入SO
载入SO完毕
搜索结果,选中按空格键跳转到图形模式
修改判断,【依据Dalvik跳转指令或ARM跳转指令修改】
对准该代码,然后Hex View-A
然后使用C32ASM或者Win Hex修改
【请注意:这里啰嗦一句,代码的“名词”很容易让人听不懂】
偏移地址的解释:
Hex【十六进制】 View-A
0x2CB72 49 59 07 0A
0x2CB72就是“偏移地址”
49 59 07 0A就是要改的地方
教程结束。 绝对的大牛!膜拜。深夜发帖,赞一个 {:1_931:}{:1_932:}值得收藏!谢谢楼主 djxinqing 发表于 2014-2-13 02:27 static/image/common/back.gif
值得收藏!谢谢楼主
深夜发帖,赞一个
支持一下,学习了。 缺少这样的技术帖子,非常感谢。 感谢分享,又学了一招! 膜拜淡然大大 大大有空教我分析? 技术牛人啊,顶你 好教程,感谢分享呀