参考这个下面的二:
http://blog.csdn.net/xf51357/article/details/3322026
其实也没怎么用上。千辛万苦下了个IDA Pro在上十几m的文件上就工作不能,
所以还就是nm,人肉过滤,大致先找出可疑的地方,然后一点点辛辛苦苦在
gdb里面disassamber,nexti,一路下去。
我这的TextMate版本是Version 1.5.10 (1631),还是先处理上面那个链接提
到的东东,把偏移0x5deb77的两个字节89 c8改成b0 01就行了。但是这样它还
是会跳出对话框,说是序列号过期还是什么的,反正是洋文,我也没看明白。
费了九牛二虎之力大体确定在
00048e18 calll 0x002a0539 ; symbol stub for: __ZSt4findIPKiiET_S2_S2_RKT0_
00048e1d cmpl %eax,%esi
00048e1f je 0x00049030
00048e25 movl 0x0024168f(%ebx),%eax
00048e2b movl %eax,0x04(%esp)
00048e2f movl 0x00242f77(%ebx),%eax
00048e35 movl %eax,(%esp)
00048e38 calll 0x002a0d0e ; symbol stub for: _objc_msgSend
00048e3d movl %eax,%edi
00048e3f leal 0x00215743(%ebx),%eax
00048e45 movl %eax,0x08(%esp)
00048e49 movl 0x0024170f(%ebx),%eax
00048e4f movl %eax,0x04(%esp)
00048e53 movl 0x00242f77(%ebx),%eax
00048e59 movl %eax,(%esp)
单步了一下,可以确定,0x48e1f这里还不会弹出对话框,并且这里也不会跳
转倒je那个参数0x00049030,在下面的某个地方,弹出对话框,声称序列号有
问题了,那么可以合理的预期,判断这个序列号是不是对的分支就在这里。试
了试:
(gdb) set $eip=0x00049030
(gdb) c
果然就可以用了。那么就考虑让它总是执行这个je跳转就行了.
(gdb) x/x 0x00048e1d
0x48e1d <-[AppDelegate applicationDidBecomeActive:]+671>: 0x840fc639
这个 39 c6(注意字节序),就是cmpl %eax,%esi了,我把它改成cmpl
%eax,%eax,那么它自然就会永远执行je跳转了。这个指令的代码就是36 c0.那
么算一算,这个指令的偏移就是在0x5dee1d附近,过去一改,就行了。