-
-
【OSG】OJTool - Putting the J into otool(1)
-
发表于: 2017-8-18 21:05 4128
-
你可能熟悉我的jtool,其中一个限制是我没有完全实现Intel的反汇编。那就是为何当你们坚持编写自己的反编译器而不使用radare/capstone等其他开源框架。
苹果的otool是不好用的(大多时候)。有时它会得到文字,有时它不会。截至10.12,后者比较多。是的,你能使用HOpper/IDA/etc,但是有时候用命令行(...|grep...)快速反编译没有什么能比上otool。不过它有个恼人的记号法——xxxx(%rip),所以还要自己算出ip相对地址是什么,对吧?
所以我为它写了一个简单的过滤器,它运行otool,然后缓存输出,查找xxx%(rip)和它下一行指令的IP值,然后执行简单的16进制加法。
依鄙人之见,有些东西应该已经通过一些开关实现了(免责 - 也许是吧?我没有费心去深入研究otool的-tV传参)。但后来我想,为什么不把它与jtool结合呢? 注意:
如果otool的文字检测每次都正常运行的话(你懂的,从文字池获取内容作为注释)这样做是没必要的。它只有时候起作用,并且到10.12为止大部分时没作用。因此比起修复这个问题它更适合用过滤器来做。
一图道千言
我在一次MacOS应用逆向的培训中遇到了一个问题然后我引入了两个快速hack的重要方法到ojtool:
源地址: http://newosxbook.com/src.jl?tree=listings&file=otoolfilt.c
Zephyr:Work morpheus$ otool -tV /bin/ls | tail -10 00000001000043f1 pushq %rbp 00000001000043f2 movq %rsp, %rbp 00000001000043f5 movq 0xc14(%rip), %rax 00000001000043fc movq (%rax), %rcx 00000001000043ff leaq 0xb20(%rip), %rdi 0000000100004406 movl $0x3e, %esi 000000010000440b movl $0x1, %edx 0000000100004410 callq 0x1000044f2 0000000100004415 movl $0x1, %edi 000000010000441a callq 0x1000044b
Zephyr:Work morpheus$ ./otoolfilt /bin/ls | tail -10 00000001000043f1 pushq %rbp 00000001000043f2 movq %rsp, %rbp 00000001000043f5 movq 0x100005010, %rax 00000001000043fc movq (%rax), %rcx00000001000043ff leaq 0x100004f26, %rdi ; usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]\r;0000000100004406 movl $0x3e, %esi 000000010000440b movl $0x1, %edx 0000000100004410 callq 0x1000044f2 0000000100004415 movl $0x1, %edi 000000010000441a callq 0x1000044b6
- 检查jtool -function_starts 提供函数边界显示
- 将存根相关联jtool -lazy_bind以带回外部调用符号表
- 更好的字符串支持
- 基本颜色支持
- Objective-C支持: 有/没有companion file,ojtool将获取所有__DATA.__objc* section和 __got数据。注意这是一个hack类别,它对ojtool性能有点影响,但是值得的。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: