快速定位关键代码
APK的特点1.在学习定位技巧之前,先分析一下APK的3个特点:
(1)每个APK文件中都包含有一个AndroidManifest.xml文件,它记录着软件的一些基本信息。
(2)一个Android程序包含一个或多个Activity组成,不同的Activity实现不同的功能。每个Android程序有且只有一个主Acitivity。隐藏程序除外,它没有主Acitivity。
每个Activity都是Android程序的一个显示页面,负责数据的处理及展示的工作。
(3)鉴于Application类启动的时机很早,一些授权验证的流程可能存在于这里,所以需要着重注意Application。
定位关键代码的方法
一个完整的Android程序反编译后的代码量可能非常庞大,要想在这浩如烟海的代码中找到程序的关键代码,是需要很多经验与技巧的。总结有以下6种定位关键代码的方法:
1.信息反馈法(资源id/字符串)
所谓信息反馈法是指根据程序运行时给出的反馈信息作为突破口,定位关键代码。例如错误提示,运行提示等等,可以在程序中直接搜索字符串。
当提示信息存在于String.xml资源文件中时,我们可以根据R.java的映射文件,查找对应的资源id ,然后在smali或者在ida窗口进行搜索。
2.特征函数法(api函数)
这种定位代码的方法与信息反馈法类似。在信息反馈法中,无论程序给出什么样的反馈信息,终究是需要调用相关API函数来完成。比如弹出注册码错误的提示信息就需要调用Toast.MakeText().Show()方法。
3.顺序查看法(分析程序执行流程/病毒分析)
从AndroidManifest.xml中找到主Activity界面,逐行顺序分析代码,掌握软件的执行流程,通常在分析病毒软件时使用。
4.代码注入法(插入log/查看logcat/分析加解密)
代码注入法又叫做插桩,即在关键反汇编代码处,插入可以输出logcat调试信息的代码,这种方法在解密程序数据时经常使用。
5.栈跟踪法
栈跟踪法属于动态调试方法,原理是输出运行时栈调用跟踪信息,然后查看函数调用序列,来理解方法的执行流程。
6.Method Profiling(方法剖析)
要用于热点分析和性能优化。除了可以记录每个函数占用的CPU时间外,还可以跟踪所有的函数调用关系,并提供比栈跟踪法更详细的函数调用序列报告。
实战去除RE文件管理器广告
RE文件管理器是一款用来管理系统文件的工具,该工具需要root权限,逆向分析应用程序时使用它来管理相关文件。不过该工具存在每次关闭程序都会打开一个广告界面的缺点。
此时我们要对RE文件管理器进行判断,判断它是否可以进行后续分析,实现想要的功能。
1.查壳:
先使用查壳工具进行查壳,会发现“shell”一栏显示“此apk未采用加固或为未知加固厂商”,这表示该APK没有加壳,如下图所示,如果显示该APP加壳了,在目前阶段就果断选择放弃。
2.重新签名:
接下来打开签名工具,将RE文件管理器拖进来重新签名,如下图所示,重新签名好后会弹出一个弹窗,在这里点击“否”,如下图所示,随后生成了一个“RE文件管理器_Signed.apk”文件,打开雷电模拟器安装运行,发现程序可以正常运行。如果程序报错或者闪退就选择放弃,说明存在签名验证。
3.反编译该APP分析程序逻辑。
在“工程管理器”中打开“AndroidManifest.xml”文件,找到程序入口界面的“android:name”属性的值“com.kkkpppxzn”,如下图所示
根据该值找到对应的smali文件,找到“onCreate”方法,如下图所示
在指令开始位置按“鼠标右键”=》“插入代码”=》“toast输出”
选项插入Toast弹窗,保存。回编译,安装运行,发现程序可以正常运行。如下图所示。如果程序崩溃或者闪退就选择放弃。说明存在文件校验。
注意:当字符串等关键信息搜不到时,可以从三个方向考虑:
1.字符串在so层。
2.字符串被加密。
3.结合了服务器,服务器返回,本地显示。
4.去除RE文件管理器关闭程序时的广告信息
总的来讲,分四个步骤操作。
第一步:获取该APP的主页活动信息:
点击左下角“windows”图标;运行cmd命令;执行“adb shell dumpsys activity top”命令;获取“com.speedsoftware.rootexplorer
/.RootExplorer”信息,如下图所示
第二步:根据获取到的信息在“工程管理器”中找到这个类,浏览该类的相关方法。
“onDestroy”方法是在关闭APP时被执行的,而且广告信息是当前活动界面消失之后再弹出的,由此我们可以判断广告的相关逻辑必然是“onDestroy”方法里实现的。但“onDestroy”方法的逻辑比较多。
第三步:获取广告界面的信息:
点击左下角“windows”图标运行cmd命令,执行“adb shell dumpsys activity top”命令获取“com.speedsoftware.rootexplorer/com.
AddDouDouWall2.WebPageDownLoadMainActivity”信息,如下图所示
通过阅读smali代码,看到在“onDestroy”方法中的第五个dalvik指令中有广告活动界面信息(“const-class v1, Lcom/AddDouDouWall2/WebPage
DownLoadMainActivity;”),继续阅读smali代码,发现第七个dalvik指令中有(invoke-virtual {p0, v0}, Lcom/speedsoftware/rootexplorer/
RootExplorer;->startActivity(Landroid/content/Intent;)VstartActivity方法的调用。这条指令就是我们要获取的信息,将这条指令进行注释,即可去除广告,如下图所示
最后,回编译,安装运行。再关闭程序,发现没有跳转到广告界面,说明成功去除了RE文件管理器的广告信息。
小结:
1、定位关键代码的技巧
(1)信息反馈法(资源id/字符串)
(2)特征函数法(api函数)
(3)顺序查看法(分析程序执行流程/病毒分析)
(4)代码注入法(插入log/查看logcat/分析加解密)
(5)栈跟踪法(动态调式/函数调用流程)
(6)Method Profiling(动态调式/热点分析/函数调用流程)
2、快速定位的步骤:
(1)反编译 apk。
(2) 通过 AndroidManifest.xml 查找主 Activity。
(3)查看程序的入口方法:主 Activity 的 onCreate()方法。
(4)查看 Application 类(全局类,早于其他类启动)的onCreate() 方法,该方法通常用作授权检测。 417788939 发表于 2020-10-16 10:55
re管理器这个教程太多了吧,能不能换个样品
栈追踪对某些app还是很好用的。
这是易锦为了打广告出的 类似公开课一样的教程 点到为止 PJ599 发表于 2020-10-17 10:25
不懂就问,这都用到了什么工具啊
Android killer 、ida、jadx-jui、ddms、查壳工具、签名工具、雷电模拟器、MT管理器、大概就这些吧 re管理器这个教程太多了吧,能不能换个样品{:301_977:}
栈追踪对某些app还是很好用的。 同意楼上
同意楼上 对的,求换个栈追踪的。 收藏,有用
厉害啊。 厉害啊,只能跟随学习,无法领先怎么破