jh0262 发表于 2010-5-18 07:17:18

STDUConverter破解

【下载地址】: http://down.ddvip.com/view/121531629019583.html
【编写语言】: VC++
【软件介绍】: 将STDU文件转换为PDF文件
【作者声明】: 想用一下,但要注册,就试一下了。如有得罪,马上纠正。
软件特点:
USER32.BlockInput夹住注册关键CALL
--------------------------------------------------------------------------------
【详细过程】
0043D519|.E8 E24AFCFF       call STDUConv.00402000                      ;这里下断点了
0043D51E|.6A 01             push 1                                    ;这里需要修改为push 0
0043D520|.E8 494E0000       call <jmp.&USER32.BlockInput>
0043D525|.8D4C24 0C         lea ecx,dword ptr ss:
0043D529|.51                push ecx
0043D52A|.8D5424 14         lea edx,dword ptr ss:
0043D52E|.52                push edx
0043D52F|.8D4424 1C         lea eax,dword ptr ss:
0043D533|.50                push eax
0043D534|.E8 67C3FDFF       call STDUConv.004198A0                      ;关键CALL
0043D539|.83C4 0C         add esp,0C
0043D53C|.6A 00             push 0
0043D53E|.8BF8            mov edi,eax
0043D540|.E8 294E0000       call <jmp.&USER32.BlockInput>
0043D545|.85FF            test edi,edi
0043D547|.75 66             jnz short STDUConv.0043D5AF               ;这里必须跳了。
0043D549|.8D4C24 30         lea ecx,dword ptr ss:
0043D54D|.E8 BEC5FCFF       call STDUConv.00409B10
0043D552|.895C24 2C         mov dword ptr ss:,ebx
0043D556|.68 09830000       push 8309
0043D55B|.8D4C24 30         lea ecx,dword ptr ss:
0043D55F|.C64424 50 04      mov byte ptr ss:,4
0043D564|.E8 974AFCFF       call STDUConv.00402000
0043D569|.8B4C24 38         mov ecx,dword ptr ss:
0043D56D|.8B5424 30         mov edx,dword ptr ss:
0043D571|.8B46 04         mov eax,dword ptr ds:
0043D574|.6A 10             push 10                                     ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
0043D576|.51                push ecx                                    ; |Title
0043D577|.52                push edx                                    ; |Text
0043D578|.50                push eax                                    ; |hOwner
0043D579|.FF15 24644C00   call dword ptr ds:[<&USER32.MessageBoxW>]   ; \MessageBoxW
0043D57F|.8B4424 30         mov eax,dword ptr ss:
0043D583|.83C0 F0         add eax,-10
0043D586|.C64424 4C 03      mov byte ptr ss:,3
0043D58B|.895C24 2C         mov dword ptr ss:,ebx
0043D58F|.8D48 0C         lea ecx,dword ptr ds:
0043D592|.83CA FF         or edx,FFFFFFFF
0043D595|.F0:0FC111         lock xadd dword ptr ds:,edx
0043D599|.4A                dec edx
0043D59A|.85D2            test edx,edx
0043D59C|.7F 08             jg short STDUConv.0043D5A6
0043D59E|.8B08            mov ecx,dword ptr ds:
0043D5A0|.8B11            mov edx,dword ptr ds:
0043D5A2|.50                push eax
0043D5A3|.FF52 04         call dword ptr ds:
0043D5A6|>895C24 34         mov dword ptr ss:,ebx
0043D5AA|.E9 F8010000       jmp STDUConv.0043D7A7
0043D5AF|>8D4C24 40         lea ecx,dword ptr ss:               ;注册正确对话框
0043D5B3|.E8 58C5FCFF       call STDUConv.00409B10
0043D5B8|.895C24 3C         mov dword ptr ss:,ebx
0043D5BC|.68 0A830000       push 830A
0043D5C1|.8D4C24 40         lea ecx,dword ptr ss:
0043D5C5|.C64424 50 05      mov byte ptr ss:,5
0043D5CA|.E8 314AFCFF       call STDUConv.00402000
0043D5CF|.8B4424 38         mov eax,dword ptr ss:
0043D5D3|.8B4C24 40         mov ecx,dword ptr ss:
0043D5D7|.8B56 04         mov edx,dword ptr ds:
0043D5DA|.6A 40             push 40                                     ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
0043D5DC|.50                push eax                                    ; |Title
0043D5DD|.51                push ecx                                    ; |Text
0043D5DE|.52                push edx                                    ; |hOwner
0043D5DF|.FF15 24644C00   call dword ptr ds:[<&USER32.MessageBoxW>]   ; \MessageBoxW
0043D5E5|.68 F4F94C00       push STDUConv.004CF9F4                      ;UNICODE "
"
以上是注册过程的破解。下面是去掉起动窗口的过程。采用的方式还是手动补丁了。

F12堆栈调用法到关键CALL处
0043D977|.FF15 D4634C00 call    dword ptr [<&USER32.GetActiveWin>; [GetActiveWindow
0043D97D|.50            push    eax
0043D97E|.8D4C24 74   lea   ecx, dword ptr
0043D982|.E8 69BAFEFF   call    004293F0                         ;关键CALL
0043D987|.83F8 01       cmp   eax, 1                           ;在这里下断点。
0043D98A|.8D4C24 6C   lea   ecx, dword ptr
0043D98E|.889C24 040C00>mov   byte ptr , bl
0043D995|.74 25         je      short 0043D9BC
0043D997|.E8 14A5FCFF   call    00407EB0
0043D99C|.8D47 F0       lea   eax, dword ptr
具体思路:去掉关键CALL,跳到补丁代码处,恢复执行到cmp eax,1处时的寄存器和堆栈的数据。对比原程序
寄存器值:
EAX 00000001
ECX 0012FE90
EDX 00000002
EBX 00000000
ESP 0012F294
EBP 0012FFC0
ESI 00000224
EDI 001842B0 UNICODE "545503445"
堆栈值:
0012F294   7C80B6B1kernel32.GetModuleHandleA
在程序的结尾找空数据的地方,或者自己添加一个段都可以了。
修改这里为0043D982   jmp   XXXXXXXX
在XXXXXXXX处填写以下代码:
pop   eax
pop   ebx
inc   eax
mov   edx, 2
mov   ecx, 12FE90
push    12F294
pop   esp
push    12FFC0
pop   ebp
mov   esi, 224
mov   edi, 1842B0
jmp   0043D987

OK了。








--------------------------------------------------------------------------------
【经验总结】
这里出现了一个jmp.&USER32.BlockInput,这个主要是为了防止逆向分析人员控制调试器,当脱壳主例程运行的时候,壳可
以通过调用user32!BlockInput() API 来阻断键盘和鼠标的输入。通过垃圾代码和反-反编译技术进行隐藏使用这种方法,
如果逆向分析人员没有识别出来的话是很有效的。一旦生效系统看上去没有反应,只剩下逆向分析人员在那里莫名其妙。
但这次出现的位置在关键CALL的上下。所以记录一下。
示例
BlockInput()需要一个boolean型的参数fBlockIt。如果这个参数是true,键盘和鼠标事件被阻断;如果是false,键盘和鼠
标事件被解除阻断:
; Block input
push                TRUE
call               
   
.....
   
;Unblock input
push                FALSE
call               
对策:这里直接修改push 1为push 0
至于如何爆破,做补丁就不写了。

CCC_Fish 发表于 2010-5-18 07:52:09

嗯,不错,支持持。。/:good
页: [1]
查看完整版本: STDUConverter破解