首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

安卓逆向——Log插桩调试smali代码

分析APP程序的时候,怎么样快速地定位关键点打印log日志信息呢?

“插桩”这个学术词语,第一次看见的时候小伙伴们会想到什么呢?

插桩,是不是就是农民伯伯在地里插的木桩?

安卓逆向——Log插桩调试smali代码

分析APP程序的时候,怎么样快速地定位关键点打印log日志信息呢?

“插桩”这个学术词语,第一次看见的时候小伙伴们会想到什么呢?

插桩,是不是就是农民伯伯在地里插的木桩?

“插桩”在农业中确实指的就是在田地里插木桩,但是在我们的安卓逆向技术范畴内,它有一个高端的定义——定位关键代码技巧。

五种定位技巧

信息反馈法

通过搜索它的资源id字符串来进行定位

特征函数法

通过搜索一些会调用的关键的api函数

顺序查看法

通过用来分析程序的执行流程,比如UNclick点击事件,或者是activity的一些活动周期等等

代码注入法

通过插入一些log或者是查看一些logcat等等

栈跟踪法

栈跟踪法属于动态调试的一种,通过分析它的一个函数的调用流程

Method Profiling(方法剖析)

方法剖析也是属于动态调试的一种,可以用来分析一些函数的调用流程

Log插桩定义:

Log插桩指的是反编译APK文件时,在对应的smali文件里,添加相应的smali代码,将程序中的关键信息,以log日志的形式进行输出。

以“好搜小说大全.apk”文件为例,首先下载一个“好搜小说大全”APP,打开雷电模拟器将它拖进去,

插入log日志信息,然后我们来分析一下程序的启动流程。

这里可以思考一下,程序的入口页面和入口点,哪一个启动的时机更早?

我们可以通过Log日志信息来测试一下:

先打开Android Killer,将apk文件拖进来反编译,

反编译完成后出现弹窗,选择“否”即可,而后找到“工程信息”一栏,

找到“入口页面”并单击点开它。

由于我们分析的是程序的启动流程,在启动活动界面的时候,最先被调用的是onCreate方法,所以我们要先浏览相关的方法找到“oncreate”,

选择“oncreate”方法我们可以找到代码开始的位置,在这里可以直接插入Log日志信息,然后右键选择“插入代码”,再选择Log信息输出,

在空白部分输入我们想要输入的文字,然后ctrl+S保存,然后在程序的入口页面插入Log日志信息就已经完成了。

接下来还需要在程序入口点插入Log日志信息,点击“工程管理器”找“AndroidManifest.xml”文件,

里面有个“

找到程序“入口点”所在的位置“com.reader”,然后找到“re”文件

选择右上角三角图标快速浏览相关的方法,通过浏览相关的方法我们找到oncreate这样一样函数方法,点击跳转到该方法对应的smali代码位置,在空白处插入Log日志信息。

右键,插入代码,输入Log日志信息,输入文字并保存,点击“Android”这一选项,点击“编译”,回编译我们刚刚修改好的这样一个程序

接下来就需要将之前所安装的apk进行卸载,然后把回编译后的apk安装上

然后打开DDMS工具,找到这个文件,由于我们刚才插入了一些Log日志的的信息,然后选择添加过滤器,

在其中搜索我们刚刚创建修改好的入口点和启动页面,

仔细观察这个过程可以发现,应用程序的执行时机要早于我们的程序入口页面的!

但是也要注意,在某些方法插入Log日志会导致程序崩溃,当然也是有对应的解决方法的。

如果在其他位置插入Log会有什么效果呢?可以测试一下:

选择程序的入口页面,UNclick方法,

在处可以插入Log日志信息,

选中的部分输入随意的文字即可,

保存之后进行回编译,编译完成后把apk卸载再重新安装,会出现弹窗显示“很抱歉,好搜小说大全已停止运行”

这是什么问题导致的呢?让我们把局部变量寄存器的个数改为1看看会出现什么效果:

编译竟然成功了?是不是很意外呢?这是什么原因呢?

首先我们来看一下这个smali代码,

发现该方法的局部变量寄存器个数为“0”,

而我们插入的代码使用了一个寄存器,这里我们需要将局部变量寄存器个数改为“1”

这是什么问题呢?让我们来看一下,改好后CTRL+S保存一下,然后再进行编译,显示编译完成。然后把改崩了的apk删除,再重新下载安装,发现apk又可以正常运行了。

由此可以得出结论:我们在分析一些smali代码的时候,可以通过更改局部变量寄存器的总数,可以达到解决上面产生的程序崩溃的问题。这也提醒我们在后面的smali代码修改中,需要特别注意使用到的局部变量寄存器个数,是否大于方法指定的局部变量寄存器个数,如果大于了就需要修改方法指定的局部变量寄存器个数,反之即不需要修。

当然如果你的能力不足以分析smali代码中出现的逻辑问题,就老老实实用两种插桩的方法进行操作吧

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201128A06BV200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券