基于Frida的工具介绍——ZenTracer

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。

发布了27 篇原创文章 · 获赞 120 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_38851536/article/details/103755407