【破文标题】菜鸟破解之----军队个人总结助手注册算法破解分析(简单)
【破文作者】紫色缘[TFW][PCG]
【作者邮箱】Cn_Fish@126.com
【作者主页】www.cniso.org
【破解工具】OD、PEID
【破解平台】Win9x/NT/2000/XP
【软件名称】某个人总结助手
【软件大小】1MB
【原版下载】不提供~
【保护方式】无
【软件简介】
这软件是我在kanxue论坛网友的网络U盘那边无意间下载下来的~
此软件算法是非常的简单~对于初学算法者相当的有好处~ (高手请略过)
------------------------------------------------------------------------
【破解过程】
1、查壳后显示Microsoft Visual Basic 5.0 / 6.0无壳。又有软柿子吃了。呵呵~
2、启动主程序后,在输入假码后出现错误提示框。嘿嘿~~有错误的提示框就比较好办了!
3、载入OD,F3一下,出现“打开32位可执行文件”选择要分析的主程序后。直接来到以下的代码处:
004022EC > $ 68 087C4000 push 00407C08 ; 来到此处~~ 一般VB的程序都载入到此!
004022F1 . E8 EEFFFFFF call <jmp.&MSVBVM60.#100>
004022F6 . 0000 add [eax], al
004022F8 . 0000 add [eax], al
004022FA . 0000 add [eax], al
004022FC . 3000 xor [eax], al
004022FE . 0000 add [eax], al
00402300 . 48 dec eax
====================================================================================================
直接在命令行下断点:bp rtcMsgBox(消息提示断点,验证了第2步骤~~~)
F9运行,出现注册框,输入本机注册码:“111111111” 然后点“现在注册”按钮,直接断在以下代码:
660DC5F3 > 55 push ebp ; 断在此处~~~~
660DC5F4 8BEC mov ebp, esp
660DC5F6 83EC 4C sub esp, 4C
660DC5F9 8B4D 14 mov ecx, [ebp+14]
660DC5FC 53 push ebx
660DC5FD 56 push esi
660DC5FE 57 push edi
660DC5FF 66:8339 0A cmp word ptr [ecx], 0A
660DC603 B8 04000280 mov eax, 80020004
====================================================================================================
然后直接按ALT+F9运行到达消息代码处~~
004A5C68 . FF15 58104000 call [<&MSVBVM60.#595>] ; MSVBVM60.rtcMsgBox
004A5C6E . 8D4D 90 lea ecx, [ebp-70]
004A5C71 . 8D55 A0 lea edx, [ebp-60]
004A5C74 . 51 push ecx
004A5C75 . 8D45 B0 lea eax, [ebp-50]
004A5C78 . 52 push edx
004A5C79 . 8D4D C0 lea ecx, [ebp-40]
004A5C7C . 50 push eax
004A5C7D . 51 push ecx
004A5C7E . 6A 04 push 4
====================================================================================================
因为要分析其算法,所以向上找其触发事件代码处:
004A5A60 > \55 push ebp ; 再此下断,然后F8单步跟踪~~~
004A5A61 . 8BEC mov ebp, esp
004A5A63 . 83EC 0C sub esp, 0C
004A5A66 . 68 B6204000 push <jmp.&MSVBVM60.__vbaExceptHandle>; SE 处理程序安装
004A5A6B . 64:A1 0000000>mov eax, fs:[0]
004A5A71 . 50 push eax
004A5A72 . 64:8925 00000>mov fs:[0], esp
004A5A79 . 81EC D0000000 sub esp, 0D0
.....................................中间省略N行无关紧要的代码.......................................
004A5B60 . /7D 12 jge short 004A5B74
004A5B62 . |68 A0000000 push 0A0
004A5B67 . |68 DCF24000 push 0040F2DC
004A5B6C . |57 push edi
004A5B6D . |50 push eax
004A5B6E . |FF15 4C104000 call [<&MSVBVM60.__vbaHresultCheckObj>; MSVBVM60.__vbaHresultCheckObj
004A5B74 > \8B55 E0 mov edx, [ebp-20] ; 本机注册码送入EDX
004A5B77 . 8B45 E4 mov eax, [ebp-1C] ; 本机用户名送入EAX
004A5B7A . 52 push edx ; EDX入栈
004A5B7B . 50 push eax ; EAX入栈
004A5B7C . FF15 04114000 call [<&MSVBVM60.__vbaR8Str>] ; MSVBVM60.__vbaR8Str
004A5B82 . DCC0 fadd st, st ; 加实数:st+st (st=207423487.00000000000)
004A5B84 . 8B4D E8 mov ecx, [ebp-18] ; 本机用户名送入ECX
004A5B87 . 51 push ecx ; ECX入栈
004A5B88 . DC05 70204000 fadd qword ptr [402070] ; 相加实数2000
004A5B8E . DFE0 fstsw ax ; 保存状态字的值到AX
004A5B90 . A8 0D test al, 0D ; 测试al 与 OD
004A5B92 . 0F85 84030000 jnz 004A5F1C ; 不相等则跳
004A5B98 . DD9D 24FFFFFF fstp qword ptr [ebp-DC] ; 然后再执行一次出栈操作
004A5B9E . FF15 04114000 call [<&MSVBVM60.__vbaR8Str>] ; MSVBVM60.__vbaR8Str
004A5BA4 . DC0D 68204000 fmul qword ptr [402068] ; 乘上一个实数 6
004A5BAA . 83EC 08 sub esp, 8
004A5BAD . DC05 60204000 fadd qword ptr [402060] ; 乘了后的值 相加上一个实数1966
004A5BB3 . DC85 24FFFFFF fadd qword ptr [ebp-DC] ; 2者得数后的实数相加
004A5BB9 . DFE0 fstsw ax ; 保存状态字的值到AX
004A5BBB . A8 0D test al, 0D ; 测试al 与 OD
004A5BBD . 0F85 59030000 jnz 004A5F1C ; 不相等则跳
004A5BC3 . DD1C24 fstp qword ptr [esp] ; 然后再执行一次出栈操作
004A5BC6 . FF15 B8104000 call [<&MSVBVM60.__vbaStrR8>] ; MSVBVM60.__vbaStrR8
004A5BCC . 8BD0 mov edx, eax ; EAX送入EDX,EAX即为真码
004A5BCE . 8D4D DC lea ecx, [ebp-24]
004A5BD1 . FF15 54114000 call [<&MSVBVM60.__vbaStrMove>] ; MSVBVM60.__vbaStrMove
004A5BD7 . 50 push eax ; EAX入栈
004A5BD8 . FF15 88104000 call [<&MSVBVM60.__vbaStrCmp>] ; MSVBVM60.__vbaStrCmp
004A5BDE . 8BF8 mov edi, eax
004A5BE0 . 8D55 DC lea edx, [ebp-24]
004A5BE3 . F7DF neg edi
004A5BE5 . 8D45 E0 lea eax, [ebp-20]
004A5BE8 . 52 push edx
004A5BE9 . 8D4D E4 lea ecx, [ebp-1C]
004A5BEC . 50 push eax
004A5BED . 1BFF sbb edi, edi
004A5BEF . 8D55 E8 lea edx, [ebp-18]
004A5BF2 . 51 push ecx
004A5BF3 . 52 push edx
004A5BF4 . F7DF neg edi
004A5BF6 . 6A 04 push 4
004A5BF8 . F7DF neg edi
004A5BFA . FF15 18114000 call [<&MSVBVM60.__vbaFreeStrList>] ; MSVBVM60.__vbaFreeStrList
004A5C00 . 8D45 D0 lea eax, [ebp-30]
004A5C03 . 8D4D D4 lea ecx, [ebp-2C]
004A5C06 . 50 push eax
004A5C07 . 8D55 D8 lea edx, [ebp-28]
004A5C0A . 51 push ecx
004A5C0B . 52 push edx
004A5C0C . 6A 03 push 3
004A5C0E . FF15 34104000 call [<&MSVBVM60.__vbaFreeObjList>] ; MSVBVM60.__vbaFreeObjList
004A5C14 . 83C4 24 add esp, 24
004A5C17 . B9 04000280 mov ecx, 80020004
004A5C1C . B8 0A000000 mov eax, 0A
004A5C21 . 894D 98 mov [ebp-68], ecx
004A5C24 . 66:85FF test di, di
004A5C27 . 8945 90 mov [ebp-70], eax
004A5C2A . 894D A8 mov [ebp-58], ecx
004A5C2D . 8945 A0 mov [ebp-60], eax
004A5C30 . 894D B8 mov [ebp-48], ecx
004A5C33 . 8945 B0 mov [ebp-50], eax
004A5C36 . 0F84 93000000 je 004A5CCF ;爆破点,JE--->JMP
------------------------------------------------------------------------
【算法总结】
1、本机用户名出现后相加一次,然后再相加一个实数2000
2、本机用户名的值乘以6,然后再相加一个实数1966
3、最后1和2的值相加起来,即是注册码。
下面是粗糙的VB算法注册机源码:
建立2个TextBox ,1个CommandButton
Private Sub Command1_Click()
strcmp = Text1.Text
a = Val(Text1.Text)
sn1 = a + a + 2000
sn2 = a * 6 + 1966
sn = sn1 + sn2
Text2.Text = sn
End Sub
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!