评测篇——关于Android中动态追踪函数的那些工具

最近这两天把Android几个主流的跟踪函数和方法的工具进行了下简单测评。
第一个不得不提的就是DDMS的Traceview工具,这个工具优点是不用手动注入语句,重打包等繁琐操作就能输出APP的所有调用的函数,简单粗暴,这也是我为什么推荐这个工具的原因。缺点是界面可操作性差(Google自己都不维护了),无法过滤,所有这里有几个技巧需要注意: 这里一定要选择Trace based profiling,不要选择那个sample based profiling,否则trace过程中会漏掉很多APP的函数(一开始选项是默认上面那个被这地方坑了)

触发APP条件事件(比如Click或者刷新)生成.trace文件后,由于无法过滤需要点击Name进行排序,然后包名一般是是com.xx… 类似于下图就比较直观了,序号一般是调用的先后顺序(一般是…)

通过类名的粗略浏览判断出可能的关键函数,然后点击可以看到前后调用的函数,Parents和Children

这个和通过AS左下角的调用栈是一致的

再来一个样例,点击版本更新

可以转成文字 在线图片转文字

下图为手机装了xposed模块并hook了getSign函数

最后一点很牛逼的功能,这个工具还可以成功输出加固的APP所调用的函数!!!

因为frida可以直接根据类名方法名及参数来hook,而Traceview可以输出加壳APP所调用的方法(类型),这是不是意味着有一种不用脱壳逆向的可能性呢!!! ps:网上已经有基于traceview的工具AppMethodOrder了,详见 https://github.com/zjw-swun/AppMethodOrder
第二个就是前面所讲的文章 《smali全局注入探测App流程》,这个优点是不会有很多复杂冗余的输出,每一次点击都会正确的输出所调用的所有方法,但是如果APP有重打包检验的话就不太好用了(测试了几个APP插入之后直接闪退了),所以这个方法只适用于可以重打包的,局限性非常大。
第三个就是四哥的icodetools工具了见 带你开发一款给Apk中自动注入代码工具icodetools(完善篇) 这个工具直接操作对象是jar文件,所以一般不用担心重打包失败的问题,但是这个工具在我实测的过程中体验很差…..尤其是在处理多dex文件的时候,经常卡死,输出很多重复的函数直接给霸屏了,过滤效果也很差,可能还是我水平不够不太会用吧….所以现在这种办法基本被我废弃了,除非哪天心血来潮整个2.0可能会重拾这个东西。
综上这三种工具,当然还是首选Traceview工具(实在不行再考虑另外两个),这个攻防不断演变的时代,代码插入这种方法已经基本淘汰了,未来将会是动态注入与hook工具的时代!!