上次写了篇 tmd老版本的脱壳,是根据老师的指点然后把学习脱壳过程写下来的,郁闷啊,没有人响应,估计是方法没有什么新意,为了发奋学习破解,下载了个‘至易资料收集4.0’软件,方便以后学习资料的整理以及做学习总结,哪知道这个软件还要注册收费,所以决定把它破了,以下是我的破解过程,希望能给刚开始学习破解的新手参考,如果有哪位大牛不幸走进来看了,也希望给些鼓励,扔砖头的,也请轻轻扔。
1.查壳,是delphi的程序,发现竟然没有壳,给我们这些菜鸟减轻负担,那咱肯定能干掉它,哈哈。
2.od载入,运行程序,用户名 admin,密码admin,登陆后,点击帮组菜单下的注册项,打开注册窗口,在窗口的 注册码处输入 1234567890
3.回到od窗口,下断 bpx GetWindowTextA,然后点击 ‘注册’按钮,提示注册码错误,再试 bpx GetDlgItemText也没有拦截下来,然后再试
Hmemcpy、lstrcpynA也没有成功,郁闷啊,delphi怎么取得text输入的值?还望大牛们指点下。不过既然是delphi的程序,那咱就用dede来看看
在窗口标签页 看到有一行是 TFrmReg,这个应该就是那个注册窗口了,接下来我们找按钮,
object btnOK: TRzButton
Left = 240
Top = 326
ModalResult = 1
Anchors = [akRight, akBottom]
Caption = 注册
Enabled = False
HotTrack = True
TabOrder = 1
OnClick = BtnOKClick
end
这个就是那个注册 按钮 了,到过程标签页 选择行 regunt TFrmReg,在事件标签页 找到 BtnOKClick 005E5CE8 ,这里就是那个注册按钮入口地址了。
4.回到od窗口,按 ctrl+g 在弹出的窗口输入 005E5CE8 ,od代码定位到这里,这里便是点击 ‘注册’按钮的事件代码入口了,在005E5CE8 f2 断
005E5CE8 . 55 push ebp
005E5CE9 . 8BEC mov ebp,esp
005E5CEB . 33C9 xor ecx,ecx
005E5CED . 51 push ecx
005E5CEE . 51 push ecx
005E5CEF . 51 push ecx
005E5CF0 . 51 push ecx
005E5CF1 . 51 push ecx
005E5CF2 . 53 push ebx
005E5CF3 . 56 push esi
005E5CF4 . 57 push edi
005E5CF5 . 8945 FC mov dword ptr ss:[ebp-4],eax
在注册窗口 输入假注册码 1234567890 ,然后点击 ‘注册’在 005E5CE8 断下,然后单步
005E5CFB . 68 A65E5E00 push yxhy.005E5EA6
005E5D00 . 64:FF30 push dword ptr fs:[eax]
005E5D03 . 64:8920 mov dword ptr fs:[eax],esp
005E5D06 . 8B45 FC mov eax,dword ptr ss:[ebp-4]
005E5D09 . C680 1C030000>mov byte ptr ds:[eax+31C],0
005E5D10 . 8D55 EC lea edx,dword ptr ss:[ebp-14]
005E5D13 . 8B45 FC mov eax,dword ptr ss:[ebp-4]
005E5D16 . 8B80 14030000 mov eax,dword ptr ds:[eax+314]
005E5D1C . E8 77F0F6FF call yxhy.00554D98
005E5D21 . 8B55 EC mov edx,dword ptr ss:[ebp-14]
这里看到堆栈显示刚才输入的假注册码了
堆栈 ss:[0012F7E8]=00C30B2C, (ASCII "1234567890")
edx=00000000
005E5D24 . A1 94EF6000 mov eax,dword ptr ds:[60EF94]
005E5D29 . 8B00 mov eax,dword ptr ds:[eax]
继续单步到上面代码的005E5D29 堆栈显示如下
ds:[00611D74]=00C16E1C, (ASCII "DB53A3AF1D1E5F162973")
eax=00611D74 (yxhy.00611D74) ,嘿嘿这里就是真的注册码了
005E5D2B . E8 34EAE1FF call yxhy.00404764
//跟进 发现这里是 比较注册码,不用管他,当然如果你要研究它的算法,那就要跟下 00C16E1C,看下这个值是怎么来的,
没有必要,因为在这里也可以做内存注册机了
005E5D30 . 74 1C je short yxhy.005E5D4E
005E5D32 . 8B45 FC mov eax,dword ptr ss:[ebp-4]
005E5D35 . C780 4C020000>mov dword ptr ds:[eax+24C],1
005E5D3F . B8 BC5E5E00 mov eax,yxhy.005E5EBC
005E5D44 . E8 97B8EEFF call yxhy.004D15E0
在上面的call 提示注册码错误
005E5D49 . E9 35010000 jmp yxhy.005E5E83
005E5D4E > B9 E05E5E00 mov ecx,yxhy.005E5EE0 ; ASCII "Win.ini"
不研究那么投入了,先试试看能否注册成功吧,取消断点,把真注册码 DB53A3AF1D1E5F162973 拷贝到注册码输入框点击‘注册’按钮,提示
‘注册成功,您可以继续使用本软件了,谢谢您的注册! ’,可爱的提示出来了,大功告成。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)