针对app执行流程的几种分析方法(动态跟踪)

app动态分析主要分为动态跟踪以及动态调试两部分,前面提到了IDA以及smalidea都是属于动态调试。然而有的apk混淆比较严重,定位到关键代码部分比较困难,有的apk做了反调试会导致动态调试失败,因此动态跟踪方法就显得非常重要。
目前我所学到的动态跟踪方法主要有两种:
1.traceview
DDMS中比较好用的栈跟踪工具。
在这里插入图片描述
可以得到执行某操作期间调用的所有方法的执行顺序,包括父方法和子方法。通俗点说,就类似于在调用每个方法前都log了一下,这样执行流程就非常清晰可见。但是这种方法得到的结果比较混乱,中间会夹杂许多系统函数,虽然可以过滤(比如根据包名),但是总归不是非常的简洁明了。于是就采用了smali注入的方法,本质上还是属于动态插桩。

2.smali全局注入
本质上依旧属于动态插桩,只不过打印出来后不会像traceview那样夹杂许多系统函数。
这里用上次smalidea调试某投资app更新数据包时的通信协议字段进行分析。
首先反编译apk文件:
在这里插入图片描述
得到smali的文件目录,这里主要关注diyou以及example这两个文件夹,其他的类似com.google、com.igexin之类的第三方SDK不用管,也不用进行注入。在这里插入图片描述
或者直接apk改之理反编译,打开目录文件夹,接着将Inject_log.py放入要注入的smali文件目录中:
在这里插入图片描述
在这里插入图片描述
接着运行脚本,用法如下(将目录名修改成解压后的目录):
在这里插入图片描述
这里选择第三种,运行后效果如下:每个方法的开始都被注入了如下语句
在这里插入图片描述
紧接着将InjectLog.smali文件放入里面,注意目录与上图中com.hook.tools对应,也就是说将InjectLog.smali 拷贝到
./smali/com/hook/tools/ 中,如下图所示:
在这里插入图片描述
之后重新签名打包编译,接着将修改后的apk安装到测试机,并打开DDMS,运行app,如下图所示:在这里插入图片描述
与上篇smalidea动态调试某投资软件的文章中分析的流程大致相似。这对于想要分析定位关键代码但是混淆严重的app来说非常有效。相比traceview来说简洁明了不少。

参考链接:https://blog.csdn.net/charlessimonyi/article/details/52027563
github:https://github.com/encoderlee/android_tools

猜你喜欢

转载自blog.csdn.net/weixin_42011443/article/details/102756944