首页
社区
课程
招聘
[原创]破解Hopper Disassembler v3.7.8 for mac的艰难历程
发表于: 2015-3-1 14:27 74260

[原创]破解Hopper Disassembler v3.7.8 for mac的艰难历程

2015-3-1 14:27
74260

Hopper Disassembler是一个很牛的逆向分析工具,虽然我个人觉得比不上IDA,但是聊胜于无,感觉字符处理得不错。
这个工具在2.x时代是很容西xx的,但是到了3.x翅膀就硬了。
我这里xx的是最新的3.7.8,在这个版本中自我保护手段是很多的,主要是:
1.无法用gdb lldb载入分析,一附加就出错退出。
2、Section偏移量篡改。
3、加密了__TEXT里的代码,字符串,还有objc相关的信息。
这样的结果就是,无法进行动态分析,无法载入静态分析。
以下Hopper Disassembler简称hd
想破解它,首先就要修复其Section。
关于Mach-O的结构,不懂的百度一下吧。还有就是用010 Editor来编辑简直好用到不行
要修复Section,我们先分析以下内存布局,根据其布局来修复
这是otool -l输出的__TEXT Segment的信息

Load command 1
      cmd LC_SEGMENT_64
  cmdsize 1032
  segname __TEXT
   vmaddr 0x0000000100000000
   vmsize 0x00000000003d1000
  fileoff 0
 filesize 4001792
  maxprot 0x00000007
 initprot 0x00000007
   nsects 12
    flags 0x0
Section
  sectname __text
   segname __TEXT
      addr 0x0000000100006fa0
      size 0x00000000003022ea
    offset 28576
     align 2^4 (16)
    reloff 0
    nreloc 0
     flags 0x80000400
 reserved1 0
 reserved2 0

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 4
支持
分享
最新回复 (59)
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习一下,楼主真棒!!!!!!
2015-3-1 15:25
0
雪    币: 1136
活跃值: (683)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
小菜看不懂mac
2015-3-1 16:29
0
雪    币: 3149
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不明觉厉
2015-3-2 09:16
0
雪    币: 608
活跃值: (403)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
楼主厉!
2015-3-2 09:32
0
雪    币: 11
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
高手只在明间呀!
2015-3-2 09:44
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
高手只在阴间!!!!!!

2015-3-2 09:51
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主赞赞哒
2015-3-2 10:18
0
雪    币: 144
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
步骤还是比较详细的
2015-3-2 10:23
0
雪    币: 10664
活跃值: (3569)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
动手能力差,补丁在哪里?
2015-3-6 12:17
0
雪    币: 546
活跃值: (1657)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
11
好文章,一直用这个软件。
2015-3-6 13:55
0
雪    币: 47147
活跃值: (20450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
12
帖子移到『iOS安全』存档,感谢malokch与大家分享心得!
2015-3-8 19:53
0
雪    币: 29
活跃值: (499)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
13
原来是沧海一声呵兄弟,厉害!
2015-3-8 23:32
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
14
兄弟是?
2015-3-9 09:38
0
雪    币: 10664
活跃值: (3569)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
明天去虚拟机里面验证一下,谢谢了。
2015-3-9 22:18
0
雪    币: 133
活跃值: (233)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
很详细,代码还贴出来了,可以操刀试一下了,谢谢
2015-3-10 09:47
0
雪    币: 2443
活跃值: (464)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
好文,学习了!

*(uint8_t*)(address + 0xb974 + 2) = 0xc6; ??
2015-3-10 12:48
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
18
[QUOTE=飘云;1357909]好文,学习了!

*(uint8_t*)(address + 0xb974 + 2) = 0xc6; ??[/QUOTE]

这是我的疏忽了,感谢飘云兄指出此处错误,现已修正。

这样的错误之下还能跑成功,说明可能checkRegistrationToken并非痛点,又或者误打误撞了。
不过经过分析有多处代码调用checkRegistrationToken,这可能还是挺关键的。

能跑成功也不是偶然,因为这里的修改主要是破坏对r14d的清零,就算错了依然有很大的可能会成功。
2015-3-10 13:52
0
雪    币: 2443
活跃值: (464)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
兄弟客气了...
按照以往版本经验,这样改会出现导出功能无效,30分钟时间到期提示等等,等有空了我也测试下。

再次谢谢分享好文!
2015-3-10 22:57
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
20
就我测试,功能是能用的,30分钟限制倒是没有测试,主力还是IDA,用HD很少超过30分钟。。。
2015-3-10 23:04
0
雪    币: 585
活跃值: (573)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
21
vmaddr 0x0000000100000000
  addr 0x0000000100006fa0
addr 的值比vmaddr大,怎么能vmadr减addr?
offset = fileoff + vmadr - addr

还有,楼主贴的那些c++代码,是在xcode里开发编译的吗?

如果是的话,能否把整个工程也传上来。
2015-3-11 09:29
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
22
不好意思,这里写错了。因为这文章是事后补的,可能有点问题…
应该是offset = file off + addr - vmaddr
不是xcode的,是Makefile的,编译很简单,就不贴makefile了。
2015-3-11 10:29
0
雪    币: 205
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
函数_dyld_get_image_header 获取的地址 是否和和楼主的getBasicAddress 相同?
2015-3-11 11:03
0
雪    币: 585
活跃值: (573)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
24
贴出来吧,,我们新手不会的
2015-3-11 12:38
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
25
gcc -shared -o chd.dylib cracked.c
具体的Makefile我这找不到了,不过一行命令就ok了
2015-3-11 13:19
0
游客
登录 | 注册 方可回帖
返回
//