飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 8661|回复: 10

[原创] as3852711的超小KeyGenMe算法简析+ASM注册机源码

[复制链接]
  • TA的每日心情
    开心
    2024-12-1 11:04
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2010-4-10 13:33:52 | 显示全部楼层 |阅读模式
    【破文标题】as3852711的超小KeyGenMe算法简析+ASM注册机源码
    【破文作者】飘云/P.Y.G
    【官方主页】https://www.chinapyg.com
    【作者博客】http://blog.piaoyunsoft.com
    破解平台】WinXp SP3
    【破解工具】PEiD0.94、OD
    【作者邮箱】[email protected]
    【软件名称】as3852711的超小KeyGenMe
    【软件大小】4.7KB
    【原版下载】https://www.chinapyg.com/viewthr ... &extra=page%3D1

    感谢as3852711为我们带来了这个好东西,麻雀虽小五脏俱全啊~~ 这个KeyGenMe很有代表性~
    我就作为教程来讲解下~


    至于怎么来到关键地方,就不多说了~ 如果找不到下面的代码,那么您还不适合看本文~
    补习基础断点先~~

    算法函数:
    1. 004013C8  push    ebp
    2. 004013C9  mov     ebp, esp
    3. 004013CB  sub     esp, 50
    4. 004013CE  push    esi
    5. 004013CF  push    ebx
    6. 004013D0  mov     dword ptr [ebp-10], 1        ;  初始值j
    7. 004013D7  add     esp, -0C
    8. 004013DA  mov     eax, dword ptr [ebp+C]
    9. 004013DD  push    eax                          ; /s
    10. 004013DE  call    <jmp.&msvcrt.strlen>         ; \strlen
    11. 004013E3  add     esp, 10
    12. 004013E6  mov     dword ptr [ebp-8], eax
    13. 004013E9  add     esp, -0C
    14. 004013EC  mov     eax, dword ptr [ebp+10]
    15. 004013EF  push    eax                          ; /s
    16. 004013F0  call    <jmp.&msvcrt.strlen>         ; \strlen
    17. 004013F5  add     esp, 10
    18. 004013F8  mov     dword ptr [ebp-4], eax
    19. 004013FB  mov     dword ptr [ebp-24], 1
    20. 00401402  cmp     dword ptr [ebp-8], 5         ;  用户名必须5位
    21. 00401406  jnz     00401520
    22. 0040140C  mov     eax, dword ptr [ebp-8]       ;  5
    23. 0040140F  mov     edx, eax
    24. 00401411  lea     eax, dword ptr [edx+edx]     ;  5 + 5  这里就是注册码的程度  10位
    25. 00401414  cmp     dword ptr [ebp-4], eax
    26. 00401417  jnz     00401520
    27. 0040141D  mov     eax, dword ptr [ebp-8]
    28. 00401420  add     eax, -3
    29. 00401423  mov     dword ptr [ebp-4], eax
    30. 00401426  mov     dword ptr [ebp-C], 0         ;  赋值0
    31. 0040142D  lea     esi, dword ptr [esi]
    32. 00401430  cmp     dword ptr [ebp-C], 6         ;  i=0    while(i <= 6)
    33. 00401434  jle     short 00401440
    34. 00401436  jmp     00401500
    35. 0040143B  nop
    36. 0040143C  lea     esi, dword ptr [esi]
    37. 00401440  mov     eax, dword ptr [ebp+C]       ;  载入用户名
    38. 00401443  mov     edx, dword ptr [ebp-C]
    39. 00401446  add     eax, edx
    40. 00401448  cmp     byte ptr [eax], 7A           ;  z
    41. 0040144B  jg      004014F0
    42. 00401451  mov     eax, dword ptr [ebp+C]
    43. 00401454  mov     edx, dword ptr [ebp-C]
    44. 00401457  add     eax, edx
    45. 00401459  cmp     byte ptr [eax], 60
    46. 0040145C  jle     004014F0
    47. 00401462  mov     eax, dword ptr [ebp+10]      ;  载入注册码
    48. 00401465  mov     edx, dword ptr [ebp-C]
    49. 00401468  add     eax, edx
    50. 0040146A  cmp     byte ptr [eax], 5A           ;  Z
    51. 0040146D  jg      004014F0
    52. 00401473  mov     eax, dword ptr [ebp+10]
    53. 00401476  mov     edx, dword ptr [ebp-C]
    54. 00401479  add     eax, edx
    55. 0040147B  cmp     byte ptr [eax], 40           ;  上面一截都是对输入做限制~ 用户名:5位小写字符/注册码10位大写字符~~ 所以可以推断并不是所有用户名都能注册成功的!
    56. 0040147E  jle     short 004014F0
    57. 00401480  mov     eax, dword ptr [ebp+10]
    58. 00401483  mov     ecx, dword ptr [ebp-10]      ;  j
    59. 00401486  lea     edx, dword ptr [ecx+eax]     ;  修正注册码位置
    60. 00401489  movsx   eax, byte ptr [edx]          ;  Sn[j]
    61. 0040148C  mov     edx, dword ptr [ebp-10]      ;  j
    62. 0040148F  mov     ecx, dword ptr [ebp+10]
    63. 00401492  add     edx, ecx
    64. 00401494  lea     ecx, dword ptr [edx-1]       ;  修正注册码位置
    65. 00401497  movsx   edx, byte ptr [ecx]          ;  Sn[j-1]
    66. 0040149A  sub     eax, edx                     ;  Sn[j] - Sn[j-1]
    67. 0040149C  cmp     eax, dword ptr [ebp-C]       ;  if Sn[j] - Sn[j-1] = i
    68. 0040149F  jnz     short 004014F0
    69. 004014A1  mov     eax, dword ptr [ebp+C]       ;  name
    70. 004014A4  mov     ecx, dword ptr [ebp-C]       ;  i
    71. 004014A7  lea     edx, dword ptr [ecx+eax]     ;  修正用户名位置
    72. 004014AA  movsx   eax, byte ptr [edx]          ;  name[i]
    73. 004014AD  mov     edx, dword ptr [ebp-10]      ;  j
    74. 004014B0  mov     ecx, dword ptr [ebp+10]
    75. 004014B3  add     edx, ecx
    76. 004014B5  lea     ecx, dword ptr [edx-1]
    77. 004014B8  movsx   edx, byte ptr [ecx]          ;  Sn[j-1]
    78. 004014BB  mov     ecx, eax
    79. 004014BD  sub     ecx, edx                     ;  name[i] - Sn[j-1]
    80. 004014BF  mov     dword ptr [ebp-34], ecx      ;  计算结果A
    81. 004014C2  mov     edx, dword ptr [ebp-10]      ;  j
    82. 004014C5  add     edx, 2                       ;  k = j + 2
    83. 004014C8  mov     ebx, 1D                      ;  0x1D(29)
    84. 004014CD  mov     eax, ebx
    85. 004014CF  mov     esi, edx
    86. 004014D1  cdq
    87. 004014D2  idiv    esi                          ;  N = 0x1D(29)/k
    88. 004014D4  mov     ecx, eax
    89. 004014D6  lea     ebx, dword ptr [ecx+1E]      ;  N + 0x1E(30)
    90. 004014D9  cmp     dword ptr [ebp-34], ebx      ;  if A = N
    91. 004014DC  jnz     short 004014ED
    92. 004014DE  add     dword ptr [ebp-10], 2        ;  j = j + 2
    93. 004014E2  mov     eax, dword ptr [ebp-4]
    94. 004014E5  mov     edx, eax
    95. 004014E7  lea     eax, dword ptr [edx+edx]
    96. 004014EA  mov     dword ptr [ebp-4], eax
    97. 004014ED  jmp     short 004014F4
    98. 004014EF  nop
    99. 004014F0  add     dword ptr [ebp-4], -19
    100. 004014F4  inc     dword ptr [ebp-C]            ;  i = i + 1
    101. 004014F7  jmp     00401430
    102. 004014FC  lea     esi, dword ptr [esi]         ;  到这就够了,下面我们整理公式
    103. 00401500  add     esp, -8
    104. 00401503  mov     eax, dword ptr [ebp-4]
    105. 00401506  add     eax, -9
    106. 00401509  lea     edx, dword ptr [eax+eax]
    107. 0040150C  push    edx
    108. 0040150D  mov     eax, dword ptr [ebp+8]
    109. 00401510  push    eax
    110. 00401511  call    00401548
    111. 00401516  add     esp, 10
    112. 00401519  jmp     short 0040153A
    113. 0040151B  nop
    114. 0040151C  lea     esi, dword ptr [esi]
    115. 00401520  add     esp, -0C
    116. 00401523  push    4                            ; /LanguageID = 4 (LANG_CHINESE)
    117. 00401525  push    10                           ; |Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
    118. 00401527  push    0                            ; |Title = NULL
    119. 00401529  push    00401308                     ; |Text = ""
    120. 0040152E  mov     eax, dword ptr [ebp+8]       ; |
    121. 00401531  push    eax                          ; |hOwner
    122. 00401532  call    <jmp.&USER32.MessageBoxExA>  ; \MessageBoxExA
    123. 00401537  add     esp, 0C
    124. 0040153A  jmp     short 00401540
    125. 0040153C  jmp     short 00401540
    126. 0040153E  mov     esi, esi
    127. 00401540  lea     esp, dword ptr [ebp-58]
    128. 00401543  pop     ebx
    129. 00401544  pop     esi
    130. 00401545  leave
    131. 00401546  retn

    132. 【算法总结】
    133. 整理一下:
    134. 最初:
    135. j = 1
    136. i = 0
    137. 公式:
    138. 1.name[i] - sn[j-1] = 29/(j+2) + 30
    139. 2.sn[j] - sn[j-1] = i

    140. 解个方程啊~~ 我们是要求出sn
    141. 那么公式变成如下了:
    142. 1.sn[j-1] = name[i] - (29/(j+2) + 30)
    143. 2.sn[j] = i + sn[j-1]

    144. ;=================================================
    145. ;用户名:5位小写字母
    146. ;注册码:10位大写字母
    147. ;所以可以推断并不是所有用户名都能注册成功的!
    148. ;=================================================
    复制代码
    1. ;=================================================
    2. ;注册算法函数
    3. ;For ASM
    4. ;Code By PiaoYun/P.Y.G
    5. ;https://www.chinapyg.com
    6. ;=================================================
    7. KeyGen proc dwName:DWORD

    8. LOCAL @szTemp[11]:BYTE
    9. LOCAL @szSn[128]:BYTE

    10. invoke RtlZeroMemory,addr @szTemp,sizeof @szTemp
    11. invoke RtlZeroMemory,addr @szSn,sizeof @szSn

    12. xor esi,esi ;i
    13. mov edx,1 ;j
    14. mov edi,edx

    15. @@:
    16. cmp     esi, 5
    17. jge @F
    18. mov edx,edi
    19. ;29 div (j + 2) + 30
    20. add     edx, 2
    21. mov     ebx, 1Dh
    22. mov     eax, ebx
    23. mov     ecx, edx
    24. cdq
    25. idiv    ecx
    26. mov     ecx, eax
    27. lea     ebx, dword ptr [ecx+1Eh]
    28. ;name[i] - (29 div (j + 2) + 30
    29. mov eax,dwName
    30. movzx eax,byte ptr [esi+eax]
    31. sub eax,ebx
    32. ;Sn[j-1]
    33. mov byte ptr[@szTemp + edi - 1],al
    34. ;Sn[j]
    35. add eax,esi
    36. mov byte ptr[@szTemp + edi],al

    37. inc esi
    38. add edi,2
    39. jmp @B
    40. @@:

    41. invoke lstrcpy,addr @szSn,addr @szTemp
    42. lea eax,@szSn
    43. ret

    44. KeyGen endp
    复制代码
    【版权声明】 本文纯属技术交流, 原创于PYG官方论坛, 转载请注明作者并保持文章的完整, 谢谢!
    2.gif

    KeyGen.rar

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

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

    [LV.2]偶尔看看I

    发表于 2010-4-10 16:46:46 | 显示全部楼层
    分就不加了哈,/:018
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-4-10 20:08:08 | 显示全部楼层
    飘老大浮出了啊,顶
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2015-10-9 11:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-4-10 20:57:29 | 显示全部楼层
    学习一下飘老大的分析
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2021-10-11 20:54
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-4-10 21:51:13 | 显示全部楼层
    /:good 能看出是很深奥的东西,很精简,值得学习
    PYG19周年生日快乐!
  • TA的每日心情
    郁闷
    2021-10-2 23:26
  • 签到天数: 46 天

    [LV.5]常住居民I

    发表于 2010-4-12 12:15:31 | 显示全部楼层
    呵呵!真是有点脸红,连飘云兄也来看我这个程序!:loveliness: :loveliness:
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-5-12 21:54
  • 签到天数: 39 天

    [LV.5]常住居民I

    发表于 2016-10-16 23:57:57 | 显示全部楼层
    大牛分析的小菜怎么看的懂,真心不懂。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-7-1 11:02
  • 签到天数: 451 天

    [LV.9]以坛为家II

    发表于 2016-10-19 10:32:34 | 显示全部楼层
    支持飘云版主,支持飘云阁
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-10-23 21:45:42 | 显示全部楼层
    谢谢分享,学习了!!!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-24 22:17
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-10-24 22:15:33 | 显示全部楼层
    支持飘云版主,支持飘云阁
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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