hopper逆向的伪代码令人大跌眼镜
网上介绍hopper有逆向伪代码的文章很多,并以为其是万能而且cool B的。但是并没有人去求证hopper的逆向伪代码参考系数(参考价值,大家做过开发都清楚明白,有些功能看起来很花很cool但不实用)有多高,或者说可信度正确率(至少不要误导人,这比自己直接逆向分析反汇编代码有误还要冤狂)。上一篇已经提出了这个问题,本篇就来进一步求证,我只本着高中时代上过的政治思想课里面毛论中的实事求是精神,和一个程序员对代码的热爱,并非挑事端。
从我已经逆向过的函数中挑选三个出来,用hopper进行逆向输出伪代码,对比观察我想考察的点。
1.QuartzCore`CA::Context::client_port 观察hopper是否可以分析出^() Block。
2.QuartzCore`CA::Context::commit_commands 观察hopper是否可以分析出switch。
3.QuartzCore`drawLine(c风格函数)在适配到QuartzCore`-[CATextLayer _drawLine:inContext:atPoint:]时 观察hopper是否正确分析出传参。
首先是QuartzCore`CA::Context::client_port, 结果是hopper没有能分析出^() Block,还意外发现hopper在逆向伪代码时不考虑内存单元的引用在其它函数中的内容修改的情况。
下面是对hopper的逆向伪代码关于没有分析出^()Block的批注
接着是意外发现的另一个问题的相关批注
下面是对反汇编进行批注
然后是我逆向出来的代码:
第二个安排的测试点是函数QuartzCore`CA::Context::commit_commands,结果hopper没有分析出switch结构。
最后一个测试点是函数QuartzCore`drawLine,结果hopper在逆向其最善长的oc函数调用时分析传参失误。将QuartzCore`drawLine(c风格函数)在适配到QuartzCore`-[CATextLayer _drawLine:inContext:atPoint:]。hopper只会照着x64体系的传参约定,数着手指头硬生生地加入一个r8寄存器,粗暴地作为msg_send的第5个参数来对付,而并没有从编译器传参数的约定出发来考虑问题。
这个函数简单短小就一同贴上反汇编代码
QuartzCore`drawLine(objc_object*, void*, CGPoint, __CTLine const*):
0x1041ca4dc <+>: pushq %rbp
0x1041ca4dd <+>: movq %rsp, %rbp
0x1041ca4e0 <+>: movq %rsi, %rax
0x1041ca4e3 <+>: movq 0x50f2e(%rip), %rsi ; "_drawLine:inContext:atPoint:"
0x1041ca4ea <+>: movq %rax, %rcx
0x1041ca4ed <+>: popq %rbp
0x1041ca4ee <+>: jmpq *0x55d44(%rip) ; (void *)0x000000010357d800: objc_msgSend
最新文章
- 12个小技巧,让你高效使用Eclipse
- 选择目录,选择文件夹的COM组件问题。在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常。
- junit的学习
- Codeforces Round #297 (Div. 2)
- (7)nehe教程1 创建一个OpenGL窗口:
- 我的django之旅(四)模型,模板和视图
- php中使用mysql_fetch_object向页面输出结果,总结!
- linux学习笔记----权限与命令之间的关系(极重要)
- node.js 的事件机制
- JavaScript获取地址栏中的参数
- java操作Jacoco合并dump文件
- python数据结构与算法之问题求解
- mysql sql mode
- 【规范】前端编码规范——html 规范
- MogonDB安装及配置
- Java实现对zip和rar文件的解压缩
- JS实现网页背景旋转缩放轮播效果
- python3 tkinter
- PAT 甲级 1001 A+B Format
- android中完全退出当前应用程序的四种方法
热门文章
- jenkins中使用变量
- 04jmeter-Concurrency Thread Group
- 20.discuz论坛-实现伪静态
- 楼上请让路 RoarCTF2019 Writeup
- JavaScript随机生成布尔值
- python新式类继承------C3算法
- 大家都说好用的 Python 命令行库:click
- 聊一聊Java中的各种运算符
- 【IntelliJ IDEA】Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA 解决办法
- django &; celery - 关于并发处理能力和内存使用的小结