请问各位大神,怎么高效的把汇编代码转为Objective-C代码

本人半年前刚接触iOS逆向。心血来潮想把苹果的UIKit框架开源。刚开始进展比较顺利,但是后来遇到了问题卡住了。听说本论坛大神很多,特来求助,希望大神帮忙解答。

先说背景 : 利用Hopper工具把汇编代码转为伪Objective-C代码。Hopper确实很好用,但是它还是有些不足。遇到的问题有

  1. Hopper无法确定出结构体中的成员变量,例如

    Hopper只能给出地址值,无法直接给出成员变量的名字
  2. 汇编为了提高效率,会将if else 代码转成goto 代码块。例如
    C61C54AA-DFC9-49B0-8B43-FEF0B67E0D73
    这个例子比较简单,复杂的例子有几百行的。目前只有通读这些标签的逻辑,最后人工转换为if else,方便阅读。 请问有更好的办法自动转换吗? 人工转换效率太低了。
  3. Hopper将汇编转为伪Objective-C代码的过程中有时候会出现解析错误的情况。请问大神有更好的反汇编工具吗? 或者大神们有自己写的更好的工具吗?

主要就是这3个问题。希望大神们帮忙解答。谢谢

1 个赞

理想很丰满

是的,真正开始做才发现难度很高。。否则早就有人开源了。。 大神,你知道如何解决不? 请指点

建议放弃:cold_sweat:

:wink:不放弃,不抛弃

不我认真的。读个PhD回来才能搞定这

1.结构体的变量名编译后就地址化了,不可逆,变量名是给程序员看的,cpu只要地址
2.if else的汇编实现就是 cmp jump

PS:WinObjc里面有微软实现的UIKit

你说的这2点我都知道。这也是汇编转高级语言的难点。

WinObjc里面有微软实现的UIKit。这个刚出来那会我还下载过,但是过后就忘了。谢谢提醒,我再去看看。

使用IDA吧, 编译出来的伪代码要比hooper的效果更好

IDA也有在用。。。

IDA生成的伪代码也不能满足你的要求吗? 那你可以写到hook里, 打印一下参数类型, 要很接近高级代码的还没有这种操作, 有理想是好的

楼主是想一键从bin到xcode project吧, 只有C井存在这种操作

不会c#。不过应该就是你这个意思

你怕不是对逆向有什么误解,oc这种f5就是开源的把你惯坏了

哈哈哈哈哈哈,get到了,到时候找工作我要在简历上写着:熟练使用IDA F5功能