飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5245|回复: 9

[原创] Zaas KeygenMe #2[VB] MD5算法简析+ASM注册机源码

[复制链接]
  • TA的每日心情
    难过
    2024-4-22 14:49
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2010-4-14 19:21:31 | 显示全部楼层 |阅读模式
    【破文标题】Zaas KeyGenMe #2[VB] MD5算法简析+ASM注册机源码
    【破文作者】飘云/P.Y.G
    【官方主页】https://www.chinapyg.com
    【作者博客】http://blog.piaoyunsoft.com
    破解平台】WinXp SP3
    【破解工具】PEiD0.94、OD
    【作者邮箱】piaoyun04@163.com
    【软件名称】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:

    1. .const
    2. szFormatHex db '%X',0
    3. szFormatSn db '%s',0

    4. .code
    5. ;=================================================
    6. ;Zaas KeygenMe #2[VB] 注册算法函数
    7. ;For ASM
    8. ;Code By PiaoYun/P.Y.G
    9. ;https://www.chinapyg.com
    10. ;=================================================
    11. KeyGen proc dwID:DWORD

    12. LOCAL @szTemp[128]:BYTE
    13. LOCAL @szHex[128]:BYTE
    14. LOCAL @szMD5[256]:BYTE
    15. ;LOCAL @szKey[256]:BYTE

    16. invoke RtlZeroMemory,addr @szTemp,sizeof @szTemp
    17. invoke RtlZeroMemory,addr @szHex,sizeof @szHex
    18. invoke RtlZeroMemory,addr @szMD5,sizeof @szMD5
    19. ;invoke RtlZeroMemory,addr @szKey,sizeof @szKey

    20. ;转换机器码为16进制
    21. invoke wsprintf,addr @szHex,addr szFormatHex,dwID

    22. ;获取ID长度
    23. invoke lstrlen,addr @szHex
    24. mov edx,eax
    25. ;传入ID地址
    26. lea ecx,@szHex
    27. ;倒序字符串
    28. @@:
    29. cmp edx,0
    30. je @F
    31. movzx   ebx, byte ptr [ecx]
    32. mov     byte ptr[@szTemp+edx-1],bl
    33. inc ecx
    34. dec edx
    35. jmp @B
    36. @@:
    37. invoke lstrlen,addr @szTemp
    38. ;MD5计算
    39. invoke _MD5,addr @szTemp,eax ;MD5计算
    40. ;转换成大写
    41. invoke CharUpper,eax

    42. ;截取前15位字符
    43. ;方法1:采用简便方法~~在16位的位置截断字符串~
    44. mov byte ptr[eax+15],0

    45. ; ;======================================
    46. ; ;方法2:当然你可以使用传统的方法截取
    47. ; mov ecx,15
    48. ; xor esi,esi
    49. ; @@:
    50. ; movzx ebx,byte ptr[eax+esi]
    51. ; mov byte ptr[@szKey+esi],bl
    52. ; inc esi
    53. ; loop @B
    54. ; lea eax,@szKey
    55. ; ;=======================================

    56. ret
    57. KeyGen endp


    58. 按钮事件代码:
    59. LOCAL @szBufferOutPut[512]:byte
    60. invoke GetDlgItemInt,hWnd,IDC_EDT_INPUT,NULL,FALSE ;IDC_EDT_INPUT 机器码框
    61. invoke KeyGen,eax ;调用算法函数
    62. invoke wsprintf,addr @szBufferOutPut,addr szFormatSn,eax ;格式化输出
    复制代码
    【版权声明】 本文纯属技术交流, 原创于PYG官方论坛, 转载请注明作者并保持文章的完整, 谢谢!
    1.gif

    KeyGen.rar

    3.07 KB, 下载次数: 21, 下载积分: 飘云币 -2 枚

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-3 23:07
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-4-14 19:46:12 | 显示全部楼层
    前排学习
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-10-3 06:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-4-14 20:04:34 | 显示全部楼层
    学习一下。。。
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2015-10-9 11:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-4-14 20:40:28 | 显示全部楼层
    学习了,谢谢飘云老大
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-4-14 23:06:13 | 显示全部楼层
    看不懂,进来负责顶贴
    PYG19周年生日快乐!
  • TA的每日心情

    2017-6-17 16:59
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2010-4-15 11:26:40 | 显示全部楼层
    /:L /:L
    看不懂,纯围观!!爆破就浪费作者的用心了!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-4-15 23:55:04 | 显示全部楼层
    支持一下楼主!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-4-18 13:36:21 | 显示全部楼层
    学习了..
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2024-1-15 22:57
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-4-18 15:50:42 | 显示全部楼层
    飘云老大出手。。。嘿嘿。。。汗颜了哈。。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-4-25 20:32:58 | 显示全部楼层
    支持飘云大哥,偶只会爆破!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表