飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5082|回复: 8

aLoNg3x.1-CrackMe简单算法分析+VB注册机源码

[复制链接]
  • TA的每日心情
    奋斗
    2016-10-21 20:30
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2006-5-16 16:56:36 | 显示全部楼层 |阅读模式

    1. 【破文标题】aLoNg3x.1-CrackMe简单算法分析+VB注册机源码
    2. 破解作者】hrbx
    3. 【作者主页】hrbx.ys168.com
    4. 【作者邮箱】hrbx@163.com
    5. 【破解平台】WinXP
    6. 【使用工具】flyOD1.10、Peid
    7. 【破解日期】2006-5-16
    8. 【软件名称】aLoNg3x.1-CrackMe
    9. 【软件大小】344KB
    10. 【下载地址】https://www.chinapyg.com/viewthread.php?tid=4815&extra=page%3D1
    11. 【加壳方式】无
    12. 【软件简介】aLoNg3x.1-CrackMe
    13. -----------------------------------------------------------------------------------------------
    14. 【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
    15. -----------------------------------------------------------------------------------------------
    16. 【破解过程】
    17. 0.前言。这个CrackMe本身并没有多大的难度,只是比较具有欺骗性。开始以为那个"Cancella"按钮是用于清除
    18. 注册码的"Cancel"按钮,把注意力都放在使CrackMe的灰色按钮可用,而事实上并非如此。
    19. 1.查壳。用PEID扫描,显示为:Borland Delphi 6.0 - 7.0。
    20. 2.试运行。输入注册信息,"OK"按钮为灰色不可用,点击"Cancella"按钮注册码被清空,无任何错误提示。
    21. 通过DeDe分析得知,"OK"按钮按钮事件开始地址为00442D64,"Cancella"按钮按钮事件开始地址为00442EA8。
    22. 3.一切从"Cancella"按钮开始。OD载入CrackMe,Ctrl+G,输入:00442EA8,回车,来到00442EA8处F2下断,
    23. F9运行,输入注册信息:
    24. ========================
    25. Nome:honrbx
    26. Codice:987654321
    27. ========================
    28. 点击"Cancella"按钮,立即中断:

    29. 00442EA8     55              push ebp                           ; F2中此下断,中断后F8往下走
    30. 00442EA9     8BEC            mov ebp,esp
    31. 00442EAB     6A 00           push 0
    32. 00442EAD     53              push ebx
    33. 00442EAE     8BD8            mov ebx,eax
    34. 00442EB0     33C0            xor eax,eax
    35. 00442EB2     55              push ebp
    36. 00442EB3     68 322F4400     push aLoNg3x_.00442F32
    37. 00442EB8     64:FF30         push dword ptr fs:[eax]
    38. 00442EBB     64:8920         mov dword ptr fs:[eax],esp
    39. 00442EBE     8D55 FC         lea edx,dword ptr ss:[ebp-4]
    40. 00442EC1     8B83 E0020000   mov eax,dword ptr ds:[ebx+2E0]
    41. 00442EC7     E8 F403FEFF     call aLoNg3x_.004232C0
    42. 00442ECC     8B45 FC         mov eax,dword ptr ss:[ebp-4]       ; 假码"987654321"
    43. 00442ECF     E8 9C47FCFF     call aLoNg3x_.00407670             ; 假码转为16进制整数
    44. 00442ED4     50              push eax                           ; EAX=0x3ADE68B1(987654321)
    45. 00442ED5     8D55 FC         lea edx,dword ptr ss:[ebp-4]
    46. 00442ED8     8B83 DC020000   mov eax,dword ptr ds:[ebx+2DC]
    47. 00442EDE     E8 DD03FEFF     call aLoNg3x_.004232C0
    48. 00442EE3     8B45 FC         mov eax,dword ptr ss:[ebp-4]       ; 用户名"honrbx"
    49. 00442EE6     5A              pop edx
    50. 00442EE7     E8 08FCFFFF     call aLoNg3x_.00442AF4             ; 关键CALL-1,F7进入
    51. 00442EEC     84C0            test al,al
    52. 00442EEE     74 1C           je short aLoNg3x_.00442F0C         ; 暴破点1,Nop掉
    53. 00442EF0     33D2            xor edx,edx
    54. 00442EF2     8B83 D0020000   mov eax,dword ptr ds:[ebx+2D0]
    55. 00442EF8     E8 B302FEFF     call aLoNg3x_.004231B0
    56. 00442EFD     B2 01           mov dl,1
    57. 00442EFF     8B83 CC020000   mov eax,dword ptr ds:[ebx+2CC]
    58. 00442F05     8B08            mov ecx,dword ptr ds:[eax]
    59. 00442F07     FF51 60         call dword ptr ds:[ecx+60]
    60. 00442F0A     EB 10           jmp short aLoNg3x_.00442F1C
    61. 00442F0C     BA 482F4400     mov edx,aLoNg3x_.00442F48          ; 0
    62. 00442F11     8B83 E0020000   mov eax,dword ptr ds:[ebx+2E0]
    63. 00442F17     E8 D403FEFF     call aLoNg3x_.004232F0
    64. 00442F1C     33C0            xor eax,eax
    65. 00442F1E     5A              pop edx
    66. 00442F1F     59              pop ecx
    67. 00442F20     59              pop ecx
    68. 00442F21     64:8910         mov dword ptr fs:[eax],edx
    69. 00442F24     68 392F4400     push aLoNg3x_.00442F39
    70. 00442F29     8D45 FC         lea eax,dword ptr ss:[ebp-4]
    71. 00442F2C     E8 8708FCFF     call aLoNg3x_.004037B8
    72. 00442F31     C3              retn

    73. F7进入00442EE7处的关键CALL-1,来到:

    74. 00442AF4     55              push ebp
    75. 00442AF5     8BEC            mov ebp,esp
    76. 00442AF7     83C4 F8         add esp,-8
    77. 00442AFA     53              push ebx
    78. 00442AFB     56              push esi
    79. 00442AFC     8955 F8         mov dword ptr ss:[ebp-8],edx
    80. 00442AFF     8945 FC         mov dword ptr ss:[ebp-4],eax
    81. 00442B02     8B45 FC         mov eax,dword ptr ss:[ebp-4]
    82. 00442B05     E8 DE10FCFF     call aLoNg3x_.00403BE8
    83. 00442B0A     33C0            xor eax,eax
    84. 00442B0C     55              push ebp
    85. 00442B0D     68 902B4400     push aLoNg3x_.00442B90
    86. 00442B12     64:FF30         push dword ptr fs:[eax]
    87. 00442B15     64:8920         mov dword ptr fs:[eax],esp
    88. 00442B18     8B45 FC         mov eax,dword ptr ss:[ebp-4]       ; 用户名"honrbx"
    89. 00442B1B     E8 140FFCFF     call aLoNg3x_.00403A34             ; 获取用户名长度,EAX=6
    90. 00442B20     83F8 05         cmp eax,5                          ; 用户名长度与5比较
    91. 00442B23     7E 53           jle short aLoNg3x_.00442B78        ; 小于等于则Over
    92. 00442B25     8B45 FC         mov eax,dword ptr ss:[ebp-4]       ; 用户名"honrbx"
    93. 00442B28     0FB640 04       movzx eax,byte ptr ds:[eax+4]      ; 取用户名第5位字符的ASCII值,EAX=0x62('b')
    94. 00442B2C     B9 07000000     mov ecx,7                          ; ECX=7
    95. 00442B31     33D2            xor edx,edx
    96. 00442B33     F7F1            div ecx                            ; EAX/ECX,商给EAX,余数给EDX
    97. 00442B35     8BC2            mov eax,edx                        ; EAX=EDX,余数给EAX
    98. 00442B37     83C0 02         add eax,2                          ; EAX=EAX+2
    99. 00442B3A     E8 E1FEFFFF     call aLoNg3x_.00442A20
    100. 00442B3F     8BF0            mov esi,eax                        ; ESI=EAX
    101. 00442B41     33DB            xor ebx,ebx
    102. 00442B43     8B45 FC         mov eax,dword ptr ss:[ebp-4]       ; 用户名"honrbx"
    103. 00442B46     E8 E90EFCFF     call aLoNg3x_.00403A34             ; 获取用户名长度,EAX=6
    104. 00442B4B     85C0            test eax,eax
    105. 00442B4D     7E 16           jle short aLoNg3x_.00442B65
    106. 00442B4F     BA 01000000     mov edx,1
    107. 00442B54     8B4D FC         mov ecx,dword ptr ss:[ebp-4]       ; 用户名"honrbx"
    108. 00442B57     0FB64C11 FF     movzx ecx,byte ptr ds:[ecx+edx-1]  ; 依次取用户名每一位字符的ASCII值给ECX
    109. 00442B5C     0FAFCE          imul ecx,esi                       ; ECX=ECX*ESI,ESI初值为上面用户名第5位字符运算所得结果
    110. 00442B5F     03D9            add ebx,ecx                        ; EBX=EBX+ECX
    111. 00442B61     42              inc edx                            ; EBX=0x522(1314)
    112. 00442B62     48              dec eax
    113. 00442B63   ^ 75 EF           jnz short aLoNg3x_.00442B54        ; 没取完用户名则跳回去继续
    114. 00442B65     2B5D F8         sub ebx,dword ptr ss:[ebp-8]       ; EBX=EBX-ss:[ebp-8],ss:[ebp-8]=3ADE68B1假码的16进制数
    115. 00442B68     81FB 697A0000   cmp ebx,7A69                       ; EBX与0x7A69(31337)比较
    116. 00442B6E     75 04           jnz short aLoNg3x_.00442B74        ; 不等则Over
    117. 00442B70     B3 01           mov bl,1                           ; 相等则赋值BL=1
    118. 00442B72     EB 06           jmp short aLoNg3x_.00442B7A
    119. 00442B74     33DB            xor ebx,ebx
    120. 00442B76     EB 02           jmp short aLoNg3x_.00442B7A
    121. 00442B78     33DB            xor ebx,ebx
    122. 00442B7A     33C0            xor eax,eax
    123. 00442B7C     5A              pop edx
    124. 00442B7D     59              pop ecx
    125. 00442B7E     59              pop ecx
    126. 00442B7F     64:8910         mov dword ptr fs:[eax],edx
    127. 00442B82     68 972B4400     push aLoNg3x_.00442B97
    128. 00442B87     8D45 FC         lea eax,dword ptr ss:[ebp-4]
    129. 00442B8A     E8 290CFCFF     call aLoNg3x_.004037B8
    130. 00442B8F     C3              retn

    131. 程序取用户名经过运算后与输入的注册码相减再与0x7A69比较,故注册码应为:0x522(1314)-0x7A69(31337)=-30023.
    132. 4.解决"OK"按钮。不退出OD,更改注册信息为:
    133. ========================
    134. Nome:honrbx
    135. Codice:-30023
    136. ========================
    137. 点击"Cancella"按钮,"Cancella"按钮变为不可见,同时"OK"按钮也变为可点击。
    138. Ctrl+G,输入通过DeDe找到的"OK"按钮按钮事件开始地址:00442D64,回车,来到00442D64处F2下断,点击"OK"按钮,
    139. 立即中断:

    140. 00442D64     55              push ebp                           ; F2在此下断,中断后F8往下
    141. 00442D65     8BEC            mov ebp,esp
    142. 00442D67     6A 00           push 0
    143. 00442D69     53              push ebx
    144. 00442D6A     8BD8            mov ebx,eax
    145. 00442D6C     33C0            xor eax,eax
    146. 00442D6E     55              push ebp
    147. 00442D6F     68 ED2D4400     push aLoNg3x_.00442DED
    148. 00442D74     64:FF30         push dword ptr fs:[eax]
    149. 00442D77     64:8920         mov dword ptr fs:[eax],esp
    150. 00442D7A     8B83 D0020000   mov eax,dword ptr ds:[ebx+2D0]
    151. 00442D80     8078 47 01      cmp byte ptr ds:[eax+47],1
    152. 00442D84     75 12           jnz short aLoNg3x_.00442D98
    153. 00442D86     BA 002E4400     mov edx,aLoNg3x_.00442E00          ; 0
    154. 00442D8B     8B83 E0020000   mov eax,dword ptr ds:[ebx+2E0]
    155. 00442D91     E8 5A05FEFF     call aLoNg3x_.004232F0
    156. 00442D96     EB 3F           jmp short aLoNg3x_.00442DD7
    157. 00442D98     8D55 FC         lea edx,dword ptr ss:[ebp-4]
    158. 00442D9B     8B83 E0020000   mov eax,dword ptr ds:[ebx+2E0]
    159. 00442DA1     E8 1A05FEFF     call aLoNg3x_.004232C0
    160. 00442DA6     8B45 FC         mov eax,dword ptr ss:[ebp-4]       ; 注册码"-30023"
    161. 00442DA9     E8 C248FCFF     call aLoNg3x_.00407670
    162. 00442DAE     50              push eax
    163. 00442DAF     8D55 FC         lea edx,dword ptr ss:[ebp-4]
    164. 00442DB2     8B83 DC020000   mov eax,dword ptr ds:[ebx+2DC]
    165. 00442DB8     E8 0305FEFF     call aLoNg3x_.004232C0
    166. 00442DBD     8B45 FC         mov eax,dword ptr ss:[ebp-4]       ; 用户名"honrbx"
    167. 00442DC0     5A              pop edx
    168. 00442DC1     E8 DAFDFFFF     call aLoNg3x_.00442BA0             ; 关键CALL-2,F7进入
    169. 00442DC6     84C0            test al,al
    170. 00442DC8     74 0D           je short aLoNg3x_.00442DD7         ; 暴破点2,Nop掉
    171. 00442DCA     33D2            xor edx,edx
    172. 00442DCC     8B83 CC020000   mov eax,dword ptr ds:[ebx+2CC]
    173. 00442DD2     E8 D903FEFF     call aLoNg3x_.004231B0
    174. 00442DD7     33C0            xor eax,eax
    175. 00442DD9     5A              pop edx
    176. 00442DDA     59              pop ecx
    177. 00442DDB     59              pop ecx
    178. 00442DDC     64:8910         mov dword ptr fs:[eax],edx
    179. 00442DDF     68 F42D4400     push aLoNg3x_.00442DF4
    180. 00442DE4     8D45 FC         lea eax,dword ptr ss:[ebp-4]
    181. 00442DE7     E8 CC09FCFF     call aLoNg3x_.004037B8
    182. 00442DEC     C3              retn

    183. F7进入00442DC1处的关键CALL-2,来到:

    184. 00442BA0     55              push ebp
    185. 00442BA1     8BEC            mov ebp,esp
    186. 00442BA3     6A 00           push 0
    187. 00442BA5     6A 00           push 0
    188. 00442BA7     6A 00           push 0
    189. 00442BA9     53              push ebx
    190. 00442BAA     56              push esi
    191. 00442BAB     8BF2            mov esi,edx
    192. 00442BAD     8945 FC         mov dword ptr ss:[ebp-4],eax      
    193. 00442BB0     8B45 FC         mov eax,dword ptr ss:[ebp-4]
    194. 00442BB3     E8 3010FCFF     call aLoNg3x_.00403BE8
    195. 00442BB8     33C0            xor eax,eax
    196. 00442BBA     55              push ebp
    197. 00442BBB     68 672C4400     push aLoNg3x_.00442C67
    198. 00442BC0     64:FF30         push dword ptr fs:[eax]
    199. 00442BC3     64:8920         mov dword ptr fs:[eax],esp
    200. 00442BC6     33DB            xor ebx,ebx
    201. 00442BC8     8D55 F8         lea edx,dword ptr ss:[ebp-8]
    202. 00442BCB     8BC6            mov eax,esi
    203. 00442BCD     E8 6E4AFCFF     call aLoNg3x_.00407640
    204. 00442BD2     8D45 F4         lea eax,dword ptr ss:[ebp-C]
    205. 00442BD5     8B55 F8         mov edx,dword ptr ss:[ebp-8]
    206. 00442BD8     E8 730CFCFF     call aLoNg3x_.00403850
    207. 00442BDD     8B45 F8         mov eax,dword ptr ss:[ebp-8]       ; 注册码"-30023"
    208. 00442BE0     E8 4F0EFCFF     call aLoNg3x_.00403A34             ; 获取注册码长度,EAX=6
    209. 00442BE5     83F8 05         cmp eax,5                          ; 注册码长度与5比较
    210. 00442BE8     7E 60           jle short aLoNg3x_.00442C4A        ; 小于等于则Over
    211. 00442BEA     8B45 F8         mov eax,dword ptr ss:[ebp-8]       ; 注册码"-30023"
    212. 00442BED     E8 420EFCFF     call aLoNg3x_.00403A34             ; 获取注册码长度,EAX=6
    213. 00442BF2     8BF0            mov esi,eax
    214. 00442BF4     83FE 01         cmp esi,1                          ; 注册码长度与1比较
    215. 00442BF7     7C 2F           jl short aLoNg3x_.00442C28         ; 小于则Over
    216. 00442BF9     8D45 F4         lea eax,dword ptr ss:[ebp-C]
    217. 00442BFC     E8 0310FCFF     call aLoNg3x_.00403C04
    218. 00442C01     8D4430 FF       lea eax,dword ptr ds:[eax+esi-1]
    219. 00442C05     50              push eax
    220. 00442C06     8B45 F8         mov eax,dword ptr ss:[ebp-8]       ; 注册码"-30023"
    221. 00442C09     0FB64430 FF     movzx eax,byte ptr ds:[eax+esi-1]  ; 依次取注册码每一位字符的ASCII值给EAX
    222. 00442C0E     F7E8            imul eax                           ; EAX=EAX*EAX
    223. 00442C10     0FBFC0          movsx eax,ax                       ; EAX=AX
    224. 00442C13     F7EE            imul esi                           ; EAX=EAX*ESI,ESI为取出的字符的位置
    225. 00442C15     B9 19000000     mov ecx,19                         ; ECX=0x19
    226. 00442C1A     99              cdq
    227. 00442C1B     F7F9            idiv ecx                           ; EAX/ECX,商给EAX,余数给EDX
    228. 00442C1D     83C2 41         add edx,41                         ; EDX=EDX+0x41
    229. 00442C20     58              pop eax
    230. 00442C21     8810            mov byte ptr ds:[eax],dl           ; DL保存
    231. 00442C23     4E              dec esi
    232. 00442C24     85F6            test esi,esi
    233. 00442C26   ^ 75 D1           jnz short aLoNg3x_.00442BF9        ; 没取完注册码则跳回去继续循环
    234. 00442C28     8B45 F4         mov eax,dword ptr ss:[ebp-C]       ; 计算所得的用户名"ACMQAG"
    235. 00442C2B     8B55 FC         mov edx,dword ptr ss:[ebp-4]       ; 输入的用户名"honrbx"
    236. 00442C2E     E8 110FFCFF     call aLoNg3x_.00403B44             ; 比较两者是否相等
    237. 00442C33     75 17           jnz short aLoNg3x_.00442C4C        ; 不等则Over
    238. 00442C35     8B45 FC         mov eax,dword ptr ss:[ebp-4]
    239. 00442C38     8B55 F4         mov edx,dword ptr ss:[ebp-C]
    240. 00442C3B     E8 040FFCFF     call aLoNg3x_.00403B44
    241. 00442C40     75 04           jnz short aLoNg3x_.00442C46
    242. 00442C42     B3 01           mov bl,1
    243. 00442C44     EB 06           jmp short aLoNg3x_.00442C4C
    244. 00442C46     33DB            xor ebx,ebx
    245. 00442C48     EB 02           jmp short aLoNg3x_.00442C4C
    246. 00442C4A     33DB            xor ebx,ebx
    247. 00442C4C     33C0            xor eax,eax
    248. 00442C4E     5A              pop edx
    249. 00442C4F     59              pop ecx
    250. 00442C50     59              pop ecx
    251. 00442C51     64:8910         mov dword ptr fs:[eax],edx
    252. 00442C54     68 6E2C4400     push aLoNg3x_.00442C6E
    253. 00442C59     8D45 F4         lea eax,dword ptr ss:[ebp-C]
    254. 00442C5C     BA 03000000     mov edx,3
    255. 00442C61     E8 760BFCFF     call aLoNg3x_.004037DC
    256. 00442C66     C3              retn

    257. -----------------------------------------------------------------------------------------------
    258. 【破解总结】
    259. 1.程序先取用户名运算得到一数值与输入的注册码相减,结果与0x7A69比较,相等则隐藏"Cancella"按钮,同时使"OK"按钮变为可用。
    260. 2.点击"OK"按钮时,取输入的注册码经过运算得到一字符串与输入的用户名比较,相等则隐藏"OK"按钮。
    261. 一组可用注册码:
    262. ========================
    263. (1)隐藏"Cancella"按钮
    264. Nome:honrbx
    265. Codice:-30023
    266. (2)隐藏"OK"按钮
    267. Nome:ACMQAG
    268. Codice:-30023
    269. ========================

    270. 暴破更改以下位置:
    271. 00442EEE                je short aLoNg3x_.00442F0C         ; je====>Nop
    272. 00442DC8                je short aLoNg3x_.00442DD7         ; je====>Nop

    273. 【VB注册机源码】
    274. Private Sub Generate_Click()

    275. On Error Resume Next

    276. Dim Name As String
    277. Dim Code As String
    278. Dim Codice As Long
    279. Dim length As Integer
    280. Dim num As Integer
    281. Dim i As Integer

    282. If GetCodice.Value = True Then
    283.    
    284.     Name = Text1.Text
    285.     length = Len(Name)
    286.     Codice = 0
    287.    
    288.     If (length <= 5 Or length > 10) Then
    289.         Text2.Text = "Name is too long or too short!"
    290.     Else
    291.          num = Asc(Mid(Name, 5, 1)) Mod 7 + 2
    292.          For i = 1 To length
    293.          Codice = Codice + Asc(Mid(Name, i, 1)) * num
    294.          Next i
    295.          Codice = Codice - &H7A69
    296.          Text2.Text = Codice
    297.     End If

    298. End If

    299. If GetName.Value = True Then
    300.    Code = Text2.Text
    301.    length = Len(Code)
    302.    Name = ""
    303.    
    304. If (length <= 5 Or length > 9) Then
    305.      Text1.Text = "Codice is too long or too short!"
    306. Else
    307.       
    308.     For i = 1 To length
    309.         num = Asc(Mid(Code, i, 1)) * Asc(Mid(Code, i, 1)) * i Mod &H19 + &H41
    310.         Name = Name & Chr(num)
    311.     Next i
    312.    Text1.Text = Name

    313. End If

    314. End If

    315. End Sub

    316. -----------------------------------------------------------------------------------------------
    317. 【版权声明】本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

    复制代码

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-5-16 18:20:51 | 显示全部楼层
    学习啦,谢谢
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-5-16 19:09:39 | 显示全部楼层
    有点明白
    关键一是要用DEDE找到程序两个命令按钮的入口地址下断
    关键二是找到关键跳
    不明白的是如果不懂算法能否追到真码
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-5-16 21:10:14 | 显示全部楼层
    注册机做的好漂亮~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-5-17 19:07:57 | 显示全部楼层
    好文,学习了```
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-5-17 19:40:44 | 显示全部楼层
    收藏,学习中
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2006-5-19 11:57:08 | 显示全部楼层
    原帖由 风球 于 2006-5-17 19:07 发表
    好文,学习了```


    The same! UpUpUP!
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2016-8-5 17:44
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2006-5-19 14:29:18 | 显示全部楼层
    厉害,这都能破解,佩服学习一下
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-23 00:10:14 | 显示全部楼层
    强,这个偶明天认真学习下
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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