一、前言
安卓逆向说好听一点叫逆向分析学习技术,说不好听就叫破解App了。但是,技术这个东西本身不分好坏,只是看你学会它之后用在哪些方面了。这篇用于总结我对安卓逆向分析的学习理解,主要以分析的步骤来表现,当然同时也提供给大家学习交流,仅此而已。
我们应当努力奋斗,有所作为。这样,我们就可以说,我们没有虚度年华,并有可能在时间的沙滩上留下我们的足迹。——拿破仑
二、工具准备
主要:
- Android Killer 用于反编译/回编APK
- jadx-gui 用于反编译dex文件,进行java层的静态分析
- NotePad 用于记录分析线索,总结分析结果
调用工具:
- DDMS 查看程序运行log / 方法追踪分析
- IDA 动态分析工具 / 反汇编工具 / 内存修改工具 / 脱壳 / JNI 层分析
其他:
- Android Studio 用于编码 / Java层动态分析
- Jeb
- ApkToolBox
- GDA
- WinHex
- 010
三、功能分析
要想分析某款App的某个功能,首先你就需要使用一下这个功能,然后记录下其中的关键字,一般来说:比如那些Toast弹出的提示、Dialog显示的文字、按键的名字等待,这些都可以作为关键字进行代码定位。但是我个人喜欢通过组件的id来定位,这样可以排除String被处理了,然后直接找组件被使用的地方,快速的找到突破口。为了演示本博客中采用String定位代码位置。
关键字:您的会员已到期,请升级VIP
四、Android Killer反编译
打开AK工具,将Apk拖入,等待反编译完成,出现下图所示即可:
五、通过关键字定位代码位置
将AK工具切换到工程搜索界面,搜索我们刚才记录的关键字,如下图:
搜索后发现,结果是一个xml的布局文件,这就说跟定会有一个Activity这样的活动类会引用它,我在根据这个布局文件的名称进行搜索。(关键字:dialog_package_upgrade)结果如下:
发现还是没有想要的smali文件,但是我们发现了R文件,我们可以通过里面定义的16进制的id值,再次进行搜索,结果如下:
终于我们找到了第一个关键字的被调用的位置,就决定是你了。关键字:PackageUpgradeDialogFragment
由于smali代码可阅读性差,我们接下来就用jadx将smali代码转换成java代码来进行下一步的分析,当然AK自带有这个功能,但是我个人觉得不好用。(jadx的使用方法这里就不讲了)
六、分析Java代码,找突破口
打开jadx,将apk拖入,然后打开搜索界面,等待反编译结束,然后搜索关键得到下图:
进入第一个结果:
发现是一个封装好的DialogFragment类,那么我们就看看那些地方实例化了它,然后分析得出这个地方使我们要找的地方:
继续跟踪,我们就找到了我们真正需要的地方:
记录逻辑函数:ischeckAccunt()
七、修改smali代码,回编
找到我们想要的逻辑函数之后,我们就分析它的逻辑,然后尝试修改smali代码,回编(修改逻辑这里就不提供了):
八、安装测试
九、总结
本次逆向分析发现,现在大多的App在安全防御方面还是比较欠缺的,可以说是比较落后的,在我看来一个App至少需要对两个地方进行防御:
- java代码:1.关键逻辑代码用JNI进行编写 2.将Apk进行加固 3.代码混淆...
- 网络传输:1.协议Body加密 2.服务器验证 3.防止VPN代理...