-
-
[原创]OD+IDA6.1破解HideWizardv9.29(无忧隐藏)
-
发表于:
2012-4-22 22:01
32937
-
[原创]OD+IDA6.1破解HideWizardv9.29(无忧隐藏)
偶以前搞过一些破解,但都是一些软柿子,前几天有隐藏木马这么个需求,包括进程、窗口、硬盘文件等,非要用HideWIzard出手不可。HideWIzard6.4有破解版但功能不够,只好拿HideWIzard最新版9.29开刀了。感觉还是挺麻烦的,也许是我水平很菜把,废话不说进入正题

0)先对程序的情况说明一下,程序总共有三处验证,有些可以观察到,有些是破解过程中发现
1.对注册码在客户端进行初步判断,输入不正确的话什么提示都没有,否则进入第二步服务器激活验证;
2.与服务器通信,在static控件显示返回结果;
3.使用imagehlp进行EXE校验,如果发现二进制被修改则自动退出
下面详细阐述哈

1)首先是PEiD查壳,啥也没发现,事实上到最后我也不知道是什么壳,也没学过脱壳,汗一个,哪位大大知道不妨告知哈。IDA6.1打开EXE,可以判断是MFC程序
2)OD加载程序后,自带的7E42xxxx断点一定要清除,否则会导致系统假死,狂按F9过一分钟能缓回来,缓不回来只好重启了。加载成功后窗口切换焦点时也是一顿一顿的,不知是不是有意为之,调试过程中尽量不要切换焦点。顿的程度好像与系统和OD也有关系,具体作用关系不明,最好找个能自动清除debug标志位的。OD换了好几个才碰上个顺手的,我用的ODbyDYK v1.10里的Pza74.exe,能自动清除debug标志位,对call jmp等指令能高亮显示,Pza74缺点是插件不如OllyICE多,但OllyICE没高亮,看的很头疼。

3)正式进入调试步骤,首先需要在激活按钮处下断,因为没有任何提示,只好在CCmdTarget::OnCmdMsg处下断,在IDA记下地址在OD直接bp。OnCmdMsg第四个参数即为消息响应函数。函数如下,程序在0042AB9B处检查注册码位数,只要让输入的注册码为17位就不会跳到函数末尾,在末尾处可以看出SendMessageA是进入下一步的关键,因此中间的算法就不用看了,直接找跳转,把该nop的nop掉。
0042AB5F /. 55 push ebp
0042AB60 |. 8BEC mov ebp,esp
0042AB62 |. 83EC 14 sub esp,14
0042AB65 |. 56 push esi
0042AB66 |. 8BF1 mov esi,ecx
0042AB68 |. 8975 EC mov dword ptr ss:[ebp-14],esi
0042AB6B |. FF15 C4D14600 call dword ptr ds:[<&KERNEL32.GetTickCount>] ; [GetTickCount
0042AB71 |. 8BC8 mov ecx,eax
0042AB73 |. 2B0D A4F44800 sub ecx,dword ptr ds:[48F4A4]
0042AB79 |. 81F9 2C010000 cmp ecx,12C
0042AB7F |. 0F82 40010000 jb HideWiza.0042ACC5
0042AB85 |. 6A 01 push 1
0042AB87 |. 8BCE mov ecx,esi
0042AB89 |. A3 A4F44800 mov dword ptr ds:[48F4A4],eax
0042AB8E |. E8 B0530000 call HideWiza.0042FF43
0042AB93 |. 81C6 10040000 add esi,410
0042AB99 |. 8B06 mov eax,dword ptr ds:[esi]
0042AB9B |. 8378 F4 11 cmp dword ptr ds:[eax-C],11 ////////////////////
0042AB9F |. 8BCE mov ecx,esi
0042ABA1 |. 0F85 14010000 jnz HideWiza.0042ACBB ////////////////不成立则跳到0042ACC5处,不能跳,需要nop掉
...
0042AC9B |. /75 1C jnz short HideWiza.0042ACB9 /////////////////不能跳,需要nop掉
0042AC9D |. |394D F0 cmp dword ptr ss:[ebp-10],ecx
0042ACA0 |. |75 17 jnz short HideWiza.0042ACB9 /////////////////不能跳,需要nop掉
0042ACA2 |. |8B45 EC mov eax,dword ptr ss:[ebp-14]
0042ACA5 |. |6A 0A push 0A ; /lParam = A
0042ACA7 |. |6A 01 push 1 ; |wParam = 1
0042ACA9 |. |68 CA040000 push 4CA ; |Message = MSG(4CA)
0042ACAE |. |FF70 20 push dword ptr ds:[eax+20] ; |hWnd
0042ACB1 |. |FF15 84D54600 call dword ptr ds:[<&USER32.SendMessageA>] ; \SendMessageA
0042ACB7 |. |EB 0C jmp short HideWiza.0042ACC5
0042ACB9 |> \8BCE mov ecx,esi
0042ACBB |> 68 F2DC4600 push HideWiza.0046DCF2
0042ACC0 |. E8 1B7BFDFF call HideWiza.004027E0
0042ACC5 |> 5E pop esi
0042ACC6 |. C9 leave
0042ACC7 \. C3 retn
0041E349 . E9 AD030000 jmp HideWiza.0041E6FB
0041E34E > 8D45 D8 lea eax,dword ptr ss:[ebp-28]
0041E351 . 50 push eax
0041E352 . 8D45 D4 lea eax,dword ptr ss:[ebp-2C]
0041E355 . 33FF xor edi,edi
0041E357 . 50 push eax
0041E358 . 47 inc edi
0041E359 . 68 40EA4800 push HideWiza.0048EA40
0041E35E . 897D D4 mov dword ptr ss:[ebp-2C],edi
0041E361 . 895D D8 mov dword ptr ss:[ebp-28],ebx
0041E364 . FF15 FCD74600 call dword ptr ds:[<&imagehlp.Ma>; imagehlp.MapFileAndCheckSumA /////////////////////////////////////////////Checksum!!!
0041E36A . 85C0 test eax,eax
0041E36C . 75 0C jnz short HideWiza.0041E37A
0041E36E . 8B45 D4 mov eax,dword ptr ss:[ebp-2C]
0041E371 . 3B45 D8 cmp eax,dword ptr ss:[ebp-28]
0041E374 . 0F85 81030000 jnz HideWiza.0041E6FB ////////////////////////////////should not jmp, so nop it
0041E37A > 68 6C3E4700 push HideWiza.00473E6C ; ASCII "SEAN_U_HIDE_WIZARD"
0041E37F . 8D4D E0 lea ecx,dword ptr ss:[ebp-20]
0041E382 . E8 604BFEFF call HideWiza.00402EE7
0041E387 . FF75 E0 push dword ptr ss:[ebp-20] ; /MutexName
0041E38A . 895D FC mov dword ptr ss:[ebp-4],ebx ; |
0041E38D . 53 push ebx ; |Inheritable
0041E38E . 57 push edi ; |Access
0041E38F . FF15 2CD44600 call dword ptr ds:[<&KERNEL32.Op>; \OpenMutexA
0041E395 . 8B7D DC mov edi,dword ptr ss:[ebp-24]
0041E398 . 8987 A4000000 mov dword ptr ds:[edi+A4],eax
0041E39E . 3BC3 cmp eax,ebx
0041E3A0 . 0F84 97000000 je HideWiza.0041E43D
[培训]科锐逆向工程师培训第53期2025年7月8日开班!