- UID
- 2
注册时间2004-12-1
阅读权限255
最后登录1970-1-1
总坛主
TA的每日心情 | 开心 2024-12-1 11:04 |
---|
签到天数: 12 天 [LV.3]偶尔看看II
|
【破文标题】Zaas KeyGenMe #2[VB] MD5算法简析+ASM注册机源码
【破文作者】飘云/P.Y.G
【官方主页】https://www.chinapyg.com
【作者博客】http://blog.piaoyunsoft.com
【破解平台】WinXp SP3
【破解工具】PEiD0.94、OD
【作者邮箱】[email protected]
【软件名称】Zaas KeygenMe #2[VB]
【软件大小】10.41KB
【原版下载】https://www.chinapyg.com/viewthr ... &extra=page%3D1
看到坛友把这个CrackMe顶上来了~有不少人玩,但是没个过程,所以又做教程讲解了~~ 感谢Zaas朋友带来的试题~~~
至于怎么来到关键地方,就不多说了~ 如果找不到下面的代码,那么您还不适合看本文~
补习基础断点先~~
算法函数:
00406200 push ebp
00406201 mov ebp, esp
00406203 sub esp, 0C
00406206 push <jmp.&MSVBVM60.__vbaExceptHandl>; SE 处理程序安装
0040620B mov eax, dword ptr fs:[0]
00406211 push eax
00406212 mov dword ptr fs:[0], esp
00406219 sub esp, 110
0040621F push ebx
00406220 push esi
00406221 push edi
.
.
.
.
.
.
.
00406390 add esp, 0C
00406393 lea ecx, dword ptr [ebp-54]
00406396 call dword ptr [<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeObj
0040639C mov edx, 00402550 ; 上面生成机器码的过程,不必分析的,~有兴趣的下断 bp GetVolumeInformationA
004063A1 lea ecx, dword ptr [ebp-40]
004063A4 call dword ptr [<&MSVBVM60.__vbaStrC>; MSVBVM60.__vbaStrCopy
004063AA mov ecx, dword ptr [esi]
004063AC lea edx, dword ptr [ebp-D8]
004063B2 lea eax, dword ptr [ebp-40]
004063B5 push edx
004063B6 push eax
004063B7 push esi
004063B8 call dword ptr [ecx+734] ; 反序
004063BE cmp eax, edi
004063C0 jge short 004063D4
004063C2 push 734
004063C7 push 00402240
004063CC push esi
004063CD push eax
004063CE call dword ptr [<&MSVBVM60.__vbaHres>; MSVBVM60.__vbaHresultCheckObj
004063D4 mov ecx, dword ptr [ebp-D8] ; 机器码
004063DA call dword ptr [<&MSVBVM60.__vbaI4Ab>; MSVBVM60.__vbaI4Abs
004063E0 lea ecx, dword ptr [ebp-64]
004063E3 lea edx, dword ptr [ebp-74]
004063E6 push ecx
004063E7 push edx
004063E8 mov dword ptr [ebp-5C], eax
004063EB mov dword ptr [ebp-64], 3
004063F2 call dword ptr [<&MSVBVM60.#573>] ; 16进制转换
004063F8 lea eax, dword ptr [ebp-74]
004063FB push eax
004063FC call dword ptr [<&MSVBVM60.__vbaStrV>; MSVBVM60.__vbaStrVarMove
00406402 mov ebx, dword ptr [<&MSVBVM60.__vb>; 这里看到明文~ 机器码16进制
00406408 mov edx, eax
0040640A lea ecx, dword ptr [ebp-44]
0040640D call ebx ; <&MSVBVM60.__vbaStrMove>
0040640F mov ecx, dword ptr [esi]
00406411 lea edx, dword ptr [ebp-48]
00406414 lea eax, dword ptr [ebp-44]
00406417 push edx
00406418 push eax
00406419 push esi
0040641A call dword ptr [ecx+738] ; 反序上面的16进制
00406420 cmp eax, edi
00406422 jge short 00406436
00406424 push 738
00406429 push 00402240
0040642E push esi
0040642F push eax
00406430 call dword ptr [<&MSVBVM60.__vbaHres>; MSVBVM60.__vbaHresultCheckObj
00406436 mov edx, dword ptr [ebp-48] ; 反序之后的结果
00406439 lea ecx, dword ptr [ebp-4C]
0040643C mov dword ptr [ebp-48], edi
0040643F call ebx
00406441 mov ecx, dword ptr [esi]
00406443 lea edx, dword ptr [ebp-50]
00406446 lea eax, dword ptr [ebp-4C]
00406449 push edx
0040644A push eax
0040644B push esi
0040644C call dword ptr [ecx+718] ; MD5(反序之后的结果)
00406452 cmp eax, edi
00406454 jge short 00406468
00406456 push 718
0040645B push 00402240
00406460 push esi
00406461 push eax
00406462 call dword ptr [<&MSVBVM60.__vbaHres>; MSVBVM60.__vbaHresultCheckObj
00406468 mov edx, dword ptr [ebp-50] ; 返回的MD5字符串
.
.
.
.
下面乱七八糟的省略~~ 是KeyGen Me 就只看核心了~~~
OK,现在输入看看~~
断到这里:
00405D20 push ebp
00405D21 mov ebp, esp
00405D23 sub esp, 0C
00405D26 push <jmp.&MSVBVM60.__vbaExceptHandl>; SE 处理程序安装
00405D2B mov eax, dword ptr fs:[0]
00405D31 push eax
00405D32 mov dword ptr fs:[0], esp
00405D39 sub esp, 0F8
00405D3F push ebx
00405D40 push esi
00405D41 push edi
.
.
.
.
.
00405E93 call dword ptr [<&MSVBVM60.#528>] ; MSVBVM60.rtcUpperCaseVar //大写
00405E99 lea eax, dword ptr [ebp-58]
00405E9C push eax
00405E9D call edi
00405E9F mov edx, eax
00405EA1 lea ecx, dword ptr [ebp-30]
00405EA4 call ebx
00405EA6 lea ecx, dword ptr [ebp-58]
00405EA9 call dword ptr [<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeVar
00405EAF mov ecx, dword ptr [ebp-30]
00405EB2 mov edi, dword ptr [<&MSVBVM60.__vb>; MSVBVM60.__vbaLenBstr
00405EB8 push ecx ; /String
00405EB9 call edi ; \__vbaLenBstr
00405EBB cmp eax, 0F ; 15位 //注册码长度
00405EBE jnz 00406161
.
.
.
.
.004060BA mov edx, dword ptr [ebp-44]
004060BD lea ecx, dword ptr [ebp-18]
004060C0 mov dword ptr [ebp-44], 0
004060C7 call ebx
004060C9 mov ecx, dword ptr [ebp-18]
004060CC mov edx, dword ptr [esi+38]
004060CF push ecx
004060D0 push edx
004060D1 call dword ptr [<&MSVBVM60.__vbaStrC>; MSVBVM60.__vbaStrCmp //关键比较
004060D7 test eax, eax
004060D9 jnz 0040615F //关键跳转,,爆破点~~
上面一段对比注册码了~~ 其实就是开始那个机器码的MD5值得前15位~
【算法总结】
注册码(15位) = 机器码-->16进制-->反序-->MD5-->前15位~~
开始KeyGen:
- .const
- szFormatHex db '%X',0
- szFormatSn db '%s',0
- .code
- ;=================================================
- ;Zaas KeygenMe #2[VB] 注册算法函数
- ;For ASM
- ;Code By PiaoYun/P.Y.G
- ;https://www.chinapyg.com
- ;=================================================
- KeyGen proc dwID:DWORD
-
- LOCAL @szTemp[128]:BYTE
- LOCAL @szHex[128]:BYTE
- LOCAL @szMD5[256]:BYTE
- ;LOCAL @szKey[256]:BYTE
-
- invoke RtlZeroMemory,addr @szTemp,sizeof @szTemp
- invoke RtlZeroMemory,addr @szHex,sizeof @szHex
- invoke RtlZeroMemory,addr @szMD5,sizeof @szMD5
- ;invoke RtlZeroMemory,addr @szKey,sizeof @szKey
-
- ;转换机器码为16进制
- invoke wsprintf,addr @szHex,addr szFormatHex,dwID
-
- ;获取ID长度
- invoke lstrlen,addr @szHex
- mov edx,eax
- ;传入ID地址
- lea ecx,@szHex
- ;倒序字符串
- @@:
- cmp edx,0
- je @F
- movzx ebx, byte ptr [ecx]
- mov byte ptr[@szTemp+edx-1],bl
- inc ecx
- dec edx
- jmp @B
- @@:
- invoke lstrlen,addr @szTemp
- ;MD5计算
- invoke _MD5,addr @szTemp,eax ;MD5计算
- ;转换成大写
- invoke CharUpper,eax
-
- ;截取前15位字符
- ;方法1:采用简便方法~~在16位的位置截断字符串~
- mov byte ptr[eax+15],0
-
- ; ;======================================
- ; ;方法2:当然你可以使用传统的方法截取
- ; mov ecx,15
- ; xor esi,esi
- ; @@:
- ; movzx ebx,byte ptr[eax+esi]
- ; mov byte ptr[@szKey+esi],bl
- ; inc esi
- ; loop @B
- ; lea eax,@szKey
- ; ;=======================================
-
- ret
- KeyGen endp
- 按钮事件代码:
- LOCAL @szBufferOutPut[512]:byte
- invoke GetDlgItemInt,hWnd,IDC_EDT_INPUT,NULL,FALSE ;IDC_EDT_INPUT 机器码框
- invoke KeyGen,eax ;调用算法函数
- invoke wsprintf,addr @szBufferOutPut,addr szFormatSn,eax ;格式化输出
复制代码 【版权声明】 本文纯属技术交流, 原创于PYG官方论坛, 转载请注明作者并保持文章的完整, 谢谢! |
|