-
-
[原创]Log插桩调试smali代码
-
发表于:
2020-11-28 14:10
4764
-
通过搜索它的资源id字符串来进行定位
通过搜索一些会调用的关键的api函数
通过用来分析程序的执行流程,比如UNclick点击事件,或者是activity的一些活动周期等等
通过插入一些log或者是查看一些logcat等等
栈跟踪法属于动态调试的一种,通过分析它的一个函数的调用流程
方法剖析也是属于动态调试的一种,可以用来分析一些函数的调用流程
Log插桩指的是反编译APK文件时,在对应的smali文件里,添加相应的smali代码,将程序中的关键信息,以log日志的形式进行输出。
举个例子:
以“好搜小说大全.apk”文件为例,首先下载一个“好搜小说大全”APP,打开雷电模拟器将它拖进去
插入log日志信息,然后我们来分析一下程序的启动流程。
这里可以思考一下,程序的入口页面和入口点,哪一个启动的时机更早?
我们可以通过Log日志信息来测试一下:
先打开Android Killer,将apk文件拖进来反编译,
反编译完成后出现弹窗,选择“否”即可,而后找到“工程信息”一栏,
找到“入口页面”并单击点开它。
由于我们分析的是程序的启动流程,在启动活动界面的时候,最先被调用的是onCreate方法,所以我们要先浏览相关的方法找到“oncreate”,
选择“oncreate”方法我们可以找到代码开始的位置,在这里可以直接插入Log日志信息,然后右键选择“插入代码”,再选择Log信息输出,
在空白部分输入我们想要输入的文字,然后ctrl+S保存,然后在程序的入口页面插入Log日志信息就已经完成了。
接下来还需要在程序入口点插入Log日志信息,点击“工程管理器”找“AndroidManifest.xml”文件,
里面有个“<application”标签,找到程序的“入口点”
找到程序“入口点”所在的位置“com.reader”,然后找到“re”文件
选择右上角三角图标快速浏览相关的方法,通过浏览相关的方法我们找到oncreate这样一样函数方法,点击跳转到该方法对应的smali代码位置,在空白处插入Log日志信息。
右键,插入代码,输入Log日志信息,输入文字并保存,点击“Android”这一选项,点击“编译”,回编译我们刚刚修改好的这样一个程序
接下来就需要将之前所安装的apk进行卸载,然后把回编译后的apk安装上
然后打开DDMS工具,找到这个文件,由于我们刚才插入了一些Log日志的的信息,然后选择添加过滤器,
在其中搜索我们刚刚创建修改好的入口点和启动页面,
仔细观察这个过程可以发现,应用程序的执行时机要早于我们的程序入口页面的!
但是也要注意,在某些方法插入Log日志会导致程序崩溃,当然也是有对应的解决方法的。
如果在其他位置插入Log会有什么效果呢?可以测试一下:
选择程序的入口页面,UNclick方法,
在<init>处可以插入Log日志信息,
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课