脚本工具:基于lldb的trace脚本(新增<block级trace命令>,辅助算法分析,过混淆等)

感觉很牛逼,体验下来反馈

感觉会有效率问题。以前使用ida trace过vm,太慢了。

感觉还行。
一般10分钟左右,trace 2-3w行

如果trace 10几万行,那就脱离了 trace 的价值。
trace的主要目的 是 分析算法,抠出关键逻辑。

ida trace 没用过。还是比较相信lldb 自带api接口。

而trace vm 是需要技巧的,直接全局trace 。。。妈妈呀,只能紫薯布丁了

摸摸摸摸摸摸摸 :star_struck:

脚本优化如下:
1,增加了多个 结束地址,用 “;” 分割
2,增加了 调试 500 行,显示 相关信息
3,增加了 trace 本模块的 可选参数
4,增加了 暂停其他线程的 可选参数

4 个赞

算法还原检测脚本 简介:

***具体操作如下 ***

1,找到ida中对应方法,翻译成对应的python代码
ida_fun

2,利用lldbTrace.py脚本,把需要翻译的函数trace一哈。结果如下:

3,在ida伪代码中,切换到对应的汇编,对照trace结果,确定具体检测的地址。因为trace,当前打印的是上一句代码执行后的寄存器值。所以,我们把check的地址,定义为 0x10000393c,寄存器为 w8

4,定义检测的 变量 Check_0x10000393c_w8 = ‘Check_0x10000393c_w8’ 。在翻译的代码中,添加检测函数 check_value(ret,Check_0x10000393c_w8) 。在解析tracelog文件之前,设置check的相关信息 set_trace_data(Check_0x10000393c_w8)

5,用python 调用此脚本,并传入 tracelog文件的路径。结果如下:
check_pintout

2 个赞

在终端切换成了python3 xcode 里的lldb也会跟着切换吗 但是还是报错
Traceback (most recent call last):
File “/Users/aimo/Desktop//lldb-trace-script/lldbTrace.py”, line 959, in trace
log_d(“Target: {}”.format(str(target)))
File “/Users/aimo/Desktop//lldb-trace-script/lldbTrace.py”, line 30, in log_d
d_log_file.write(msg)
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 14-15: ordinal not in range(128)

UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 14-15: ordinal not in range(128)

你这一段代码,具体的看看

也就ida 自带了一个python运行环境,别的没注意过。
xcode按理没自带python运行环境,应该和你当前的python运行环境,是一样的样子。。。个人猜测,不足为凭

在tk上试验了下,失败了,一直在死循环,
0x103efb4c8 stlxrbw10, w8, [x20] // w9 : 0x00000000 x20 : 0x00000001085b36c4
0x103efb4cc cbnz w10, 0x103efb4c4 // w10 : 0x00000001 w8 : 0x00000001 x20 : 0x00000001085b36c4
0x103efb4c4 ldaxrbw9, [x20] // w10 : 0x00000001
0x103efb4c8 stlxrbw10, w8, [x20] // w9 : 0x00000000 x20 : 0x00000001085b36c4
0x103efb4cc cbnz w10, 0x103efb4c4 // w10 : 0x00000001 w8 : 0x00000001 x20 : 0x00000001085b36c4
一直在这里死循环,不知道为啥

想到一种东西么?同步锁?原子锁?
因为其他线程,都暂停了,所以 w10 的值一直是1,所以对应的指向这个地址 一直被占用…具体的是啥个代码?可以写个demo看看

建议两种做法:
1,直接在 0x103efb4d0 下断点,重新trace
2,–supend-threads-except-current-thread 设置为 false

这个应该是用python2 运行的问题,如果跟你python环境保持一致(用python3)应该就没问题了.

但是我终端已经切换了python3 难道xcode 的lldb不是自动切换成对应的吗

应该不是,你可以试下在代码中最靠前的地方打印一下python的版本,import sys print(sys.version_info)

打印了是py3 是不是跟代码是swift编译的有关

汇编级的,和语言,关系不太大。

你路径,有中文么?感觉,你好像有中文的样子

路径是这个 /Users/aimo/Documents/lldbTrace.py 没有中文啊。搞不懂

可以试试老版本的.

y大,我trace的时候从.plt段跳转到.text段,.text段的代码没有记录下来,不知道是不是我操作错误。

我昨天试了试,结果debugserver崩了,有没有大佬解惑一下如何处理