Zentracer介绍
Zentracer是葫芦娃大佬写的Tracer工具,它基于Pyqt+Frida开发,短小精悍。
1.安装Zentracer
https://github.com/hluwa/ZenTracer 下载即可
2.使用场景
在逆向分析的过程中,因为经常要面对海量的代码,往往都会尝试很多小技巧来准确高效的定位关键点,tracer就是其中之一。Tracer顾名思义就是用来追踪代码(执行)的工具,当然,根据需求的不同,tracer也分几类,比如trace指令,trace函数,trace文件操作等,Zentracer实现了对Android Java方法的Tracer。——葫芦娃
当你知道关键代码位于某个方法时,Objection一定是最好的选择;
当你只知道关键代码位于某个类时,Objection同样有用,但有些吃力,不够直观,也不够强大。
当你只知道关键代码位于/猜测在于某个包(package,指的不是APK包)中,Zentracer就是你最好的选择。
个人观点:优势主要在于——别的Tracer都没有GUI界面,不如它直观好看,有GUI界面的Tracer,比如Dwarf所提供的gui trace,又太笨重,而Zentracer就两三个文件,清爽舒服。
3.Zentracer使用
- 保证Frida server开启
运行Zentracer.py文件
选择如图
需要注意的是,这儿不是填入App的包名,可能有人会困惑,不告知Zentracer 包名是啥,它怎么知道Hook 哪个App?
阅读Zentracer源码我们可以发现,Zentracer采用了Attach方式Hook,它使用Frida提供的API获得设备最前端Activity所属的App包名(人话:正运行的App),因此我们在使用前需要启动App。
def start_trace(app):
global script
match_s = str(app.match_regex_list).replace('u\'', '\'')
black_s = str(app.black_regex_list).replace('u\'', '\'')
dev = frida.get_usb_device()
# 获得当前设备正在运行的App包名
application = dev.get_frontmost_application()
source = open('trace.js', 'r').read().replace('{MATCHREGEX}', match_s).replace("{BLACKREGEX}", black_s)
target = 'Gadget' if application.identifier == 're.frida.Gadget' else application.identifier
app.log("attach '{}'".format(target))
session = dev.attach(target)
script = session.create_script(source)
script.on("message", FridaReceive)
script.load()
最后选择Action—Start即开始追踪,结束时选择Stop。