呵呵,搞定了,马上写出来……
先整理一下,明天才能发主题贴!#¥%
1、用peid检测为UPX壳,工具脱之……(UPX ShellEx v1.10 );
2、检测为Delphi程序,自然想到DeDe,载入分析,其中的“btn1click”应该是程序里的“Check”按钮,记下地址为“0048D754”。
2、OD载入,在反汇编窗口右键――“转到”――“表达式”输入0048D754,马上到了 地址“0048D750”,OK,断点下在这里:
0048D757 B9 1E000000 mov ecx, 1E →断点下这里,下面也行
0048D75C 6A 00 push 0
0048D75E 6A 00 push 0
0048D760 49 dec ecx
3、回到程序窗口,输入注册信息:
name: ddstudio
serial:78787878
点Check按钮,现在被OD拦在了0048D757这个位置
4、F8运行,观察寄存器窗口,这里应该是比较用户名:
0048D86F 83BD 6CFFFFFF 0>cmp dword ptr [ebp-94], 0
0048D876 75 10 jnz short 0048D888 →比较用户名是否为空,不为空则跳
0048D878 BA 78DE4800 mov edx, 0048DE78 ; ASCII "Please Input You Name!"
0048D87D 8B83 08030000 mov eax, dword ptr [ebx+308]
5、继续F8,现在程序代码应该在根据name计算注册码,估计写注册机应该分析这段代码……
6、继续F8来到这里:
0048DC9E E8 F19AFBFF call 00447794
0048DCA3 8B85 0CFFFFFF mov eax, dword ptr [ebp-F4] ; 取得假码“78787878”放入eax
0048DCA9 8B95 74FFFFFF mov edx, dword ptr [ebp-8C] ; 这里把真正的注册码放入edx
0048DCAF E8 E46CF7FF call 00404998 ; 关键call
0048DCB4 75 12 jnz short 0048DCC8 ; 跳走则成功,负责完蛋
0048DCB6 BA 10DF4800 mov edx, 0048DF10 ; ASCII "Success,Well Done,Guy!"
0048DCBB 8B83 14030000 mov eax, dword ptr [ebx+314]
0048DCC1 E8 FE9AFBFF call 004477C4
0048DCC6 EB 10 jmp short 0048DCD8
0048DCC8 BA 30DF4800 mov edx, 0048DF30 ; ASCII "Try again!"
0048DCCD 8B83 14030000 mov eax, dword ptr [ebx+314]
0048DCD3 E8 EC9AFBFF call 004477C4
8、记下edx的值,我这里是“8fBTU4f17vYc1asJXDB+Y+TU4f17vYc1k5ZIQLPacYd-dfc77558868f0dd3110dea343e1046d0-4331f7ffe305de224a714d359cabe426-v2FCCHwxXhb4TlShLaGJqJCs9LhrUS-DB+Y+TU4Y+TU46d0-4331f7”,这就是注册码了。
7、显然,暴破点在0048DCB4 /75 12 jnz short 0048DCC8
将jnz改为je,然后右键――“复制到可执行文件”完成暴破
整理:
1、暴破点:0048DCB4……同上;
2、0048DCA9代码处是明码,这个call我没有跟进具体分析,但找真注册码就在这里了。
name:ddstudio
serial:8fBTU4f17vYc1asJXDB+Y+TU4f17vYc1k5ZIQLPacYd-dfc77558868f0dd3110dea343e1046d0-4331f7ffe305de224a714d359cabe426-v2FCCHwxXhb4TlShLaGJqJCs9LhrUS-DB+Y+TU4Y+TU46d0-4331f7