安卓逆向分析步骤总结

tech2023-02-20  86

start:2020年9月3日

一、前言

安卓逆向说好听一点叫逆向分析学习技术,说不好听就叫破解App了。但是,技术这个东西本身不分好坏,只是看你学会它之后用在哪些方面了。这篇博客用于总结我对安卓逆向分析的学习理解,主要以分析的步骤来表现,当然同时也提供给大家学习交流,仅此而已。

我们应当努力奋斗,有所作为。这样,我们就可以说,我们没有虚度年华,并有可能在时间的沙滩上留下我们的足迹。——拿破仑

 

二、工具准备

主要:

Android Killer   用于反编译/回编APK

jadx-gui  用于反编译dex文件,进行java层的静态分析

NotePad  用于记录分析线索,总结分析结果

调用工具:

DDMS  查看程序运行log / 方法追踪分析 IDA  动态分析工具 / 反汇编工具 / 内存修改工具 / 脱壳 /  JNI 层分析

其他:

Android Studio  用于编码 /  Java层动态分析JebApkToolBoxGDAWinHex010

 

三、功能分析

要想分析某款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代理...

 

声明:本博客仅用于移动安全领域的技术研究,不用于任何商业活动,本人不承担任何责任,后果自负,如果本博客有写的不妥的地方请联系我,我会及时整改。

 

 

end:by take

最新回复(0)