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
至于如何爆破,做补丁就不写了。 嗯,不错,支持持。。/:good
页:
[1]