一、前言

安卓逆向说好听一点叫逆向分析学习技术,说不好听就叫破解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定位代码位置。

Android 游戏逆向课程分析 安卓逆向分析课_Android 游戏逆向课程分析

Android 游戏逆向课程分析 安卓逆向分析课_Android 游戏逆向课程分析_02

 

关键字:您的会员已到期,请升级VIP

四、Android Killer反编译

打开AK工具,将Apk拖入,等待反编译完成,出现下图所示即可:

Android 游戏逆向课程分析 安卓逆向分析课_android_03

 

五、通过关键字定位代码位置

将AK工具切换到工程搜索界面,搜索我们刚才记录的关键字,如下图:

Android 游戏逆向课程分析 安卓逆向分析课_apk_04

 

搜索后发现,结果是一个xml的布局文件,这就说跟定会有一个Activity这样的活动类会引用它,我在根据这个布局文件的名称进行搜索。(关键字:dialog_package_upgrade)结果如下:

 

Android 游戏逆向课程分析 安卓逆向分析课_移动开发_05

 

发现还是没有想要的smali文件,但是我们发现了R文件,我们可以通过里面定义的16进制的id值,再次进行搜索,结果如下:

 

Android 游戏逆向课程分析 安卓逆向分析课_Android 游戏逆向课程分析_06

 

终于我们找到了第一个关键字的被调用的位置,就决定是你了。关键字:PackageUpgradeDialogFragment

由于smali代码可阅读性差,我们接下来就用jadx将smali代码转换成java代码来进行下一步的分析,当然AK自带有这个功能,但是我个人觉得不好用。(jadx的使用方法这里就不讲了)

 

六、分析Java代码,找突破口

打开jadx,将apk拖入,然后打开搜索界面,等待反编译结束,然后搜索关键得到下图:

Android 游戏逆向课程分析 安卓逆向分析课_app安全_07

进入第一个结果:

 

Android 游戏逆向课程分析 安卓逆向分析课_apk_08

发现是一个封装好的DialogFragment类,那么我们就看看那些地方实例化了它,然后分析得出这个地方使我们要找的地方:

 

Android 游戏逆向课程分析 安卓逆向分析课_android_09

继续跟踪,我们就找到了我们真正需要的地方:

 

Android 游戏逆向课程分析 安卓逆向分析课_apk_10

 

记录逻辑函数:ischeckAccunt()

 

七、修改smali代码,回编

找到我们想要的逻辑函数之后,我们就分析它的逻辑,然后尝试修改smali代码,回编(修改逻辑这里就不提供了):

Android 游戏逆向课程分析 安卓逆向分析课_apk_11

Android 游戏逆向课程分析 安卓逆向分析课_android_12

八、安装测试

 

Android 游戏逆向课程分析 安卓逆向分析课_app安全_13

 

 

九、总结

本次逆向分析发现,现在大多的App在安全防御方面还是比较欠缺的,可以说是比较落后的,在我看来一个App至少需要对两个地方进行防御:

  • java代码:1.关键逻辑代码用JNI进行编写    2.将Apk进行加固   3.代码混淆...
  • 网络传输:1.协议Body加密   2.服务器验证  3.防止VPN代理...