飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3937|回复: 6

OCN CrackMe2004算法分析+VB注册机源码

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

    [LV.1]初来乍到

    发表于 2006-1-2 00:10:44 | 显示全部楼层 |阅读模式

    1. 【破文标题】OCN CrackMe2004算法分析+VB注册机源码
    2. 破解作者】hrbx
    3. 【作者主页】hrbx.ys168.com
    4. 【作者邮箱】hrbx@163.com
    5. 【破解平台】WinXP
    6. 【使用工具】flyOD1.10、Peid
    7. 【破解日期】2006-01-01
    8. 【软件名称】OCN Crackme2004
    9. 【软件大小】44KB
    10. 【下载地址】http://ocn.e5v.com/bbs1/viewthread.php?tid=1114&fpage=1&highlight=&page=1
    11. 【加壳方式】无
    12. 【软件简介】OCN Crackme2004
    13. -----------------------------------------------------------------------------------------------
    14. 【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
    15. -----------------------------------------------------------------------------------------------
    16. 【破解过程】
    17. 1.查壳。用Peid扫描,显示为:Microsoft Visual Basic 5.0 / 6.0,无壳。
    18. 2.试运行CrackMe。输入注册信息后点击Validate按钮,注册信息被清空,无任何提示。
    19. 3.OD载入。命令行下断点:bp __vbaLenBstr,回车,F9运行,输入注册信息:

    20. ================================
    21. Name:hrbx
    22. Serial:9876543210
    23. ================================
    24. 点击Validate按钮,立即中断:

    25. 660E5F5F MS>  8B4424 04   mov eax,dword ptr ss:[esp+4]              ; 中断在这里
    26. 660E5F63      85C0        test eax,eax
    27. 660E5F65      74 05       je short MSVBVM60.660E5F6C
    28. 660E5F67      8B40 FC     mov eax,dword ptr ds:[eax-4]

    29. Alt+F9返回,来到:

    30. 004052D1     .  FF15 1C104000    call dword ptr ds:[<&MSVBVM60.__vbaLenBst>
    31. 004052D7     .  8D95 48FFFFFF    lea edx,dword ptr ss:[ebp-B8]             ;  Alt+F9返回到这里
    32. 004052DD     .  8D4D D4          lea ecx,dword ptr ss:[ebp-2C]
    33. 004052E0     .  8985 50FFFFFF    mov dword ptr ss:[ebp-B0],eax

    34. 向上查找,来到00405010 处F2下断,同时命令栏:bc __vbaLenBstr,清除断点
    35. CTRL+F2重新载入程序,F9运行,填入注册信息后点击Validate按钮,中断:

    36. 00405010     > \55               push ebp                                       ;  F2在此下断,中断后F8往下走
    37. 00405011     .  8BEC             mov ebp,esp
    38. 00405013     .  83EC 0C          sub esp,0C
    39. 00405016     .  68 56124000      push <jmp.&MSVBVM60.__vbaExceptHandler>      
    40. 0040501B     .  64:A1 00000000   mov eax,dword ptr fs:[0]
    41. 00405021     .  50               push eax
    42. 00405022     .  64:8925 00000000 mov dword ptr fs:[0],esp
    43. .......................................................

    44.                      省略部分代码

    45. .......................................................

    46. 0040536A     > \8B45 C0          mov eax,dword ptr ss:[ebp-40]                  ;  用户名"hrbx"
    47. 0040536D     .  8D55 88          lea edx,dword ptr ss:[ebp-78]
    48. 00405370     .  8945 A0          mov dword ptr ss:[ebp-60],eax
    49. 00405373     .  52               push edx
    50. 00405374     .  8D45 98          lea eax,dword ptr ss:[ebp-68]
    51. 00405377     .  57               push edi
    52. 00405378     .  8D8D 78FFFFFF    lea ecx,dword ptr ss:[ebp-88]
    53. 0040537E     .  50               push eax
    54. 0040537F     .  51               push ecx
    55. 00405380     .  C745 90 01000000 mov dword ptr ss:[ebp-70],1
    56. 00405387     .  C745 88 02000000 mov dword ptr ss:[ebp-78],2
    57. 0040538E     .  C745 C0 00000000 mov dword ptr ss:[ebp-40],0
    58. 00405395     .  C745 98 08000000 mov dword ptr ss:[ebp-68],8
    59. 0040539C     .  FF15 7C104000    call dword ptr ds:[<&MSVBVM60.#632>]           ;  rtcMidCharVar,循环取用户名每一位字符
    60. 004053A2     .  8D95 78FFFFFF    lea edx,dword ptr ss:[ebp-88]
    61. 004053A8     .  8D45 BC          lea eax,dword ptr ss:[ebp-44]
    62. 004053AB     .  52               push edx
    63. 004053AC     .  50               push eax
    64. 004053AD     .  FF15 D4104000    call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>]
    65. 004053B3     .  50               push eax                                       
    66. 004053B4     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符的ASCII值
    67. 004053BA     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]                  
    68. 004053BD     .  66:8985 40FFFFFF mov word ptr ss:[ebp-C0],ax          ;  EAX=68("h")
    69. 004053C4     .  8D95 38FFFFFF    lea edx,dword ptr ss:[ebp-C8]
    70. 004053CA     .  51               push ecx
    71. 004053CB     .  8D85 68FFFFFF    lea eax,dword ptr ss:[ebp-98]
    72. 004053D1     .  52               push edx
    73. 004053D2     .  50               push eax
    74. 004053D3     .  C785 38FFFFFF 02>mov dword ptr ss:[ebp-C8],2
    75. 004053DD     .  FF15 24114000    call dword ptr ds:[<&MSVBVM60.__vbaVarAdd>]    ;  用户名ASCII值累加,0x1B4
    76. 004053E3     .  8BD0             mov edx,eax
    77. 004053E5     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]
    78. 004053E8     .  FF15 10104000    call dword ptr ds:[<&MSVBVM60.__vbaVarMove>]   
    79. 004053EE     .  8D4D BC          lea ecx,dword ptr ss:[ebp-44]
    80. 004053F1     .  FF15 50114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]  
    81. 004053F7     .  8D4D AC          lea ecx,dword ptr ss:[ebp-54]
    82. 004053FA     .  FF15 54114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeObj>]   
    83. 00405400     .  8D8D 78FFFFFF    lea ecx,dword ptr ss:[ebp-88]
    84. 00405406     .  8D55 88          lea edx,dword ptr ss:[ebp-78]
    85. 00405409     .  51               push ecx
    86. 0040540A     .  8D45 98          lea eax,dword ptr ss:[ebp-68]
    87. 0040540D     .  52               push edx
    88. 0040540E     .  50               push eax
    89. 0040540F     .  6A 03            push 3
    90. 00405411     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>
    91. 00405417     .  B8 01000000      mov eax,1
    92. 0040541C     .  83C4 10          add esp,10
    93. 0040541F     .  03C7             add eax,edi
    94. 00405421     .  0F80 92070000    jo Crackme2.00405BB9
    95. 00405427     .  8BF8             mov edi,eax
    96. 00405429     .^ E9 EFFEFFFF      jmp Crackme2.0040531D
    97. 0040542E     >  B8 02000000      mov eax,2                                      ;  EAX=2
    98. 00405433     .  8D4D C4          lea ecx,dword ptr ss:[ebp-3C]
    99. 00405436     .  8985 50FFFFFF    mov dword ptr ss:[ebp-B0],eax
    100. 0040543C     .  8985 48FFFFFF    mov dword ptr ss:[ebp-B8],eax
    101. 00405442     .  8D95 48FFFFFF    lea edx,dword ptr ss:[ebp-B8]
    102. 00405448     .  51               push ecx
    103. 00405449     .  8D45 98          lea eax,dword ptr ss:[ebp-68]
    104. 0040544C     .  52               push edx
    105. 0040544D     .  50               push eax
    106. 0040544E     .  FF15 28114000    call dword ptr ds:[<&MSVBVM60.__vbaVarMod>]    ;  用户名ASCII值累加值/2,0x1B4/2=0xEA
    107. 00405454     .  8BD0             mov edx,eax
    108. 00405456     .  8D8D 0CFFFFFF    lea ecx,dword ptr ss:[ebp-F4]
    109. 0040545C     .  FF15 10104000    call dword ptr ds:[<&MSVBVM60.__vbaVarMove>]   
    110. 00405462     .  8D8D 0CFFFFFF    lea ecx,dword ptr ss:[ebp-F4]
    111. 00405468     .  8D95 48FFFFFF    lea edx,dword ptr ss:[ebp-B8]
    112. 0040546E     .  51               push ecx
    113. 0040546F     .  52               push edx
    114. 00405470     .  C785 50FFFFFF 00>mov dword ptr ss:[ebp-B0],0
    115. 0040547A     .  C785 48FFFFFF 02>mov dword ptr ss:[ebp-B8],8002
    116. 00405484     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  判断余数是否为0
    117. 0040548A     .  66:85C0          test ax,ax                                     ;  即判断用户名ASCII值累加值是奇数还是偶数
    118. 0040548D     .  0F84 12030000    je Crackme2.004057A5                           ;  用户名ASCII值累加值为奇数则跳
    119. 00405493     .  8B06             mov eax,dword ptr ds:[esi]                     
    120. 00405495     .  56               push esi
    121. 00405496     .  FF90 10030000    call dword ptr ds:[eax+310]
    122. 0040549C     .  8D4D AC          lea ecx,dword ptr ss:[ebp-54]
    123. 0040549F     .  50               push eax                                       
    124. 004054A0     .  51               push ecx
    125. 004054A1     .  FFD3             call ebx
    126. 004054A3     .  8BF8             mov edi,eax
    127. 004054A5     .  8D45 C0          lea eax,dword ptr ss:[ebp-40]
    128. 004054A8     .  50               push eax
    129. 004054A9     .  57               push edi
    130. 004054AA     .  8B17             mov edx,dword ptr ds:[edi]
    131. 004054AC     .  FF92 A0000000    call dword ptr ds:[edx+A0]
    132. 004054B2     .  85C0             test eax,eax
    133. 004054B4     .  DBE2             fclex
    134. 004054B6     .  7D 12            jge short Crackme2.004054CA
    135. 004054B8     .  68 A0000000      push 0A0
    136. 004054BD     .  68 743D4000      push Crackme2.00403D74
    137. 004054C2     .  57               push edi
    138. 004054C3     .  50               push eax
    139. 004054C4     .  FF15 44104000    call dword ptr ds:[<&MSVBVM60.__vbaHresultChec>;  用户名ASCII值累加为偶数来到这里
    140. 004054CA     >  8B55 C0          mov edx,dword ptr ss:[ebp-40]                  ;  用户名"hrbx"
    141. 004054CD     .  8B3D 38114000    mov edi,dword ptr ds:[<&MSVBVM60.__vbaStrMove>>
    142. 004054D3     .  8D4D BC          lea ecx,dword ptr ss:[ebp-44]
    143. 004054D6     .  C745 C0 00000000 mov dword ptr ss:[ebp-40],0
    144. 004054DD     .  FFD7             call edi                                       
    145. 004054DF     .  8D4D BC          lea ecx,dword ptr ss:[ebp-44]
    146. 004054E2     .  51               push ecx
    147. 004054E3     .  E8 580E0000      call Crackme2.00406340                         ;  关键CALL-1,F7进入
    148. 004054E8     .  8BD0             mov edx,eax                                    ;  用户名运算后得到字符串"yXJfdD"
    149. 004054EA     .  8D4D B0          lea ecx,dword ptr ss:[ebp-50]
    150. 004054ED     .  FFD7             call edi                                       
    151. 004054EF     .  8B55 B0          mov edx,dword ptr ss:[ebp-50]
    152. 004054F2     .  8D4D B8          lea ecx,dword ptr ss:[ebp-48]
    153. 004054F5     .  C785 34FFFFFF 09>mov dword ptr ss:[ebp-CC],9
    154. 004054FF     .  C745 B0 00000000 mov dword ptr ss:[ebp-50],0
    155. 00405506     .  FFD7             call edi                                       
    156. 00405508     .  8D95 34FFFFFF    lea edx,dword ptr ss:[ebp-CC]                  ;  字符串"yXJfdD"
    157. 0040550E     .  8D45 B8          lea eax,dword ptr ss:[ebp-48]
    158. 00405511     .  52               push edx
    159. 00405512     .  8D4D 98          lea ecx,dword ptr ss:[ebp-68]
    160. 00405515     .  50               push eax
    161. 00405516     .  51               push ecx
    162. 00405517     .  E8 341D0000      call Crackme2.00407250                         ;  关键call-2,F7进入
    163. 0040551C     .  8B16             mov edx,dword ptr ds:[esi]
    164. 0040551E     .  56               push esi
    165. 0040551F     .  FF92 18030000    call dword ptr ds:[edx+318]
    166. 00405525     .  50               push eax
    167. 00405526     .  8D45 A8          lea eax,dword ptr ss:[ebp-58]
    168. 00405529     .  50               push eax
    169. 0040552A     .  FFD3             call ebx
    170. 0040552C     .  8BF8             mov edi,eax
    171. 0040552E     .  8D55 B4          lea edx,dword ptr ss:[ebp-4C]
    172. 00405531     .  52               push edx
    173. 00405532     .  57               push edi
    174. 00405533     .  8B0F             mov ecx,dword ptr ds:[edi]
    175. 00405535     .  FF91 A0000000    call dword ptr ds:[ecx+A0]
    176. 0040553B     .  85C0             test eax,eax
    177. 0040553D     .  DBE2             fclex
    178. 0040553F     .  7D 12            jge short Crackme2.00405553
    179. 00405541     .  68 A0000000      push 0A0
    180. 00405546     .  68 743D4000      push Crackme2.00403D74
    181. 0040554B     .  57               push edi
    182. 0040554C     .  50               push eax
    183. 0040554D     .  FF15 44104000    call dword ptr ds:[<&MSVBVM60.__vbaHresultChec>
    184. 00405553     >  8B45 B4          mov eax,dword ptr ss:[ebp-4C]                  ;  假码"9876543210"
    185. 00405556     .  8D4D 88          lea ecx,dword ptr ss:[ebp-78]
    186. 00405559     .  8945 90          mov dword ptr ss:[ebp-70],eax
    187. 0040555C     .  8D45 98          lea eax,dword ptr ss:[ebp-68]
    188. 0040555F     .  50               push eax
    189. 00405560     .  51               push ecx
    190. 00405561     .  C745 B4 00000000 mov dword ptr ss:[ebp-4C],0
    191. 00405568     .  C745 88 08800000 mov dword ptr ss:[ebp-78],8008                 
    192. 0040556F     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  真假码比较
    193. 00405575     .  8BF8             mov edi,eax
    194. 00405577     .  8D55 B0          lea edx,dword ptr ss:[ebp-50]
    195. 0040557A     .  8D45 B8          lea eax,dword ptr ss:[ebp-48]
    196. 0040557D     .  52               push edx
    197. 0040557E     .  8D4D BC          lea ecx,dword ptr ss:[ebp-44]
    198. 00405581     .  50               push eax
    199. 00405582     .  51               push ecx
    200. 00405583     .  6A 03            push 3
    201. 00405585     .  FF15 10114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>
    202. 0040558B     .  8D55 A8          lea edx,dword ptr ss:[ebp-58]
    203. 0040558E     .  8D45 AC          lea eax,dword ptr ss:[ebp-54]
    204. 00405591     .  52               push edx
    205. 00405592     .  50               push eax
    206. 00405593     .  6A 02            push 2
    207. 00405595     .  FF15 30104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeObjList>
    208. 0040559B     .  8D4D 88          lea ecx,dword ptr ss:[ebp-78]
    209. 0040559E     .  8D55 98          lea edx,dword ptr ss:[ebp-68]
    210. 004055A1     .  51               push ecx
    211. 004055A2     .  52               push edx
    212. 004055A3     .  6A 02            push 2
    213. 004055A5     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>
    214. 004055AB     .  83C4 28          add esp,28
    215. 004055AE     .  66:85FF          test di,di
    216. 004055B1     .  0F84 40010000    je Crackme2.004056F7                           ;  暴破点1,NOP掉
    217. 004055B7     .  A1 10904000      mov eax,dword ptr ds:[409010]
    218. 004055BC     .  85C0             test eax,eax
    219. 004055BE     .  75 10            jnz short Crackme2.004055D0
    220. 004055C0     .  68 10904000      push Crackme2.00409010

    221. F7进入004054E3处的关键CALL-1,来到:

    222. 00406340     $  55               push ebp
    223. 00406341     .  8BEC             mov ebp,esp
    224. .......................................................

    225.                      省略部分代码

    226. .......................................................

    227. 004063C8     .  8B45 08          mov eax,dword ptr ss:[ebp+8]
    228. 004063CB     .  8B08             mov ecx,dword ptr ds:[eax]                     ;  用户名"hrbx"
    229. 004063CD     .  51               push ecx
    230. 004063CE     .  FF15 1C104000    call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]   ;  获取用户名长度,EAX=4
    231. 004063D4     .  8BC8             mov ecx,eax                                    
    232. 004063D6     .  FF15 94104000    call dword ptr ds:[<&MSVBVM60.__vbaI2I4>]      
    233. 004063DC     .  8B35 38114000    mov esi,dword ptr ds:[<&MSVBVM60.__vbaStrMove>>
    234. 004063E2     .  8985 08FFFFFF    mov dword ptr ss:[ebp-F8],eax                  ;  用户名长度4保存
    235. 004063E8     .  BB 01000000      mov ebx,1                                      ;  EBX赋初值1
    236. 004063ED     .  BF 02000000      mov edi,2
    237. 004063F2     >  66:3B9D 08FFFFFF cmp bx,word ptr ss:[ebp-F8]                    ;  BX与用户名名长度比较
    238. 004063F9     .  0F8F 31040000    jg Crackme2.00406830                           ;  没取完用户名则继续
    239. 004063FF     .  8B4D 08          mov ecx,dword ptr ss:[ebp+8]
    240. 00406402     .  8D55 80          lea edx,dword ptr ss:[ebp-80]
    241. 00406405     .  0FBFC3           movsx eax,bx
    242. 00406408     .  52               push edx
    243. 00406409     .  8B11             mov edx,dword ptr ds:[ecx]
    244. 0040640B     .  50               push eax
    245. 0040640C     .  52               push edx
    246. 0040640D     .  C745 88 01000000 mov dword ptr ss:[ebp-78],1
    247. 00406414     .  897D 80          mov dword ptr ss:[ebp-80],edi
    248. 00406417     .  FF15 74104000    call dword ptr ds:[<&MSVBVM60.#631>]           ;  rtcMidCharBstr,取用户名第一位字符"h"
    249. 0040641D     .  8BD0             mov edx,eax
    250. 0040641F     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    251. 00406422     .  FFD6             call esi
    252. 00406424     .  50               push eax
    253. 00406425     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取第一位字符的ASCII值
    254. 0040642B     .  8D95 20FFFFFF    lea edx,dword ptr ss:[ebp-E0]                  ;  EAX=0x68("h")
    255. 00406431     .  8D4D D0          lea ecx,dword ptr ss:[ebp-30]
    256. 00406434     .  66:8985 28FFFFFF mov word ptr ss:[ebp-D8],ax
    257. 0040643B     .  89BD 20FFFFFF    mov dword ptr ss:[ebp-E0],edi
    258. 00406441     .  FF15 10104000    call dword ptr ds:[<&MSVBVM60.__vbaVarMove>]   
    259. 00406447     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    260. 0040644A     .  FF15 50114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]   
    261. 00406450     .  8D4D 80          lea ecx,dword ptr ss:[ebp-80]
    262. 00406453     .  FF15 18104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>]   
    263. 00406459     .  66:8BCB          mov cx,bx
    264. 0040645C     .  8D45 80          lea eax,dword ptr ss:[ebp-80]
    265. 0040645F     .  66:83C1 01       add cx,1
    266. 00406463     .  50               push eax
    267. 00406464     .  8B45 08          mov eax,dword ptr ss:[ebp+8]
    268. 00406467     .  C745 88 01000000 mov dword ptr ss:[ebp-78],1
    269. 0040646E     .  0F80 64040000    jo Crackme2.004068D8
    270. 00406474     .  0FBFD1           movsx edx,cx
    271. 00406477     .  8B08             mov ecx,dword ptr ds:[eax]                     ;  用户名"hrbx"
    272. 00406479     .  52               push edx
    273. 0040647A     .  51               push ecx
    274. 0040647B     .  897D 80          mov dword ptr ss:[ebp-80],edi
    275. 0040647E     .  FF15 74104000    call dword ptr ds:[<&MSVBVM60.#631>]           ;  rtcMidCharBstr,取用户名第一位字符"r"
    276. 00406484     .  8BD0             mov edx,eax
    277. 00406486     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    278. 00406489     .  FFD6             call esi
    279. 0040648B     .  50               push eax
    280. 0040648C     .  6A 00            push 0
    281. 0040648E     .  FF15 E0104000    call dword ptr ds:[<&MSVBVM60.#537>]           
    282. 00406494     .  8BD0             mov edx,eax
    283. 00406496     .  8D4D A4          lea ecx,dword ptr ss:[ebp-5C]
    284. 00406499     .  FFD6             call esi
    285. 0040649B     .  50               push eax
    286. 0040649C     .  FF15 3C104000    call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]   
    287. 004064A2     .  8BD0             mov edx,eax
    288. 004064A4     .  8D4D A0          lea ecx,dword ptr ss:[ebp-60]
    289. 004064A7     .  FFD6             call esi
    290. 004064A9     .  50               push eax
    291. 004064AA     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取第二位字符的ASCII值
    292. 004064B0     .  8D95 20FFFFFF    lea edx,dword ptr ss:[ebp-E0]                  ;  EAX=0x72("r")
    293. 004064B6     .  8D4D BC          lea ecx,dword ptr ss:[ebp-44]
    294. 004064B9     .  66:8985 28FFFFFF mov word ptr ss:[ebp-D8],ax
    295. 004064C0     .  89BD 20FFFFFF    mov dword ptr ss:[ebp-E0],edi
    296. 004064C6     .  FF15 10104000    call dword ptr ds:[<&MSVBVM60.__vbaVarMove>]   
    297. 004064CC     .  8D55 A0          lea edx,dword ptr ss:[ebp-60]
    298. 004064CF     .  8D45 A4          lea eax,dword ptr ss:[ebp-5C]
    299. 004064D2     .  52               push edx
    300. 004064D3     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    301. 004064D6     .  50               push eax
    302. 004064D7     .  51               push ecx
    303. 004064D8     .  6A 03            push 3
    304. 004064DA     .  FF15 10114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>
    305. 004064E0     .  83C4 10          add esp,10
    306. 004064E3     .  8D4D 80          lea ecx,dword ptr ss:[ebp-80]
    307. 004064E6     .  FF15 18104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>]   
    308. 004064EC     .  66:8BC3          mov ax,bx
    309. 004064EF     .  8D55 80          lea edx,dword ptr ss:[ebp-80]
    310. 004064F2     .  66:03C7          add ax,di
    311. 004064F5     .  52               push edx
    312. 004064F6     .  8B55 08          mov edx,dword ptr ss:[ebp+8]
    313. 004064F9     .  C745 88 01000000 mov dword ptr ss:[ebp-78],1
    314. 00406500     .  0F80 D2030000    jo Crackme2.004068D8
    315. 00406506     .  0FBFC8           movsx ecx,ax
    316. 00406509     .  8B02             mov eax,dword ptr ds:[edx]                     ;  "hrbx"
    317. 0040650B     .  51               push ecx
    318. 0040650C     .  897D 80          mov dword ptr ss:[ebp-80],edi
    319. 0040650F     .  50               push eax
    320. 00406510     .  FF15 74104000    call dword ptr ds:[<&MSVBVM60.#631>]           ;  rtcMidCharBstr,取用户名第三位字符"b"
    321. 00406516     .  8BD0             mov edx,eax
    322. 00406518     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    323. 0040651B     .  FFD6             call esi
    324. 0040651D     .  50               push eax
    325. 0040651E     .  6A 00            push 0
    326. 00406520     .  FF15 E0104000    call dword ptr ds:[<&MSVBVM60.#537>]         
    327. 00406526     .  8BD0             mov edx,eax
    328. 00406528     .  8D4D A4          lea ecx,dword ptr ss:[ebp-5C]
    329. 0040652B     .  FFD6             call esi
    330. 0040652D     .  50               push eax
    331. 0040652E     .  FF15 3C104000    call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]   
    332. 00406534     .  8BD0             mov edx,eax
    333. 00406536     .  8D4D A0          lea ecx,dword ptr ss:[ebp-60]
    334. 00406539     .  FFD6             call esi
    335. 0040653B     .  50               push eax
    336. 0040653C     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符的ASCII值
    337. 00406542     .  8D4D A0          lea ecx,dword ptr ss:[ebp-60]                  ;  EAX=0x62("b")
    338. 00406545     .  8945 B4          mov dword ptr ss:[ebp-4C],eax
    339. 00406548     .  8D55 A4          lea edx,dword ptr ss:[ebp-5C]
    340. 0040654B     .  51               push ecx
    341. 0040654C     .  8D45 A8          lea eax,dword ptr ss:[ebp-58]
    342. 0040654F     .  52               push edx
    343. 00406550     .  50               push eax
    344. 00406551     .  6A 03            push 3
    345. 00406553     .  FF15 10114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>
    346. 00406559     .  83C4 10          add esp,10
    347. 0040655C     .  8D4D 80          lea ecx,dword ptr ss:[ebp-80]
    348. 0040655F     .  FF15 18104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>]   
    349. 00406565     .  8D4D D0          lea ecx,dword ptr ss:[ebp-30]
    350. 00406568     .  8D95 30FFFFFF    lea edx,dword ptr ss:[ebp-D0]
    351. 0040656E     .  51               push ecx
    352. 0040656F     .  8D45 80          lea eax,dword ptr ss:[ebp-80]
    353. 00406572     .  52               push edx
    354. 00406573     .  50               push eax
    355. 00406574     .  C785 38FFFFFF 04>mov dword ptr ss:[ebp-C8],4                    ;  常数,4
    356. 0040657E     .  89BD 30FFFFFF    mov dword ptr ss:[ebp-D0],edi                  ;  用户名第一位字符的ASCII值转为除以4
    357. 00406584     .  FF15 C4104000    call dword ptr ds:[<&MSVBVM60.__vbaVarDiv>]    ;  104(0x68)/4=26(0x1A)
    358. 0040658A     .  8D8D 70FFFFFF    lea ecx,dword ptr ss:[ebp-90]
    359. 00406590     .  50               push eax
    360. 00406591     .  51               push ecx
    361. 00406592     .  FF15 F4104000    call dword ptr ds:[<&MSVBVM60.__vbaVarInt>]    ;  结果取整,得到26(0x1A),记为数值1
    362. 00406598     .  50               push eax
    363. 00406599     .  FF15 DC104000    call dword ptr ds:[<&MSVBVM60.__vbaI2Var>]   
    364. 0040659F     .  8945 E8          mov dword ptr ss:[ebp-18],eax
    365. 004065A2     .  B8 10000000      mov eax,10                                     ;  EAX赋值,EAX=0x10(16)
    366. 004065A7     .  8985 28FFFFFF    mov dword ptr ss:[ebp-D8],eax
    367. 004065AD     .  8985 18FFFFFF    mov dword ptr ss:[ebp-E8],eax
    368. 004065B3     .  8D55 D0          lea edx,dword ptr ss:[ebp-30]
    369. 004065B6     .  8D85 30FFFFFF    lea eax,dword ptr ss:[ebp-D0]
    370. 004065BC     .  52               push edx
    371. 004065BD     .  8D4D 80          lea ecx,dword ptr ss:[ebp-80]
    372. 004065C0     .  50               push eax
    373. 004065C1     .  51               push ecx
    374. 004065C2     .  C785 38FFFFFF 03>mov dword ptr ss:[ebp-C8],3                    ;  常数,3
    375. 004065CC     .  89BD 30FFFFFF    mov dword ptr ss:[ebp-D0],edi
    376. 004065D2     .  89BD 20FFFFFF    mov dword ptr ss:[ebp-E0],edi
    377. 004065D8     .  89BD 10FFFFFF    mov dword ptr ss:[ebp-F0],edi         ;  用户名第一位字符的ASCII值 and 3
    378. 004065DE     .  FF15 AC104000    call dword ptr ds:[<&MSVBVM60.__vbaVarAnd>]    ;  0x68 and 3=0
    379. 004065E4     .  50               push eax
    380. 004065E5     .  8D95 20FFFFFF    lea edx,dword ptr ss:[ebp-E0]
    381. 004065EB     .  8D85 70FFFFFF    lea eax,dword ptr ss:[ebp-90]
    382. 004065F1     .  52               push edx
    383. 004065F2     .  50               push eax                                       ;  AND运算结果与常数0x10相乘
    384. 004065F3     .  FF15 B4104000    call dword ptr ds:[<&MSVBVM60.__vbaVarMul>]    ;  0x10*0,得到0
    385. 004065F9     .  8D4D BC          lea ecx,dword ptr ss:[ebp-44]
    386. 004065FC     .  50               push eax
    387. 004065FD     .  8D95 10FFFFFF    lea edx,dword ptr ss:[ebp-F0]
    388. 00406603     .  51               push ecx
    389. 00406604     .  8D85 60FFFFFF    lea eax,dword ptr ss:[ebp-A0]
    390. 0040660A     .  52               push edx                                       
    391. 0040660B     .  50               push eax                                       ;  用户名第二位字符"r"的ASCII值除以16(0x10)
    392. 0040660C     .  FF15 C4104000    call dword ptr ds:[<&MSVBVM60.__vbaVarDiv>]    ;  114(0x72)/16(0x10)=7.125
    393. 00406612     .  8D8D 50FFFFFF    lea ecx,dword ptr ss:[ebp-B0]
    394. 00406618     .  50               push eax
    395. 00406619     .  51               push ecx
    396. 0040661A     .  FF15 F4104000    call dword ptr ds:[<&MSVBVM60.__vbaVarInt>]    ;  结果取整,得到7
    397. 00406620     .  8D95 40FFFFFF    lea edx,dword ptr ss:[ebp-C0]
    398. 00406626     .  50               push eax
    399. 00406627     .  52               push edx
    400. 00406628     .  FF15 24114000    call dword ptr ds:[<&MSVBVM60.__vbaVarAdd>]    ;  取整后与上面相乘结果相加,7+0=7,记为数值2
    401. 0040662E     .  50               push eax
    402. 0040662F     .  FF15 DC104000    call dword ptr ds:[<&MSVBVM60.__vbaI2Var>]     
    403. 00406635     .  8D8D 40FFFFFF    lea ecx,dword ptr ss:[ebp-C0]
    404. 0040663B     .  8945 E0          mov dword ptr ss:[ebp-20],eax
    405. 0040663E     .  FF15 18104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>]   
    406. 00406644     .  8B45 08          mov eax,dword ptr ss:[ebp+8]
    407. 00406647     .  8B08             mov ecx,dword ptr ds:[eax]
    408. 00406649     .  51               push ecx                                       ;  用户名"hrbx"
    409. 0040664A     .  FF15 1C104000    call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]   ;  获取用户名长度,EAX=4
    410. 00406650     .  66:8BD3          mov dx,bx                                      ;  DX=BX=1
    411. 00406653     .  66:83C2 01       add dx,1                                       ;  DX=DX+1
    412. 00406657     .  0F80 7B020000    jo Crackme2.004068D8
    413. 0040665D     .  0FBFCA           movsx ecx,dx                                   ;  ECX=DX=2
    414. 00406660     .  3BC1             cmp eax,ecx                                    ;  比较用户名长度是否取完
    415. 00406662     .  0F8C D5000000    jl Crackme2.0040673D                           ;  没取完则继续
    416. 00406668     .  0FBF55 B4        movsx edx,word ptr ss:[ebp-4C]                 ;  用户名第三位字符"b"的ASCII值,0x62("b")
    417. 0040666C     .  8995 FCFEFFFF    mov dword ptr ss:[ebp-104],edx                 ;  EDX=0x62
    418. 00406672     .  C785 38FFFFFF 0F>mov dword ptr ss:[ebp-C8],0F
    419. 0040667C     .  DB85 FCFEFFFF    fild dword ptr ss:[ebp-104]                    ;  转为10进制实数,98(0x62)
    420. 00406682     .  89BD 30FFFFFF    mov dword ptr ss:[ebp-D0],edi
    421. 00406688     .  C785 28FFFFFF 04>mov dword ptr ss:[ebp-D8],4
    422. 00406692     .  89BD 20FFFFFF    mov dword ptr ss:[ebp-E0],edi
    423. 00406698     .  DD9D F4FEFFFF    fstp qword ptr ss:[ebp-10C]                    ;  st=98.000000000000000000
    424. 0040669E     .  DD85 F4FEFFFF    fld qword ptr ss:[ebp-10C]
    425. 004066A4     .  833D 00904000 00 cmp dword ptr ds:[409000],0
    426. 004066AB     .  75 08            jnz short Crackme2.004066B5
    427. 004066AD     .  DC35 F8114000    fdiv qword ptr ds:[4011F8]                     ;  98/64=1.53125,ds:[4011F8]=64(常数)
    428. 004066B3     .  EB 11            jmp short Crackme2.004066C6
    429. 004066B5     >  FF35 FC114000    push dword ptr ds:[4011FC]
    430. 004066BB     .  FF35 F8114000    push dword ptr ds:[4011F8]
    431. 004066C1     .  E8 AEABFFFF      call <jmp.&MSVBVM60._adj_fdiv_m64>
    432. 004066C6     >  DFE0             fstsw ax
    433. 004066C8     .  A8 0D            test al,0D
    434. 004066CA     .  0F85 03020000    jnz Crackme2.004068D3
    435. 004066D0     .  FF15 44114000    call dword ptr ds:[<&MSVBVM60.__vbaFPInt>]     ;  除法结果取整
    436. 004066D6     .  DD9D 18FFFFFF    fstp qword ptr ss:[ebp-E8]                     ;  st=1.0000000000000000000
    437. 004066DC     .  8D45 BC          lea eax,dword ptr ss:[ebp-44]
    438. 004066DF     .  8D8D 30FFFFFF    lea ecx,dword ptr ss:[ebp-D0]
    439. 004066E5     .  50               push eax
    440. 004066E6     .  8D55 80          lea edx,dword ptr ss:[ebp-80]
    441. 004066E9     .  51               push ecx
    442. 004066EA     .  52               push edx
    443. 004066EB     .  C785 10FFFFFF 05>mov dword ptr ss:[ebp-F0],5                    ;  用户名第二位字符"r"的ASCII值0x72
    444. 004066F5     .  FF15 AC104000    call dword ptr ds:[<&MSVBVM60.__vbaVarAnd>]    ;  0x72 and 0F(常数),得到2
    445. 004066FB     .  50               push eax
    446. 004066FC     .  8D85 20FFFFFF    lea eax,dword ptr ss:[ebp-E0]
    447. 00406702     .  8D8D 70FFFFFF    lea ecx,dword ptr ss:[ebp-90]
    448. 00406708     .  50               push eax
    449. 00406709     .  51               push ecx
    450. 0040670A     .  FF15 B4104000    call dword ptr ds:[<&MSVBVM60.__vbaVarMul>]    ;  (And运算结果)*4,2*4=8
    451. 00406710     .  50               push eax
    452. 00406711     .  8D95 10FFFFFF    lea edx,dword ptr ss:[ebp-F0]
    453. 00406717     .  8D85 60FFFFFF    lea eax,dword ptr ss:[ebp-A0]
    454. 0040671D     .  52               push edx
    455. 0040671E     .  50               push eax
    456. 0040671F     .  FF15 24114000    call dword ptr ds:[<&MSVBVM60.__vbaVarAdd>]    ;  除法结果加上乘法结果,1+8=9,记为数值3
    457. 00406725     .  50               push eax
    458. 00406726     .  FF15 DC104000    call dword ptr ds:[<&MSVBVM60.__vbaI2Var>]     
    459. 0040672C     .  8D8D 60FFFFFF    lea ecx,dword ptr ss:[ebp-A0]
    460. 00406732     .  8945 CC          mov dword ptr ss:[ebp-34],eax
    461. 00406735     .  FF15 18104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>]   
    462. 0040673B     .  EB 07            jmp short Crackme2.00406744
    463. 0040673D     >  C745 CC FFFFFFFF mov dword ptr ss:[ebp-34],-1
    464. 00406744     >  8B4D 08          mov ecx,dword ptr ss:[ebp+8]
    465. 00406747     .  8B11             mov edx,dword ptr ds:[ecx]                     ;  用户名"hrbx"
    466. 00406749     .  52               push edx
    467. 0040674A     .  FF15 1C104000    call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]   ;  获取用户名长度,EAX=4
    468. 00406750     .  66:8BCB          mov cx,bx                                      ;  CX=BX=1
    469. 00406753     .  66:03CF          add cx,di                                      ;  CX=CX+DI=1+2=3
    470. 00406756     .  0F80 7C010000    jo Crackme2.004068D8
    471. 0040675C     .  0FBFD1           movsx edx,cx                                   ;  EDX=CX=3
    472. 0040675F     .  3BC2             cmp eax,edx                                    ;  比较用户名长度是否取完
    473. 00406761     .  7C 0B            jl short Crackme2.0040676E                     ;  没取完则继续
    474. 00406763     .  8B45 B4          mov eax,dword ptr ss:[ebp-4C]                  ;  用户名第三位字符"b"的ASCII值,EAX=0x62
    475. 00406766     .  83E0 3F          and eax,3F                                     ;  EAX=EAX AND 3F=0X22
    476. 00406769     .  8945 B8          mov dword ptr ss:[ebp-48],eax                  ;  EAX=0x22保存,记为数值4
    477. 0040676C     .  EB 07            jmp short Crackme2.00406775
    478. 0040676E     >  C745 B8 FFFFFFFF mov dword ptr ss:[ebp-48],-1
    479. 00406775     >  8B45 AC          mov eax,dword ptr ss:[ebp-54]
    480. 00406778     .  8D4D E8          lea ecx,dword ptr ss:[ebp-18]
    481. 0040677B     .  50               push eax                    ;  固定字符串"DYEFCGHXIJKVLAMNOPZQBRSTUWy
    482. 0040677C     .  51               push ecx                      scxdevpfgwhizjaklmbnoqrtu0123456789+/"
    483. 0040677D     .  E8 5E010000      call Crackme2.004068E0                         ;  根据数值1在字符串中取字符,得到"y"
    484. 00406782     .  8BD0             mov edx,eax 
    485. 00406784     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]          
    486. 00406787     .  FFD6             call esi
    487. 00406789     .  50               push eax
    488. 0040678A     .  FF15 3C104000    call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]    ;  字符串连接,得到"y"
    489. 00406790     .  8BD0             mov edx,eax
    490. 00406792     .  8D4D A4          lea ecx,dword ptr ss:[ebp-5C]
    491. 00406795     .  FFD6             call esi
    492. 00406797     .  8D55 E0          lea edx,dword ptr ss:[ebp-20]
    493. 0040679A     .  50               push eax
    494. 0040679B     .  52               push edx
    495. 0040679C     .  E8 3F010000      call Crackme2.004068E0                         ;  根据数值2在字符串中取字符,得到"X"
    496. 004067A1     .  8BD0             mov edx,eax
    497. 004067A3     .  8D4D A0          lea ecx,dword ptr ss:[ebp-60]
    498. 004067A6     .  FFD6             call esi
    499. 004067A8     .  50               push eax
    500. 004067A9     .  FF15 3C104000    call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]    ;  字符串连接,得到"yX"
    501. 004067AF     .  8BD0             mov edx,eax
    502. 004067B1     .  8D4D 9C          lea ecx,dword ptr ss:[ebp-64]
    503. 004067B4     .  FFD6             call esi
    504. 004067B6     .  50               push eax
    505. 004067B7     .  8D45 CC          lea eax,dword ptr ss:[ebp-34]
    506. 004067BA     .  50               push eax
    507. 004067BB     .  E8 20010000      call Crackme2.004068E0                         ;  根据数值3在字符串中取字符,得到"J"
    508. 004067C0     .  8BD0             mov edx,eax
    509. 004067C2     .  8D4D 98          lea ecx,dword ptr ss:[ebp-68]
    510. 004067C5     .  FFD6             call esi
    511. 004067C7     .  50               push eax
    512. 004067C8     .  FF15 3C104000    call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]    ;  字符串连接,得到"yXJ"
    513. 004067CE     .  8BD0             mov edx,eax                                    
    514. 004067D0     .  8D4D 94          lea ecx,dword ptr ss:[ebp-6C]
    515. 004067D3     .  FFD6             call esi
    516. 004067D5     .  8D4D B8          lea ecx,dword ptr ss:[ebp-48]
    517. 004067D8     .  50               push eax
    518. 004067D9     .  51               push ecx
    519. 004067DA     .  E8 01010000      call Crackme2.004068E0                         ;  根据数值4在字符串中取字符,得到"f"
    520. 004067DF     .  8BD0             mov edx,eax
    521. 004067E1     .  8D4D 90          lea ecx,dword ptr ss:[ebp-70]
    522. 004067E4     .  FFD6             call esi
    523. 004067E6     .  50               push eax
    524. 004067E7     .  FF15 3C104000    call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]    ;  字符串连接,得到"yXJf"
    525. 004067ED     .  8BD0             mov edx,eax                                    
    526. 004067EF     .  8D4D AC          lea ecx,dword ptr ss:[ebp-54]
    527. 004067F2     .  FFD6             call esi
    528. 004067F4     .  8D55 90          lea edx,dword ptr ss:[ebp-70]
    529. 004067F7     .  8D45 94          lea eax,dword ptr ss:[ebp-6C]
    530. 004067FA     .  52               push edx
    531. 004067FB     .  8D4D 98          lea ecx,dword ptr ss:[ebp-68]
    532. 004067FE     .  50               push eax
    533. 004067FF     .  8D55 9C          lea edx,dword ptr ss:[ebp-64]
    534. 00406802     .  51               push ecx
    535. 00406803     .  8D45 A0          lea eax,dword ptr ss:[ebp-60]
    536. 00406806     .  52               push edx
    537. 00406807     .  8D4D A4          lea ecx,dword ptr ss:[ebp-5C]
    538. 0040680A     .  50               push eax
    539. 0040680B     .  8D55 A8          lea edx,dword ptr ss:[ebp-58]
    540. 0040680E     .  51               push ecx
    541. 0040680F     .  52               push edx
    542. 00406810     .  6A 07            push 7
    543. 00406812     .  FF15 10114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>
    544. 00406818     .  B8 03000000      mov eax,3                                      ;  EAX=3,每次取用户名中的3个字符
    545. 0040681D     .  83C4 20          add esp,20
    546. 00406820     .  66:03C3          add ax,bx                                      ;  EAX=EAX+EBX
    547. 00406823     .  0F80 AF000000    jo Crackme2.004068D8
    548. 00406829     .  8BD8             mov ebx,eax                  ;  EBX=EAX
    549. 0040682B     .^ E9 C2FBFFFF      jmp Crackme2.004063F2                          ;  跳回去继续取用户名下一位字符
    550. 00406830     >  8B55 AC          mov edx,dword ptr ss:[ebp-54]                  ;  得到字符串"yXJfdD"
    551. 00406833     .  8D4D B0          lea ecx,dword ptr ss:[ebp-50]
    552. 00406836     .  FF15 00114000    call dword ptr ds:[<&MSVBVM60.__vbaStrCopy>]   
    553. 0040683C     .  9B               wait
    554. 0040683D     .  68 BD684000      push Crackme2.004068BD
    555. 00406842     .  EB 5F            jmp short Crackme2.004068A3
    556. 00406844     .  F645 FC 04       test byte ptr ss:[ebp-4],4
    557. 00406848     .  74 09            je short Crackme2.00406853

    558. F7进入00405517处的关键call-2,来到:

    559. 00407250     $  55               push ebp
    560. 00407251     .  8BEC             mov ebp,esp
    561. .......................................................

    562.                      省略部分代码

    563. .......................................................

    564. 0040729B     .  51               push ecx                                       ;  字符串"yXJfdD"
    565. 0040729C     .  FF15 1C104000    call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]   ;  获取字符串长度,EAX=6
    566. 004072A2     .  8BC8             mov ecx,eax                                    ;  ECX=EAX=6
    567. 004072A4     .  FF15 94104000    call dword ptr ds:[<&MSVBVM60.__vbaI2I4>]      
    568. 004072AA     .  8B5D 10          mov ebx,dword ptr ss:[ebp+10]
    569. 004072AD     .  8B35 10104000    mov esi,dword ptr ds:[<&MSVBVM60.__vbaVarMove>>
    570. 004072B3     .  8B3D 18104000    mov edi,dword ptr ds:[<&MSVBVM60.__vbaFreeVar>>
    571. 004072B9     .  8985 60FFFFFF    mov dword ptr ss:[ebp-A0],eax                  ;  字符串长度保存
    572. 004072BF     .  C745 C8 01000000 mov dword ptr ss:[ebp-38],1
    573. 004072C6     >  66:8B95 60FFFFFF mov dx,word ptr ss:[ebp-A0]
    574. 004072CD     .  66:3955 C8       cmp word ptr ss:[ebp-38],dx          ; 比较是否取完字符串
    575. 004072D1     .  0F8F DD120000    jg Crackme2.004085B4
    576. 004072D7     .  8B45 0C          mov eax,dword ptr ss:[ebp+C]                  
    577. 004072DA     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    578. 004072DD     .  0FBF55 C8        movsx edx,word ptr ss:[ebp-38]
    579. 004072E1     .  8945 90          mov dword ptr ss:[ebp-70],eax                  
    580. 004072E4     .  51               push ecx
    581. 004072E5     .  8D45 88          lea eax,dword ptr ss:[ebp-78]
    582. 004072E8     .  52               push edx
    583. 004072E9     .  8D4D 98          lea ecx,dword ptr ss:[ebp-68]
    584. 004072EC     .  50               push eax
    585. 004072ED     .  51               push ecx
    586. 004072EE     .  C745 B0 01000000 mov dword ptr ss:[ebp-50],1
    587. 004072F5     .  C745 A8 02000000 mov dword ptr ss:[ebp-58],2
    588. 004072FC     .  C745 88 08400000 mov dword ptr ss:[ebp-78],4008
    589. 00407303     .  FF15 7C104000    call dword ptr ds:[<&MSVBVM60.#632>]           ;  rtcMidCharVar,循环取字符串每一位字符
    590. 00407309     .  8D55 98          lea edx,dword ptr ss:[ebp-68]                  ;  第一位字符"y"
    591. 0040730C     .  8D4D CC          lea ecx,dword ptr ss:[ebp-34]
    592. 0040730F     .  FFD6             call esi
    593. 00407311     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    594. 00407314     .  FFD7             call edi
    595. 00407316     .  8D55 CC          lea edx,dword ptr ss:[ebp-34]
    596. 00407319     .  8D8D 68FFFFFF    lea ecx,dword ptr ss:[ebp-98]
    597. 0040731F     .  FF15 30114000    call dword ptr ds:[<&MSVBVM60.__vbaVarCopy>]   
    598. 00407325     .  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    599. 0040732B     .  8D45 88          lea eax,dword ptr ss:[ebp-78]
    600. 0040732E     .  52               push edx
    601. 0040732F     .  50               push eax
    602. 00407330     .  C745 90 60414000 mov dword ptr ss:[ebp-70],Crackme2.00404160
    603. 00407337     .  C745 88 08800000 mov dword ptr ss:[ebp-78],8008
    604. 0040733E     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  比较取出的字符是否为"a"
    605. 00407344     .  66:85C0          test ax,ax
    606. 00407347     .  74 23            je short Crackme2.0040736C                     ;  不是则跳
    607. 00407349     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    608. 0040734C     .  53               push ebx
    609. 0040734D     .  51               push ecx
    610. 0040734E     .  E8 EDEEFFFF      call Crackme2.00406240
    611. 00407353     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    612. 00407356     .  FFD7             call edi
    613. 00407358     .  68 68414000      push Crackme2.00404168                         ;  字符若为"a",则取地址00404168的字符"B"
    614. 0040735D     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符"B"的ASCII值
    615. 00407363     .  66:05 B900       add ax,0B9                                     ;  AX=AX+0B9
    616. 00407367     .  E9 FF110000      jmp Crackme2.0040856B
    617. 0040736C     >  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    618. 00407372     .  8D45 88          lea eax,dword ptr ss:[ebp-78]
    619. 00407375     .  52               push edx
    620. 00407376     .  50               push eax
    621. 00407377     .  C745 90 70414000 mov dword ptr ss:[ebp-70],Crackme2.00404170
    622. 0040737E     .  C745 88 08800000 mov dword ptr ss:[ebp-78],8008
    623. 00407385     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  比较取出的字符是否为"b"
    624. 0040738B     .  66:85C0          test ax,ax
    625. 0040738E     .  74 23            je short Crackme2.004073B3                     ;  不是则跳
    626. 00407390     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    627. 00407393     .  53               push ebx
    628. 00407394     .  51               push ecx
    629. 00407395     .  E8 A6EEFFFF      call Crackme2.00406240
    630. 0040739A     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    631. 0040739D     .  FFD7             call edi
    632. 0040739F     .  68 78414000      push Crackme2.00404178                         ;  字符若为"b",则取地址00404178的字符"8"
    633. 004073A4     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符"8"的ASCII值
    634. 004073AA     .  66:05 8C00       add ax,8C                                      ;  AX=AX+8C
    635. 004073AE     .  E9 B8110000      jmp Crackme2.0040856B
    636. 004073B3     >  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    637. 004073B9     .  8D45 88          lea eax,dword ptr ss:[ebp-78]
    638. 004073BC     .  52               push edx
    639. 004073BD     .  50               push eax
    640. 004073BE     .  C745 90 80414000 mov dword ptr ss:[ebp-70],Crackme2.00404180
    641. 004073C5     .  C745 88 08800000 mov dword ptr ss:[ebp-78],8008
    642. 004073CC     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  比较取出的字符是否为"c"
    643. 004073D2     .  66:85C0          test ax,ax
    644. 004073D5     .  74 23            je short Crackme2.004073FA                     ;  不是则跳
    645. 004073D7     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    646. 004073DA     .  53               push ebx
    647. 004073DB     .  51               push ecx
    648. 004073DC     .  E8 5FEEFFFF      call Crackme2.00406240
    649. 004073E1     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    650. 004073E4     .  FFD7             call edi
    651. 004073E6     .  68 68414000      push Crackme2.00404168                         ;  字符若为"c",则取地址00404168的字符"B"
    652. 004073EB     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符"B"的ASCII值
    653. 004073F1     .  66:05 B500       add ax,0B5                                     ;  AX=AX+0B5
    654. 004073F5     .  E9 71110000      jmp Crackme2.0040856B
    655. 004073FA     >  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    656. .......................................................

    657.                      省略部分代码

    658. .......................................................
    659. 00407A74     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  比较取出的字符是否为"A"
    660. 00407A7A     .  66:85C0          test ax,ax
    661. 00407A7D     .  74 23            je short Crackme2.00407AA2                     ;  不是则跳
    662. 00407A7F     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    663. 00407A82     .  53               push ebx
    664. 00407A83     .  51               push ecx
    665. 00407A84     .  E8 B7E7FFFF      call Crackme2.00406240
    666. 00407A89     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    667. 00407A8C     .  FFD7             call edi
    668. 00407A8E     .  68 48424000      push Crackme2.00404248                         ;  字符若为"A",则取地址00404248的字符"5"
    669. 00407A93     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符"5"的ASCII值
    670. 00407A99     .  66:05 5A00       add ax,5A                                      ;  AX=AX+5A
    671. 00407A9D     .  E9 C90A0000      jmp Crackme2.0040856B
    672. 00407AA2     >  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    673. 00407AA8     .  8D45 88          lea eax,dword ptr ss:[ebp-78]
    674. 00407AAB     .  52               push edx
    675. 00407AAC     .  50               push eax
    676. 00407AAD     .  C745 90 68414000 mov dword ptr ss:[ebp-70],Crackme2.00404168
    677. 00407AB4     .  C745 88 08800000 mov dword ptr ss:[ebp-78],8008
    678. 00407ABB     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  比较取出的字符是否为"B"
    679. 00407AC1     .  66:85C0          test ax,ax
    680. 00407AC4     .  74 23            je short Crackme2.00407AE9                     ;  不是则跳
    681. 00407AC6     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    682. 00407AC9     .  53               push ebx
    683. 00407ACA     .  51               push ecx
    684. 00407ACB     .  E8 70E7FFFF      call Crackme2.00406240
    685. 00407AD0     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    686. 00407AD3     .  FFD7             call edi
    687. 00407AD5     .  68 A03E4000      push Crackme2.00403EA0                         ;  字符若为"B",则取地址00403EA0的字符"F"
    688. 00407ADA     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符"F"的ASCII值
    689. 00407AE0     .  66:05 F500       add ax,0F5                                     ;  AX=AX+0F5
    690. 00407AE4     .  E9 820A0000      jmp Crackme2.0040856B
    691. 00407AE9     >  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    692. 00407AEF     .  8D45 88          lea eax,dword ptr ss:[ebp-78]
    693. .......................................................

    694.                      省略部分代码

    695. .......................................................

    696. 00408191     >  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    697. 00408197     .  8D45 88          lea eax,dword ptr ss:[ebp-78]
    698. 0040819A     .  52               push edx
    699. 0040819B     .  50               push eax
    700. 0040819C     .  C745 90 68424000 mov dword ptr ss:[ebp-70],Crackme2.00404268
    701. 004081A3     .  C745 88 08800000 mov dword ptr ss:[ebp-78],8008
    702. 004081AA     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  比较取出的字符是否为"1"
    703. 004081B0     .  66:85C0          test ax,ax
    704. 004081B3     .  74 23            je short Crackme2.004081D8                     ;  不是则跳
    705. 004081B5     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    706. 004081B8     .  53               push ebx
    707. 004081B9     .  51               push ecx
    708. 004081BA     .  E8 81E0FFFF      call Crackme2.00406240
    709. 004081BF     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    710. 004081C2     .  FFD7             call edi
    711. 004081C4     .  68 D4404000      push Crackme2.004040D4                         ;  字符若为"1",则取地址004040D4的字符"D"
    712. 004081C9     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符"D"的ASCII值
    713. 004081CF     .  66:05 DA00       add ax,0DA                                     ;  AX=AX+0DA
    714. 004081D3     .  E9 93030000      jmp Crackme2.0040856B
    715. 004081D8     >  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    716. 004081DE     .  8D45 88          lea eax,dword ptr ss:[ebp-78]
    717. 004081E1     .  52               push edx
    718. 004081E2     .  50               push eax
    719. 004081E3     .  C745 90 98414000 mov dword ptr ss:[ebp-70],Crackme2.00404198
    720. 004081EA     .  C745 88 08800000 mov dword ptr ss:[ebp-78],8008
    721. 004081F1     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  比较取出的字符是否为"2"
    722. 004081F7     .  66:85C0          test ax,ax
    723. 004081FA     .  74 23            je short Crackme2.0040821F                     ;  不是则跳
    724. 004081FC     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    725. 004081FF     .  53               push ebx
    726. 00408200     .  51               push ecx
    727. 00408201     .  E8 3AE0FFFF      call Crackme2.00406240
    728. 00408206     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    729. 00408209     .  FFD7             call edi
    730. 0040820B     .  68 90414000      push Crackme2.00404190                         ;  字符若为"2",则取地址00404190的字符"3"
    731. 00408210     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符"3"的ASCII值
    732. 00408216     .  66:05 3C00       add ax,3C                                      ;  AX=AX+3C
    733. 0040821A     .  E9 4C030000      jmp Crackme2.0040856B
    734. .......................................................

    735.                      省略部分代码

    736. .......................................................

    737. 00408470     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  比较取出的字符是否为"#"
    738. 00408476     .  66:85C0          test ax,ax
    739. 00408479     .  74 23            je short Crackme2.0040849E                     ;  不是则跳
    740. 0040847B     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    741. 0040847E     .  53               push ebx
    742. 0040847F     .  51               push ecx
    743. 00408480     .  E8 BBDDFFFF      call Crackme2.00406240
    744. 00408485     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    745. 00408488     .  FFD7             call edi
    746. 0040848A     .  68 28424000      push Crackme2.00404228                         ;  字符若为"#",则取地址00404228的字符"E"
    747. 0040848F     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符"E"的ASCII值
    748. 00408495     .  66:05 EB00       add ax,0EB                                     ;  AX=AX+0EB
    749. 00408499     .  E9 CD000000      jmp Crackme2.0040856B
    750. 0040849E     >  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    751. 004084A4     .  8D45 88          lea eax,dword ptr ss:[ebp-78]
    752. 004084A7     .  52               push edx
    753. 004084A8     .  50               push eax
    754. 004084A9     .  C745 90 08434000 mov dword ptr ss:[ebp-70],Crackme2.00404308
    755. 004084B0     .  C745 88 08800000 mov dword ptr ss:[ebp-78],8008
    756. 004084B7     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  比较取出的字符是否为"^"
    757. 004084BD     .  66:85C0          test ax,ax
    758. 004084C0     .  74 23            je short Crackme2.004084E5                     ;  不是则跳
    759. 004084C2     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    760. 004084C5     .  53               push ebx
    761. 004084C6     .  51               push ecx
    762. 004084C7     .  E8 74DDFFFF      call Crackme2.00406240
    763. 004084CC     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    764. 004084CF     .  FFD7             call edi
    765. 004084D1     .  68 A03E4000      push Crackme2.00403EA0                         ;  字符若为"^",则取地址00403EA0的字符"F"
    766. 004084D6     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符"D"的ASCII值
    767. 004084DC     .  66:05 FB00       add ax,0FB                                     ;  AX=AX+0FB
    768. 004084E0     .  E9 86000000      jmp Crackme2.0040856B
    769. 004084E5     >  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    770. 004084EB     .  8D45 88          lea eax,dword ptr ss:[ebp-78]
    771. 004084EE     .  52               push edx
    772. 004084EF     .  50               push eax
    773. 004084F0     .  C745 90 10434000 mov dword ptr ss:[ebp-70],Crackme2.00404310
    774. 004084F7     .  C745 88 08800000 mov dword ptr ss:[ebp-78],8008
    775. 004084FE     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  比较取出的字符是否为"$"
    776. 00408504     .  66:85C0          test ax,ax
    777. 00408507     .  74 20            je short Crackme2.00408529                     ;  不是则跳
    778. 00408509     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    779. 0040850C     .  53               push ebx
    780. 0040850D     .  51               push ecx
    781. 0040850E     .  E8 2DDDFFFF      call Crackme2.00406240
    782. 00408513     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    783. 00408516     .  FFD7             call edi
    784. 00408518     .  68 28424000      push Crackme2.00404228                         ;  字符若为"$",则取地址00404228的字符"E"
    785. 0040851D     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符"E"的ASCII值
    786. 00408523     .  66:05 E500       add ax,0E5                                     ;  AX=AX+0E5
    787. 00408527     .  EB 42            jmp short Crackme2.0040856B
    788. 00408529     >  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    789. 0040852F     .  8D45 88          lea eax,dword ptr ss:[ebp-78]
    790. 00408532     .  52               push edx
    791. 00408533     .  50               push eax
    792. 00408534     .  C745 90 18434000 mov dword ptr ss:[ebp-70],Crackme2.00404318
    793. 0040853B     .  C745 88 08800000 mov dword ptr ss:[ebp-78],8008
    794. 00408542     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  比较取出的字符是否为"&"
    795. 00408548     .  66:85C0          test ax,ax
    796. 0040854B     .  74 48            je short Crackme2.00408595                     ;  不是则跳
    797. 0040854D     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    798. 00408550     .  53               push ebx
    799. 00408551     .  51               push ecx
    800. 00408552     .  E8 E9DCFFFF      call Crackme2.00406240
    801. 00408557     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    802. 0040855A     .  FFD7             call edi
    803. 0040855C     .  68 9C3F4000      push Crackme2.00403F9C                         ;  字符若为"&",则取地址00403F9C的字符"C"
    804. 00408561     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符"C"的ASCII值
    805. 00408567     .  66:05 C200       add ax,0C2                                     ;  AX=AX+0C2
    806. 0040856B     >  0F80 B5000000    jo Crackme2.00408626
    807. 00408571     .  66:8945 90       mov word ptr ss:[ebp-70],ax                    ;  AX保存
    808. 00408575     .  8D55 DC          lea edx,dword ptr ss:[ebp-24]
    809. 00408578     .  8D45 88          lea eax,dword ptr ss:[ebp-78]
    810. 0040857B     .  52               push edx
    811. 0040857C     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    812. 0040857F     .  50               push eax
    813. 00408580     .  51               push ecx
    814. 00408581     .  C745 88 02000000 mov dword ptr ss:[ebp-78],2
    815. 00408588     .  FF15 D8104000    call dword ptr ds:[<&MSVBVM60.__vbaVarCat>]    ;  取每次AX值的10进制形式转为字符串连接
    816. 0040858E     .  8BD0             mov edx,eax
    817. 00408590     .  8D4D DC          lea ecx,dword ptr ss:[ebp-24]
    818. 00408593     .  FFD6             call esi
    819. 00408595     >  8D55 DC          lea edx,dword ptr ss:[ebp-24]
    820. 00408598     .  8D4D B8          lea ecx,dword ptr ss:[ebp-48]
    821. 0040859B     .  FF15 30114000    call dword ptr ds:[<&MSVBVM60.__vbaVarCopy>]   
    822. 004085A1     .  B8 01000000      mov eax,1
    823. 004085A6     .  66:0345 C8       add ax,word ptr ss:[ebp-38]
    824. 004085AA     .  70 7A            jo short Crackme2.00408626
    825. 004085AC     .  8945 C8          mov dword ptr ss:[ebp-38],eax
    826. 004085AF     .^ E9 12EDFFFF      jmp Crackme2.004072C6
    827. 004085B4     >  68 F7854000      push Crackme2.004085F7
    828. 004085B9     .  EB 23            jmp short Crackme2.004085DE
    829. 004085BB     .  F645 FC 04       test byte ptr ss:[ebp-4],4
    830. 004085BF     .  74 09            je short Crackme2.004085CA
    831. 004085C1     .  8D4D B8          lea ecx,dword ptr ss:[ebp-48]
    832. 004085C4     .  FF15 18104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>]   
    833. 004085CA     >  8D55 98          lea edx,dword ptr ss:[ebp-68]
    834. 004085CD     .  8D45 A8          lea eax,dword ptr ss:[ebp-58]
    835. 004085D0     .  52               push edx
    836. 004085D1     .  50               push eax
    837. 004085D2     .  6A 02            push 2
    838. 004085D4     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>
    839. 004085DA     .  83C4 0C          add esp,0C
    840. 004085DD     .  C3               retn
    841. 004085DE     > \8B35 18104000    mov esi,dword ptr ds:[<&MSVBVM60.__vbaFreeVar>>
    842. 004085E4     .  8D8D 68FFFFFF    lea ecx,dword ptr ss:[ebp-98]
    843. 004085EA     .  FFD6             call esi                                       
    844. 004085EC     .  8D4D DC          lea ecx,dword ptr ss:[ebp-24]
    845. 004085EF     .  FFD6             call esi                                      
    846. 004085F1     .  8D4D CC          lea ecx,dword ptr ss:[ebp-34]
    847. 004085F4     .  FFD6             call esi                                       
    848. 004085F6     .  C3               retn
    849. 004085F7     .  8B45 08          mov eax,dword ptr ss:[ebp+8]
    850. 004085FA     .  8B55 B8          mov edx,dword ptr ss:[ebp-48]
    851. 004085FD     .  8BC8             mov ecx,eax
    852. 004085FF     .  5F               pop edi
    853. 00408600     .  5E               pop esi
    854. 00408601     .  5B               pop ebx
    855. 00408602     .  8911             mov dword ptr ds:[ecx],edx
    856. 00408604     .  8B55 BC          mov edx,dword ptr ss:[ebp-44]
    857. 00408607     .  8951 04          mov dword ptr ds:[ecx+4],edx
    858. 0040860A     .  8B55 C0          mov edx,dword ptr ss:[ebp-40]
    859. 0040860D     .  8951 08          mov dword ptr ds:[ecx+8],edx                   ;  真码"283233302113112268",内存注册机
    860. 00408610     .  8B55 C4          mov edx,dword ptr ss:[ebp-3C]
    861. 00408613     .  8951 0C          mov dword ptr ds:[ecx+C],edx
    862. 00408616     .  8B4D EC          mov ecx,dword ptr ss:[ebp-14]
    863. 00408619     .  64:890D 00000000 mov dword ptr fs:[0],ecx
    864. 00408620     .  8BE5             mov esp,ebp
    865. 00408622     .  5D               pop ebp
    866. 00408623     .  C2 0C00          retn 0C


    867. 若用户名ASCII值累加为奇数来到以下位置(设用户名"hrby"):

    868. 004057A5     > \8B16             mov edx,dword ptr ds:[esi]                     ;  用户名ASCII值累加为奇数跳到这里
    869. 004057A7     .  56               push esi
    870. 004057A8     .  FF92 10030000    call dword ptr ds:[edx+310]
    871. 004057AE     .  50               push eax                                       
    872. 004057AF     .  8D45 AC          lea eax,dword ptr ss:[ebp-54]
    873. 004057B2     .  50               push eax
    874. 004057B3     .  FFD3             call ebx
    875. 004057B5     .  8BF8             mov edi,eax
    876. 004057B7     .  8D55 C0          lea edx,dword ptr ss:[ebp-40]
    877. 004057BA     .  52               push edx
    878. 004057BB     .  57               push edi
    879. 004057BC     .  8B0F             mov ecx,dword ptr ds:[edi]                     
    880. 004057BE     .  FF91 A0000000    call dword ptr ds:[ecx+A0]
    881. 004057C4     .  85C0             test eax,eax
    882. 004057C6     .  DBE2             fclex
    883. 004057C8     .  7D 12            jge short Crackme2.004057DC
    884. 004057CA     .  68 A0000000      push 0A0
    885. 004057CF     .  68 743D4000      push Crackme2.00403D74
    886. 004057D4     .  57               push edi
    887. 004057D5     .  50               push eax
    888. 004057D6     .  FF15 44104000    call dword ptr ds:[<&MSVBVM60.__vbaHresultChec>
    889. 004057DC     >  8B45 C0          mov eax,dword ptr ss:[ebp-40]                  ;  用户名"hrby"
    890. 004057DF     .  8D4D 88          lea ecx,dword ptr ss:[ebp-78]
    891. 004057E2     .  8945 A0          mov dword ptr ss:[ebp-60],eax
    892. 004057E5     .  8D45 98          lea eax,dword ptr ss:[ebp-68]
    893. 004057E8     .  50               push eax
    894. 004057E9     .  51               push ecx
    895. 004057EA     .  C745 C0 00000000 mov dword ptr ss:[ebp-40],0
    896. 004057F1     .  C745 98 08000000 mov dword ptr ss:[ebp-68],8
    897. 004057F8     .  E8 B3110000      call Crackme2.004069B0                         ;  关键CALL-3,F7进入
    898. 004057FD     .  8D55 88          lea edx,dword ptr ss:[ebp-78]
    899. 00405800     .  C785 34FFFFFF 09>mov dword ptr ss:[ebp-CC],9
    900. 0040580A     .  52               push edx
    901. 0040580B     .  FF15 20104000    call dword ptr ds:[<&MSVBVM60.__vbaStrVarMove>>
    902. 00405811     .  8BD0             mov edx,eax                                    ;  得到字符串"27B8066481EB68098F8A0DB8266588"
    903. 00405813     .  8D4D BC          lea ecx,dword ptr ss:[ebp-44]
    904. 00405816     .  FF15 38114000    call dword ptr ds:[<&MSVBVM60.__vbaStrMove>]   
    905. 0040581C     .  8D85 34FFFFFF    lea eax,dword ptr ss:[ebp-CC]
    906. 00405822     .  8D4D BC          lea ecx,dword ptr ss:[ebp-44]
    907. 00405825     .  50               push eax
    908. 00405826     .  8D95 78FFFFFF    lea edx,dword ptr ss:[ebp-88]
    909. 0040582C     .  51               push ecx
    910. 0040582D     .  52               push edx
    911. 0040582E     .  E8 1D1A0000      call Crackme2.00407250                         ;  同关键CALL-2,见前面分析
    912. 00405833     .  8B06             mov eax,dword ptr ds:[esi]
    913. 00405835     .  56               push esi
    914. 00405836     .  FF90 18030000    call dword ptr ds:[eax+318]
    915. 0040583C     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    916. 0040583F     .  50               push eax
    917. 00405840     .  51               push ecx
    918. 00405841     .  FFD3             call ebx
    919. 00405843     .  8BF8             mov edi,eax
    920. 00405845     .  8D45 B8          lea eax,dword ptr ss:[ebp-48]
    921. 00405848     .  50               push eax
    922. 00405849     .  57               push edi
    923. 0040584A     .  8B17             mov edx,dword ptr ds:[edi]
    924. 0040584C     .  FF92 A0000000    call dword ptr ds:[edx+A0]
    925. 00405852     .  85C0             test eax,eax
    926. 00405854     .  DBE2             fclex
    927. 00405856     .  7D 12            jge short Crackme2.0040586A
    928. 00405858     .  68 A0000000      push 0A0
    929. 0040585D     .  68 743D4000      push Crackme2.00403D74
    930. 00405862     .  57               push edi
    931. 00405863     .  50               push eax
    932. 00405864     .  FF15 44104000    call dword ptr ds:[<&MSVBVM60.__vbaHresultChec>
    933. 0040586A     >  8B45 B8          mov eax,dword ptr ss:[ebp-48]
    934. 0040586D     .  8D8D 78FFFFFF    lea ecx,dword ptr ss:[ebp-88]
    935. 00405873     .  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    936. 00405879     .  51               push ecx
    937. 0040587A     .  52               push edx
    938. 0040587B     .  C745 B8 00000000 mov dword ptr ss:[ebp-48],0
    939. 00405882     .  8985 70FFFFFF    mov dword ptr ss:[ebp-90],eax
    940. 00405888     .  C785 68FFFFFF 08>mov dword ptr ss:[ebp-98],8008
    941. 00405892     .  FF15 90104000    call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>]  ;  真假码比较
    942. 00405898     .  8D4D BC          lea ecx,dword ptr ss:[ebp-44]
    943. 0040589B     .  8BF8             mov edi,eax
    944. 0040589D     .  FF15 50114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]  
    945. 004058A3     .  8D45 A8          lea eax,dword ptr ss:[ebp-58]
    946. 004058A6     .  8D4D AC          lea ecx,dword ptr ss:[ebp-54]
    947. 004058A9     .  50               push eax
    948. 004058AA     .  51               push ecx
    949. 004058AB     .  6A 02            push 2
    950. 004058AD     .  FF15 30104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeObjList>
    951. 004058B3     .  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    952. 004058B9     .  8D85 78FFFFFF    lea eax,dword ptr ss:[ebp-88]
    953. 004058BF     .  52               push edx
    954. 004058C0     .  8D4D 88          lea ecx,dword ptr ss:[ebp-78]
    955. 004058C3     .  50               push eax
    956. 004058C4     .  8D55 98          lea edx,dword ptr ss:[ebp-68]
    957. 004058C7     .  51               push ecx
    958. 004058C8     .  52               push edx
    959. 004058C9     .  6A 04            push 4
    960. 004058CB     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>
    961. 004058D1     .  83C4 20          add esp,20
    962. 004058D4     .  66:85FF          test di,di
    963. 004058D7     .  0F84 85010000    je Crackme2.00405A62                           ;  暴破点2,NOP掉
    964. 004058DD     .  A1 10904000      mov eax,dword ptr ds:[409010]
    965. 004058E2     .  85C0             test eax,eax
    966. 004058E4     .  75 10            jnz short Crackme2.004058F6

    967. F7进入004057F8处的关键CALL-3,来到:

    968. 004069B0     $  55               push ebp
    969. .......................................................

    970.                      省略部分代码

    971. .......................................................
    972. 00406A62     .  8985 78FEFFFF    mov dword ptr ss:[ebp-188],eax
    973. 00406A68     .  C785 20FFFFFF 14>mov dword ptr ss:[ebp-E0],14                   ;  常数,0x14(20)
    974. 00406A72     .  C785 18FFFFFF 02>mov dword ptr ss:[ebp-E8],2
    975. 00406A7C     .  FFD6             call esi                                      
    976. 00406A7E     .  8B7D 0C          mov edi,dword ptr ss:[ebp+C]
    977. 00406A81     .  8D85 7CFFFFFF    lea eax,dword ptr ss:[ebp-84]
    978. 00406A87     .  50               push eax
    979. 00406A88     .  8BD7             mov edx,edi
    980. 00406A8A     .  8D8D 18FFFFFF    lea ecx,dword ptr ss:[ebp-E8]
    981. 00406A90     .  FF15 14104000    call dword ptr ds:[<&MSVBVM60.__vbaVarVargNofr>
    982. 00406A96     .  8D8D 58FFFFFF    lea ecx,dword ptr ss:[ebp-A8]
    983. 00406A9C     .  50               push eax
    984. 00406A9D     .  51               push ecx
    985. 00406A9E     .  FF15 48104000    call dword ptr ds:[<&MSVBVM60.__vbaLenVar>]    ;  获取用户名"hrby"长度,4
    986. 00406AA4     .  8D95 48FFFFFF    lea edx,dword ptr ss:[ebp-B8]                  
    987. 00406AAA     .  50               push eax
    988. 00406AAB     .  52               push edx
    989. 00406AAC     .  FF15 00104000    call dword ptr ds:[<&MSVBVM60.__vbaVarSub>]    ;  0x14-4=0x10,0x14-用户名长度
    990. 00406AB2     .  8BD0             mov edx,eax
    991. 00406AB4     .  8D4D 9C          lea ecx,dword ptr ss:[ebp-64]
    992. 00406AB7     .  FFD6             call esi                                       
    993. 00406AB9     .  8D45 9C          lea eax,dword ptr ss:[ebp-64]
    994. 00406ABC     .  8D8D 18FFFFFF    lea ecx,dword ptr ss:[ebp-E8]
    995. 00406AC2     .  50               push eax
    996. 00406AC3     .  8D95 58FFFFFF    lea edx,dword ptr ss:[ebp-A8]
    997. 00406AC9     .  BB 01000000      mov ebx,1                                      
    998. 00406ACE     .  51               push ecx
    999. 00406ACF     .  52               push edx
    1000. 00406AD0     .  899D 20FFFFFF    mov dword ptr ss:[ebp-E0],ebx
    1001. 00406AD6     .  C785 18FFFFFF 02>mov dword ptr ss:[ebp-E8],8002
    1002. 00406AE0     .  FF15 0C114000    call dword ptr ds:[<&MSVBVM60.__vbaVarCmpLt>]  
    1003. 00406AE6     .  50               push eax
    1004. 00406AE7     .  8D85 48FFFFFF    lea eax,dword ptr ss:[ebp-B8]
    1005. 00406AED     .  50               push eax
    1006. 00406AEE     .  FF15 08114000    call dword ptr ds:[<&MSVBVM60.__vbaVarNot>]   
    1007. 00406AF4     .  50               push eax
    1008. 00406AF5     .  FF15 6C104000    call dword ptr ds:[<&MSVBVM60.__vbaBoolVarNull>
    1009. 00406AFB     .  66:85C0          test ax,ax
    1010. 00406AFE     .  0F84 AF000000    je Crackme2.00406BB3             
    1011. 00406B04     .  B8 02000000      mov eax,2
    1012. 00406B09     .  8D8D 18FFFFFF    lea ecx,dword ptr ss:[ebp-E8]
    1013. 00406B0F     .  8985 18FFFFFF    mov dword ptr ss:[ebp-E8],eax
    1014. 00406B15     .  8985 08FFFFFF    mov dword ptr ss:[ebp-F8],eax
    1015. 00406B1B     .  8D55 9C          lea edx,dword ptr ss:[ebp-64]
    1016. 00406B1E     .  51               push ecx
    1017. 00406B1F     .  8D85 08FFFFFF    lea eax,dword ptr ss:[ebp-F8]
    1018. 00406B25     .  52               push edx
    1019. 00406B26     .  8D8D D8FEFFFF    lea ecx,dword ptr ss:[ebp-128]
    1020. 00406B2C     .  50               push eax
    1021. 00406B2D     .  8D95 E8FEFFFF    lea edx,dword ptr ss:[ebp-118]
    1022. 00406B33     .  51               push ecx
    1023. 00406B34     .  8D45 AC          lea eax,dword ptr ss:[ebp-54]
    1024. 00406B37     .  52               push edx
    1025. 00406B38     .  50               push eax
    1026. 00406B39     .  899D 20FFFFFF    mov dword ptr ss:[ebp-E0],ebx                 
    1027. 00406B3F     .  899D 10FFFFFF    mov dword ptr ss:[ebp-F0],ebx
    1028. 00406B45     .  FF15 58104000    call dword ptr ds:[<&MSVBVM60.__vbaVarForInit>>
    1029. 00406B4B     .  8B1D 48114000    mov ebx,dword ptr ds:[<&MSVBVM60.__vbaVarForNe>
    1030. 00406B51     >  85C0             test eax,eax                                 
    1031. 00406B53     .  74 64            je short Crackme2.00406BB9
    1032. 00406B55     .  8D8D 58FFFFFF    lea ecx,dword ptr ss:[ebp-A8]
    1033. 00406B5B     .  6A 15            push 15                                        ;  常数,0x15
    1034. 00406B5D     .  51               push ecx
    1035. 00406B5E     .  FF15 C8104000    call dword ptr ds:[<&MSVBVM60.#608>]           
    1036. 00406B64     .  8BD7             mov edx,edi
    1037. 00406B66     .  8D8D 18FFFFFF    lea ecx,dword ptr ss:[ebp-E8]
    1038. 00406B6C     .  FF15 14104000    call dword ptr ds:[<&MSVBVM60.__vbaVarVargNofr>
    1039. 00406B72     .  50               push eax
    1040. 00406B73     .  8D95 58FFFFFF    lea edx,dword ptr ss:[ebp-A8]
    1041. 00406B79     .  8D85 48FFFFFF    lea eax,dword ptr ss:[ebp-B8]
    1042. 00406B7F     .  52               push edx
    1043. 00406B80     .  50               push eax
    1044. 00406B81     .  FF15 D8104000    call dword ptr ds:[<&MSVBVM60.__vbaVarCat>]    ;  在用户名后连接0x10(16)个常数0x15,
    1045. 00406B87     .  8BD0             mov edx,eax
    1046. 00406B89     .  8BCF             mov ecx,edi
    1047. 00406B8B     .  FF15 78104000    call dword ptr ds:[<&MSVBVM60.__vbaVargVarMove>
    1048. 00406B91     .  8D8D 58FFFFFF    lea ecx,dword ptr ss:[ebp-A8]
    1049. 00406B97     .  FF15 18104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>]   
    1050. 00406B9D     .  8D8D D8FEFFFF    lea ecx,dword ptr ss:[ebp-128]
    1051. 00406BA3     .  8D95 E8FEFFFF    lea edx,dword ptr ss:[ebp-118]
    1052. 00406BA9     .  51               push ecx
    1053. 00406BAA     .  8D45 AC          lea eax,dword ptr ss:[ebp-54]
    1054. 00406BAD     .  52               push edx
    1055. 00406BAE     .  50               push eax
    1056. 00406BAF     .  FFD3             call ebx
    1057. 00406BB1     .^ EB 9E            jmp short Crackme2.00406B51
    1058. 00406BB3     >  8B1D 48114000    mov ebx,dword ptr ds:[<&MSVBVM60.__vbaVarForNe>
    1059. 00406BB9     >  8D95 18FFFFFF    lea edx,dword ptr ss:[ebp-E8]
    1060. 00406BBF     .  8D4D 8C          lea ecx,dword ptr ss:[ebp-74]
    1061. 00406BC2     .  C785 20FFFFFF 01>mov dword ptr ss:[ebp-E0],1
    1062. 00406BCC     .  C785 18FFFFFF 02>mov dword ptr ss:[ebp-E8],2
    1063. 00406BD6     .  FFD6             call esi
    1064. 00406BD8     .  B9 01000000      mov ecx,1
    1065. 00406BDD     .  B8 02000000      mov eax,2
    1066. 00406BE2     .  898D 20FFFFFF    mov dword ptr ss:[ebp-E0],ecx
    1067. 00406BE8     .  898D 10FFFFFF    mov dword ptr ss:[ebp-F0],ecx
    1068. 00406BEE     .  8D8D 18FFFFFF    lea ecx,dword ptr ss:[ebp-E8]
    1069. 00406BF4     .  8985 18FFFFFF    mov dword ptr ss:[ebp-E8],eax
    1070. 00406BFA     .  8985 08FFFFFF    mov dword ptr ss:[ebp-F8],eax
    1071. 00406C00     .  8D95 7CFFFFFF    lea edx,dword ptr ss:[ebp-84]
    1072. 00406C06     .  51               push ecx
    1073. 00406C07     .  8D85 08FFFFFF    lea eax,dword ptr ss:[ebp-F8]
    1074. 00406C0D     .  52               push edx
    1075. 00406C0E     .  8D8D B8FEFFFF    lea ecx,dword ptr ss:[ebp-148]
    1076. 00406C14     .  50               push eax
    1077. 00406C15     .  8D95 C8FEFFFF    lea edx,dword ptr ss:[ebp-138]
    1078. 00406C1B     .  51               push ecx
    1079. 00406C1C     .  8D45 BC          lea eax,dword ptr ss:[ebp-44]
    1080. 00406C1F     .  52               push edx
    1081. 00406C20     .  50               push eax
    1082. 00406C21     .  FF15 58104000    call dword ptr ds:[<&MSVBVM60.__vbaVarForInit>>
    1083. 00406C27     >  85C0             test eax,eax
    1084. 00406C29     .  0F84 EE000000    je Crackme2.00406D1D
    1085. 00406C2F     .  8D8D 58FFFFFF    lea ecx,dword ptr ss:[ebp-A8]
    1086. 00406C35     .  8D55 BC          lea edx,dword ptr ss:[ebp-44]
    1087. 00406C38     .  51               push ecx
    1088. 00406C39     .  52               push edx
    1089. 00406C3A     .  C785 60FFFFFF 01>mov dword ptr ss:[ebp-A0],1
    1090. 00406C44     .  C785 58FFFFFF 02>mov dword ptr ss:[ebp-A8],2
    1091. 00406C4E     .  FF15 20114000    call dword ptr ds:[<&MSVBVM60.__vbaI4Var>]     
    1092. 00406C54     .  50               push eax
    1093. 00406C55     .  8D85 48FFFFFF    lea eax,dword ptr ss:[ebp-B8]
    1094. 00406C5B     .  57               push edi
    1095. 00406C5C     .  50               push eax
    1096. 00406C5D     .  FF15 7C104000    call dword ptr ds:[<&MSVBVM60.#632>]           ;  rtcMidCharVar,循环取用户名每一位字符"h"
    1097. 00406C63     .  8D8D 48FFFFFF    lea ecx,dword ptr ss:[ebp-B8]
    1098. 00406C69     .  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    1099. 00406C6F     .  51               push ecx
    1100. 00406C70     .  52               push edx
    1101. 00406C71     .  FF15 D4104000    call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>]
    1102. 00406C77     .  50               push eax
    1103. 00406C78     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符的ASCII值
    1104. 00406C7E     .  66:8985 10FFFFFF mov word ptr ss:[ebp-F0],ax                    ;  EAX=68("h")
    1105. 00406C85     .  8D85 7CFFFFFF    lea eax,dword ptr ss:[ebp-84]
    1106. 00406C8B     .  8D8D 08FFFFFF    lea ecx,dword ptr ss:[ebp-F8]
    1107. 00406C91     .  50               push eax
    1108. 00406C92     .  8D55 BC          lea edx,dword ptr ss:[ebp-44]
    1109. 00406C95     .  51               push ecx
    1110. 00406C96     .  8D85 38FFFFFF    lea eax,dword ptr ss:[ebp-C8]
    1111. 00406C9C     .  52               push edx
    1112. 00406C9D     .  50               push eax
    1113. 00406C9E     .  C785 08FFFFFF 02>mov dword ptr ss:[ebp-F8],2
    1114. 00406CA8     .  FF15 B4104000    call dword ptr ds:[<&MSVBVM60.__vbaVarMul>]    ;  字符的ASCII值*字符在用户名中的位置
    1115. 00406CAE     .  8D8D 28FFFFFF    lea ecx,dword ptr ss:[ebp-D8]                  ;  0x68*1=0x68
    1116. 00406CB4     .  50               push eax
    1117. 00406CB5     .  51               push ecx
    1118. 00406CB6     .  FF15 24114000    call dword ptr ds:[<&MSVBVM60.__vbaVarAdd>]    ;  0x68+0x14=7C,上面的乘法结果加固定数0x14
    1119. 00406CBC     .  8BD0             mov edx,eax
    1120. 00406CBE     .  8D4D DC          lea ecx,dword ptr ss:[ebp-24]
    1121. 00406CC1     .  FFD6             call esi
    1122. 00406CC3     .  8D8D 68FFFFFF    lea ecx,dword ptr ss:[ebp-98]
    1123. 00406CC9     .  FF15 50114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]   
    1124. 00406CCF     .  8D95 48FFFFFF    lea edx,dword ptr ss:[ebp-B8]
    1125. 00406CD5     .  8D85 58FFFFFF    lea eax,dword ptr ss:[ebp-A8]
    1126. 00406CDB     .  52               push edx
    1127. 00406CDC     .  50               push eax
    1128. 00406CDD     .  6A 02            push 2
    1129. 00406CDF     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>
    1130. 00406CE5     .  83C4 0C          add esp,0C
    1131. 00406CE8     .  8D4D 8C          lea ecx,dword ptr ss:[ebp-74]
    1132. 00406CEB     .  8D55 DC          lea edx,dword ptr ss:[ebp-24]
    1133. 00406CEE     .  8D85 58FFFFFF    lea eax,dword ptr ss:[ebp-A8]
    1134. 00406CF4     .  51               push ecx
    1135. 00406CF5     .  52               push edx
    1136. 00406CF6     .  50               push eax                                       
    1137. 00406CF7     .  FF15 B4104000    call dword ptr ds:[<&MSVBVM60.__vbaVarMul>]    ;  用户名连接0x15后的所有字符加法运算结果相乘
    1138. 00406CFD     .  8BD0             mov edx,eax                                    ;  乘法结果转为字符串"2.77760626153406E+48"
    1139. 00406CFF     .  8D4D 8C          lea ecx,dword ptr ss:[ebp-74]
    1140. 00406D02     .  FFD6             call esi
    1141. 00406D04     .  8D8D B8FEFFFF    lea ecx,dword ptr ss:[ebp-148]
    1142. 00406D0A     .  8D95 C8FEFFFF    lea edx,dword ptr ss:[ebp-138]
    1143. 00406D10     .  51               push ecx
    1144. 00406D11     .  8D45 BC          lea eax,dword ptr ss:[ebp-44]
    1145. 00406D14     .  52               push edx
    1146. 00406D15     .  50               push eax
    1147. 00406D16     .  FFD3             call ebx
    1148. 00406D18     .^ E9 0AFFFFFF      jmp Crackme2.00406C27                        
    1149. 00406D1D     >  8D55 8C          lea edx,dword ptr ss:[ebp-74]
    1150. 00406D20     .  8BCF             mov ecx,edi
    1151. 00406D22     .  FF15 4C104000    call dword ptr ds:[<&MSVBVM60.__vbaVargVarCopy>
    1152. 00406D28     .  8D95 18FFFFFF    lea edx,dword ptr ss:[ebp-E8]
    1153. 00406D2E     .  8D4D 8C          lea ecx,dword ptr ss:[ebp-74]
    1154. 00406D31     .  C785 18FFFFFF 00>mov dword ptr ss:[ebp-E8],0
    1155. 00406D3B     .  FFD6             call esi
    1156. 00406D3D     .  B9 01000000      mov ecx,1
    1157. 00406D42     .  B8 02000000      mov eax,2
    1158. 00406D47     .  898D 10FFFFFF    mov dword ptr ss:[ebp-F0],ecx
    1159. 00406D4D     .  898D 00FFFFFF    mov dword ptr ss:[ebp-100],ecx
    1160. 00406D53     .  8D8D 08FFFFFF    lea ecx,dword ptr ss:[ebp-F8]
    1161. 00406D59     .  8BD7             mov edx,edi
    1162. 00406D5B     .  51               push ecx
    1163. 00406D5C     .  8D8D 18FFFFFF    lea ecx,dword ptr ss:[ebp-E8]
    1164. 00406D62     .  8985 08FFFFFF    mov dword ptr ss:[ebp-F8],eax
    1165. 00406D68     .  8985 F8FEFFFF    mov dword ptr ss:[ebp-108],eax
    1166. 00406D6E     .  FF15 14104000    call dword ptr ds:[<&MSVBVM60.__vbaVarVargNofr>
    1167. 00406D74     .  8D95 58FFFFFF    lea edx,dword ptr ss:[ebp-A8]
    1168. 00406D7A     .  50               push eax
    1169. 00406D7B     .  52               push edx
    1170. 00406D7C     .  FF15 48104000    call dword ptr ds:[<&MSVBVM60.__vbaLenVar>]    ;  获取字符串"2.77760626153406E+48"长度
    1171. 00406D82     .  50               push eax                                       ;  EAX=0X14(20)
    1172. 00406D83     .  8D85 F8FEFFFF    lea eax,dword ptr ss:[ebp-108]
    1173. 00406D89     .  8D8D 98FEFFFF    lea ecx,dword ptr ss:[ebp-168]
    1174. 00406D8F     .  50               push eax
    1175. 00406D90     .  8D95 A8FEFFFF    lea edx,dword ptr ss:[ebp-158]
    1176. 00406D96     .  51               push ecx
    1177. 00406D97     .  8D85 6CFFFFFF    lea eax,dword ptr ss:[ebp-94]
    1178. 00406D9D     .  52               push edx
    1179. 00406D9E     .  50               push eax
    1180. 00406D9F     .  FF15 58104000    call dword ptr ds:[<&MSVBVM60.__vbaVarForInit>>
    1181. 00406DA5     >  85C0             test eax,eax
    1182. 00406DA7     .  0F84 A5000000    je Crackme2.00406E52
    1183. 00406DAD     .  8D8D 58FFFFFF    lea ecx,dword ptr ss:[ebp-A8]
    1184. 00406DB3     .  8D95 6CFFFFFF    lea edx,dword ptr ss:[ebp-94]
    1185. 00406DB9     .  51               push ecx
    1186. 00406DBA     .  52               push edx
    1187. 00406DBB     .  C785 60FFFFFF 03>mov dword ptr ss:[ebp-A0],3                    ;  常数,3
    1188. 00406DC5     .  C785 58FFFFFF 02>mov dword ptr ss:[ebp-A8],2
    1189. 00406DCF     .  FF15 20114000    call dword ptr ds:[<&MSVBVM60.__vbaI4Var>]     
    1190. 00406DD5     .  50               push eax
    1191. 00406DD6     .  8D85 48FFFFFF    lea eax,dword ptr ss:[ebp-B8]
    1192. 00406DDC     .  57               push edi
    1193. 00406DDD     .  50               push eax                                       ;  "2.77760626153406E+48"
    1194. 00406DDE     .  FF15 7C104000    call dword ptr ds:[<&MSVBVM60.#632>]           ;  rtcMidCharVar,每次取3个字符
    1195. 00406DE4     .  8D8D 48FFFFFF    lea ecx,dword ptr ss:[ebp-B8]                  ;  第一次取前3位,"2.7"
    1196. 00406DEA     .  8D95 38FFFFFF    lea edx,dword ptr ss:[ebp-C8]
    1197. 00406DF0     .  51               push ecx
    1198. 00406DF1     .  52               push edx                                      
    1199. 00406DF2     .  E8 59020000      call Crackme2.00407050                         ;  关键CALL-4,F7进入
    1200. 00406DF7     .  8D45 8C          lea eax,dword ptr ss:[ebp-74]                  
    1201. 00406DFA     .  8D8D 38FFFFFF    lea ecx,dword ptr ss:[ebp-C8]
    1202. 00406E00     .  50               push eax
    1203. 00406E01     .  8D95 28FFFFFF    lea edx,dword ptr ss:[ebp-D8]
    1204. 00406E07     .  51               push ecx
    1205. 00406E08     .  52               push edx
    1206. 00406E09     .  FF15 D8104000    call dword ptr ds:[<&MSVBVM60.__vbaVarCat>]    ;  连接每次运算所得的字符串"7B34F71A9387A2387
    1207. 00406E0F     .  8BD0             mov edx,eax                   ;  A22879B8850567684A8511E7B669850B978EF78
    1208. 00406E11     .  8D4D 8C          lea ecx,dword ptr ss:[ebp-74]         ;  2A707DCB0802367685D8587FA98506A438148838"
    1209. 00406E14     .  FFD6             call esi
    1210. 00406E16     .  8D85 38FFFFFF    lea eax,dword ptr ss:[ebp-C8]
    1211. 00406E1C     .  8D8D 48FFFFFF    lea ecx,dword ptr ss:[ebp-B8]
    1212. 00406E22     .  50               push eax
    1213. 00406E23     .  8D95 58FFFFFF    lea edx,dword ptr ss:[ebp-A8]
    1214. 00406E29     .  51               push ecx
    1215. 00406E2A     .  52               push edx
    1216. 00406E2B     .  6A 03            push 3
    1217. 00406E2D     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>
    1218. 00406E33     .  83C4 10          add esp,10
    1219. 00406E36     .  8D85 98FEFFFF    lea eax,dword ptr ss:[ebp-168]
    1220. 00406E3C     .  8D8D A8FEFFFF    lea ecx,dword ptr ss:[ebp-158]
    1221. 00406E42     .  8D95 6CFFFFFF    lea edx,dword ptr ss:[ebp-94]
    1222. 00406E48     .  50               push eax
    1223. 00406E49     .  51               push ecx
    1224. 00406E4A     .  52               push edx
    1225. 00406E4B     .  FFD3             call ebx
    1226. 00406E4D     .^ E9 53FFFFFF      jmp Crackme2.00406DA5                          
    1227. 00406E52     >  8D85 08FFFFFF    lea eax,dword ptr ss:[ebp-F8]
    1228. 00406E58     .  8D4D 8C          lea ecx,dword ptr ss:[ebp-74]
    1229. 00406E5B     .  50               push eax
    1230. 00406E5C     .  8D95 58FFFFFF    lea edx,dword ptr ss:[ebp-A8]
    1231. 00406E62     .  BF 02000000      mov edi,2                                      ;  EDI=2
    1232. 00406E67     .  51               push ecx
    1233. 00406E68     .  52               push edx
    1234. 00406E69     .  89BD 10FFFFFF    mov dword ptr ss:[ebp-F0],edi
    1235. 00406E6F     .  89BD 08FFFFFF    mov dword ptr ss:[ebp-F8],edi
    1236. 00406E75     .  C785 20FFFFFF 12>mov dword ptr ss:[ebp-E0],12                   ;  常数,0x12
    1237. 00406E7F     .  89BD 18FFFFFF    mov dword ptr ss:[ebp-E8],edi
    1238. 00406E85     .  C785 00FFFFFF 14>mov dword ptr ss:[ebp-100],14                  ;  常数,0x14
    1239. 00406E8F     .  89BD F8FEFFFF    mov dword ptr ss:[ebp-108],edi                 ;  "7B34F71A9387A2387A22879B8850567684A8511E7B669850B978EF782A707DCB0802367685D8587FA98506A438148838"
    1240. 00406E95     .  FF15 48104000    call dword ptr ds:[<&MSVBVM60.__vbaLenVar>]    ;  获取字符串长度,0x60
    1241. 00406E9B     .  50               push eax                                      
    1242. 00406E9C     .  8D85 18FFFFFF    lea eax,dword ptr ss:[ebp-E8]
    1243. 00406EA2     .  8D8D 48FFFFFF    lea ecx,dword ptr ss:[ebp-B8]
    1244. 00406EA8     .  50               push eax
    1245. 00406EA9     .  51               push ecx
    1246. 00406EAA     .  FF15 00104000    call dword ptr ds:[<&MSVBVM60.__vbaVarSub>]    ;  0x60-0x12=0x4E(78)
    1247. 00406EB0     .  50               push eax
    1248. 00406EB1     .  8D95 F8FEFFFF    lea edx,dword ptr ss:[ebp-108]
    1249. 00406EB7     .  8D85 78FEFFFF    lea eax,dword ptr ss:[ebp-188]
    1250. 00406EBD     .  52               push edx
    1251. 00406EBE     .  8D8D 88FEFFFF    lea ecx,dword ptr ss:[ebp-178]
    1252. 00406EC4     .  50               push eax
    1253. 00406EC5     .  8D95 6CFFFFFF    lea edx,dword ptr ss:[ebp-94]
    1254. 00406ECB     .  51               push ecx
    1255. 00406ECC     .  52               push edx
    1256. 00406ECD     .  FF15 58104000    call dword ptr ds:[<&MSVBVM60.__vbaVarForInit>>
    1257. 00406ED3     >  85C0             test eax,eax
    1258. 00406ED5     .  0F84 89000000    je Crackme2.00406F64
    1259. 00406EDB     .  8D85 58FFFFFF    lea eax,dword ptr ss:[ebp-A8]
    1260. 00406EE1     .  8D8D 6CFFFFFF    lea ecx,dword ptr ss:[ebp-94]
    1261. 00406EE7     .  50               push eax
    1262. 00406EE8     .  51               push ecx
    1263. 00406EE9     .  C785 60FFFFFF 01>mov dword ptr ss:[ebp-A0],1
    1264. 00406EF3     .  89BD 58FFFFFF    mov dword ptr ss:[ebp-A8],edi
    1265. 00406EF9     .  FF15 20114000    call dword ptr ds:[<&MSVBVM60.__vbaI4Var>]     
    1266. 00406EFF     .  50               push eax                                       ;  EAX=0x14
    1267. 00406F00     .  8D55 8C          lea edx,dword ptr ss:[ebp-74]
    1268. 00406F03     .  8D85 48FFFFFF    lea eax,dword ptr ss:[ebp-B8]
    1269. 00406F09     .  52               push edx
    1270. 00406F0A     .  50               push eax
    1271. 00406F0B     .  FF15 7C104000    call dword ptr ds:[<&MSVBVM60.#632>]           ;  rtcMidCharVar,循环取字符串的字符
    1272. 00406F11     .  8D4D CC          lea ecx,dword ptr ss:[ebp-34]                  ;  从字符串第0x14(20)位起隔一位取一个字符
    1273. 00406F14     .  8D95 48FFFFFF    lea edx,dword ptr ss:[ebp-B8]                  ;  一直取到第0x60-0x12=0x4E(78)位
    1274. 00406F1A     .  51               push ecx
    1275. 00406F1B     .  8D85 38FFFFFF    lea eax,dword ptr ss:[ebp-C8]
    1276. 00406F21     .  52               push edx
    1277. 00406F22     .  50               push eax
    1278. 00406F23     .  FF15 D8104000    call dword ptr ds:[<&MSVBVM60.__vbaVarCat>]    ;  连接每次取出的字符,得到
    1279. 00406F29     .  8BD0             mov edx,eax                  ;  "27B8066481EB68098F8A0DB8266588"
    1280. 00406F2B     .  8D4D CC          lea ecx,dword ptr ss:[ebp-34]
    1281. 00406F2E     .  FFD6             call esi

    1282. F7进入00406DF2处的关键CALL-4,来到:

    1283. 00407050     $  55               push ebp
    1284. .......................................................

    1285.                      省略部分代码

    1286. .......................................................
    1287. 004070D7     .  51               push ecx
    1288. 004070D8     .  FF15 48104000    call dword ptr ds:[<&MSVBVM60.__vbaLenVar>]    ;  获取字符串"2.7"的长度,3
    1289. 004070DE     .  50               push eax
    1290. 004070DF     .  8D95 68FFFFFF    lea edx,dword ptr ss:[ebp-98]
    1291. 004070E5     .  8D85 48FFFFFF    lea eax,dword ptr ss:[ebp-B8]
    1292. 004070EB     .  52               push edx
    1293. 004070EC     .  8D8D 58FFFFFF    lea ecx,dword ptr ss:[ebp-A8]
    1294. 004070F2     .  50               push eax
    1295. 004070F3     .  8D55 CC          lea edx,dword ptr ss:[ebp-34]
    1296. 004070F6     .  51               push ecx
    1297. 004070F7     .  52               push edx
    1298. 004070F8     .  FF15 58104000    call dword ptr ds:[<&MSVBVM60.__vbaVarForInit>>
    1299. 004070FE     .  8B35 10104000    mov esi,dword ptr ds:[<&MSVBVM60.__vbaVarMove>>
    1300. 00407104     >  85C0             test eax,eax
    1301. 00407106     .  0F84 97000000    je Crackme2.004071A3
    1302. 0040710C     .  8D45 B8          lea eax,dword ptr ss:[ebp-48]
    1303. 0040710F     .  8D4D CC          lea ecx,dword ptr ss:[ebp-34]
    1304. 00407112     .  50               push eax
    1305. 00407113     .  51               push ecx
    1306. 00407114     .  C745 C0 01000000 mov dword ptr ss:[ebp-40],1
    1307. 0040711B     .  895D B8          mov dword ptr ss:[ebp-48],ebx
    1308. 0040711E     .  FF15 20114000    call dword ptr ds:[<&MSVBVM60.__vbaI4Var>]     
    1309. 00407124     .  50               push eax
    1310. 00407125     .  8D55 A8          lea edx,dword ptr ss:[ebp-58]
    1311. 00407128     .  57               push edi
    1312. 00407129     .  52               push edx
    1313. 0040712A     .  FF15 7C104000    call dword ptr ds:[<&MSVBVM60.#632>]           ;  rtcMidCharVar,循环取字符串每一位字符
    1314. 00407130     .  8D45 A8          lea eax,dword ptr ss:[ebp-58]                  ;  字符串"2.7"第一位字符"2"
    1315. 00407133     .  8D4D C8          lea ecx,dword ptr ss:[ebp-38]
    1316. 00407136     .  50               push eax
    1317. 00407137     .  51               push ecx
    1318. 00407138     .  FF15 D4104000    call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>]
    1319. 0040713E     .  50               push eax
    1320. 0040713F     .  FF15 34104000    call dword ptr ds:[<&MSVBVM60.#516>]           ;  rtcAnsiValueBstr,获取字符的ASCII值
    1321. 00407145     .  66:8945 80       mov word ptr ss:[ebp-80],ax                    ;  EAX=32("2")
    1322. 00407149     .  8D55 DC          lea edx,dword ptr ss:[ebp-24]
    1323. 0040714C     .  8D85 78FFFFFF    lea eax,dword ptr ss:[ebp-88]
    1324. 00407152     .  52               push edx
    1325. 00407153     .  8D4D 98          lea ecx,dword ptr ss:[ebp-68]
    1326. 00407156     .  50               push eax
    1327. 00407157     .  51               push ecx
    1328. 00407158     .  899D 78FFFFFF    mov dword ptr ss:[ebp-88],ebx
    1329. 0040715E     .  FF15 D8104000    call dword ptr ds:[<&MSVBVM60.__vbaVarCat>]    ;  字符连接,字符的ASCII值转为10进制数后连接
    1330. 00407164     .  8BD0             mov edx,eax                                    ;  得到504655
    1331. 00407166     .  8D4D DC          lea ecx,dword ptr ss:[ebp-24]
    1332. 00407169     .  FFD6             call esi
    1333. 0040716B     .  8D4D C8          lea ecx,dword ptr ss:[ebp-38]
    1334. 0040716E     .  FF15 50114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]   
    1335. 00407174     .  8D55 A8          lea edx,dword ptr ss:[ebp-58]
    1336. 00407177     .  8D45 B8          lea eax,dword ptr ss:[ebp-48]
    1337. 0040717A     .  52               push edx
    1338. 0040717B     .  50               push eax
    1339. 0040717C     .  53               push ebx
    1340. 0040717D     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>
    1341. 00407183     .  83C4 0C          add esp,0C
    1342. 00407186     .  8D8D 48FFFFFF    lea ecx,dword ptr ss:[ebp-B8]
    1343. 0040718C     .  8D95 58FFFFFF    lea edx,dword ptr ss:[ebp-A8]
    1344. 00407192     .  8D45 CC          lea eax,dword ptr ss:[ebp-34]
    1345. 00407195     .  51               push ecx
    1346. 00407196     .  52               push edx
    1347. 00407197     .  50               push eax
    1348. 00407198     .  FF15 48114000    call dword ptr ds:[<&MSVBVM60.__vbaVarForNext>>
    1349. 0040719E     .^ E9 61FFFFFF      jmp Crackme2.00407104
    1350. 004071A3     >  8D4D DC          lea ecx,dword ptr ss:[ebp-24]
    1351. 004071A6     .  8D55 B8          lea edx,dword ptr ss:[ebp-48]
    1352. 004071A9     .  51               push ecx
    1353. 004071AA     .  52               push edx
    1354. 004071AB     .  FF15 04114000    call dword ptr ds:[<&MSVBVM60.#573>]           ;  rtcHexVarFromVar,结果转为16进制,7B34F
    1355. 004071B1     .  8D55 B8          lea edx,dword ptr ss:[ebp-48]
    1356. 004071B4     .  8D4D DC          lea ecx,dword ptr ss:[ebp-24]
    1357. 004071B7     .  FFD6             call esi
    1358. 004071B9     .  68 13724000      push Crackme2.00407213
    1359. 004071BE     .  EB 30            jmp short Crackme2.004071F0
    1360. 004071C0     .  F645 FC 04       test byte ptr ss:[ebp-4],4
    1361. 004071C4     .  74 09            je short Crackme2.004071CF
    1362. 004071C6     .  8D4D DC          lea ecx,dword ptr ss:[ebp-24]
    1363. 004071C9     .  FF15 18104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>]   
    1364. 004071CF     >  8D4D C8          lea ecx,dword ptr ss:[ebp-38]
    1365. 004071D2     .  FF15 50114000    call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]   
    1366. 004071D8     .  8D45 98          lea eax,dword ptr ss:[ebp-68]
    1367. 004071DB     .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
    1368. 004071DE     .  50               push eax
    1369. 004071DF     .  8D55 B8          lea edx,dword ptr ss:[ebp-48]
    1370. 004071E2     .  51               push ecx
    1371. 004071E3     .  52               push edx
    1372. 004071E4     .  6A 03            push 3
    1373. 004071E6     .  FF15 28104000    call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>
    1374. 004071EC     .  83C4 10          add esp,10
    1375. 004071EF     .  C3               retn

    1376. -----------------------------------------------------------------------------------------------
    1377. 【破解总结】
    1378. 1.用户名长度最长为10,累加用户名各位字符的ASCII值,记为sum。
    1379. 2.若为sum为偶数,则对用户名进行运算后在固定字符串st1:"DYEFCGHXIJKVLAMNOPZQBRSTUWyscxdevpfgwhizjaklmbnoqrtu0123456789+/"
    1380. 中取字符,记为字符串st2。
    1381. 3.字符串st3:"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890#^$&"中的每个字符对应一个字符,记st3对应的
    1382. 字符串为st4:"B8B3D3F9C2B6C8C7C3A4F9E2D85F6C5F3C1E1F4F4C7E7A6F2A8AD3BECFB8CFEFEC",对应的数值依次为:
    1383. 0B9,8C,0B5,3D,0D6,3E,0F1,9A,0C7,2F,0B1,6B,0C4,8E,0C1,7B,0C5,3D,0A3,4B,0F8,9D,0E2,2D,0D7,8D,
    1384. 5A,0F5,6F,0C9,5D,0F9,3B,0C3,1E,0E9,1A,0F3,4E,0F4,4D,0C6,7A,0E6,7E,0A2,6A,0F7,2B,0A8,8B,0A4,
    1385. 0DA,3C,0BE,0EC,0CA,0FB,0B3,0ED,0CF,0FD,0EB,0FB,0E5,0C2。
    1386. 4.根据st2的字符在字符串st3中的位置取st4对应字符的ASCII值加上相应数值转为10进制,依次连接即为注册码。
    1387. 5.若为sum为奇数,则在用户名后连接(0x14-用户名长度)个常数0x15,然后依次取每个字符的ASCII值相乘结果记为字符串st5。
    1388. 6.依次从字符串st5每次取3个字符,取每个字符的ASCII值转为10进制数后连接再转为16进制数,连接每次所得的16进制数记为字符串st6。
    1389. 7.从字符串st6第0x14(20)位开始起隔一位取一个字符,直到取到第(st6长度-0x12)个字符,记为字符串st7.
    1390. 8.根据st7的字符在字符串st3中的位置取st4对应字符的ASCII值加上相应数值转为10进制后,依次连接即为注册码。
    1391. 一组可用注册码:
    1392. Name:hrbx
    1393. Serial:283233302113112268

    1394. 内存注册机:

    1395. 中断地址:40860D
    1396. 中断次数:1
    1397. 第一字节:89
    1398. 指令长度:3

    1399. 内存方式--->寄存器:EDX 勾选宽字符串

    1400. 暴破更改以下位置:
    1401. 004055B1         je Crackme2.004056F7                           ;  je====>NOP
    1402. 004058D7        je Crackme2.00405A62                           ;  je====>NOP

    1403. 【VB注册机源码】
    1404. 'VB 6.0+WinXP 编译通过
    1405. Private Sub Generate_Click()
    1406. Dim Name As String
    1407. Dim st1 As String
    1408. Dim st3 As String
    1409. Dim st2 As String
    1410. Dim sum, number As Integer
    1411. Dim n, n1, n2, n3, n4 As Integer
    1412. Dim length As Integer
    1413. Dim temp_num As Integer
    1414. Dim dnum1 As Double
    1415. Dim dnum2 As Double
    1416. Dim i, j As Integer
    1417. Dim str1, str2, str3, str4 As String
    1418. Dim SerialNo, Serial, Serial1, Serial2, Serial3, Serial4 As String

    1419. st1 = "DYEFCGHXIJKVLAMNOPZQBRSTUWyscxdevpfgwhizjaklmbnoqrtu0123456789+/"
    1420. st2 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890#^$&"
    1421. st3 = "B8B3D3F9C2B6C8C7C3A4F9E2D85F6C5F3C1E1F4F4C7E7A6F2A8AD3BECFB8CFEFEC"

    1422. Dim num(66) As Integer
    1423. num(0) = &HB9
    1424. num(1) = &H8C
    1425. num(2) = &HB5
    1426. num(3) = &H3D
    1427. num(4) = &HD6
    1428. num(5) = &H3E
    1429. num(6) = &HF1
    1430. num(7) = &H9A
    1431. num(8) = &HC7
    1432. num(9) = &H2F
    1433. num(10) = &HB1
    1434. num(11) = &H6B
    1435. num(12) = &HC4
    1436. num(13) = &H8E
    1437. num(14) = &HC1
    1438. num(15) = &H7B
    1439. num(16) = &HC5
    1440. num(17) = &H3D
    1441. num(18) = &HA3
    1442. num(19) = &H4B
    1443. num(20) = &HF8
    1444. num(21) = &H9D
    1445. num(22) = &HE2
    1446. num(23) = &H2D
    1447. num(24) = &HD7
    1448. num(25) = &H8D
    1449. num(26) = &H5A
    1450. num(27) = &HF5
    1451. num(28) = &H6F
    1452. num(29) = &HC9
    1453. num(30) = &H5D
    1454. num(31) = &HF9
    1455. num(32) = &H3B
    1456. num(33) = &HC3
    1457. num(34) = &H1E
    1458. num(35) = &HE9
    1459. num(36) = &H1A
    1460. num(37) = &HF3
    1461. num(38) = &H4E
    1462. num(39) = &HF4
    1463. num(40) = &H4D
    1464. num(41) = &HC6
    1465. num(42) = &H7A
    1466. num(43) = &HE6
    1467. num(44) = &H7E
    1468. num(45) = &HA2
    1469. num(46) = &H6A
    1470. num(47) = &HF7
    1471. num(48) = &H2B
    1472. num(49) = &HA8
    1473. num(50) = &H8B
    1474. num(51) = &HA4
    1475. num(52) = &HDA
    1476. num(53) = &H3C
    1477. num(54) = &HBE
    1478. num(55) = &HEC
    1479. num(56) = &HCA
    1480. num(57) = &HFB
    1481. num(58) = &HB3
    1482. num(59) = &HED
    1483. num(60) = &HCF
    1484. num(61) = &HFD
    1485. num(62) = &HEB
    1486. num(63) = &HFB
    1487. num(64) = &HE5
    1488. num(65) = &HC2

    1489. Name = Text1.Text
    1490. length = Len(Name)
    1491. If length = 0 Then Text1.Text = "Please inter at least one character !"
    1492. If length > 10 Then
    1493.    Text1.Text = "Name should less than 11 characters !"
    1494. Else

    1495. For i = 1 To length
    1496. sum = sum + Asc(Mid(Name, i, 1))
    1497. Next i

    1498. If (sum Mod 2 = 0) Then
    1499.    n = 1
    1500.    For i = 1 To length
    1501.    
    1502.      If (n <= length) Then
    1503.        str1 = Mid(Name, n, 1)
    1504.        n1 = Int(Asc(str1) / 4)
    1505.        n2 = (Asc(str1) And 3) * 16
    1506.                
    1507.        If (n + 1) <= length Then
    1508.           str2 = Mid(Name, n + 1, 1)
    1509.           n2 = Int(Asc(str2) / 16) + (Asc(str1) And 3) * 16
    1510.        End If
    1511.    
    1512.      Serial1 = Mid(st1, n1 + 1, 1)
    1513.      Serial2 = Mid(st1, n2 + 1, 1)
    1514.      Serial = Serial & Serial1 & Serial2
    1515.    
    1516.         If (n + 2) <= length Then
    1517.    
    1518.            str3 = Mid(Name, n + 2, 1)
    1519.            n3 = Int(Asc(str3) / 64) + (Asc(str2) And 15) * 4
    1520.            n4 = Asc(str3) And 63
    1521.         
    1522.            Serial3 = Mid(st1, n3 + 1, 1)
    1523.            Serial4 = Mid(st1, n4 + 1, 1)
    1524.            Serial = Serial & Serial3 & Serial4
    1525.            
    1526.         End If
    1527.       
    1528.    End If
    1529.       
    1530.    n = n + 3
    1531.    
    1532.    Next i
    1533.    
    1534. length = Len(Serial)
    1535. For i = 1 To length

    1536.     For j = 1 To 66
    1537.    
    1538.     If (Mid(Serial, i, 1) = Mid(st2, j, 1)) Then
    1539.         temp_num = Asc(Mid(st3, j, 1)) + num(j - 1)
    1540.         SerialNo = SerialNo & temp_num

    1541.     End If
    1542.    
    1543.     Next j
    1544.    
    1545. Next i

    1546. End If

    1547. If (sum Mod 2 <> 0) Then
    1548.     dnum1 = 1
    1549.     length = Len(Name)
    1550.     For i = 1 To length
    1551.         dnum1 = dnum1 * (Asc(Mid(Name, i, 1)) * i + &H14)

    1552.     Next i

    1553.     For i = length + 1 To 20
    1554.     dnum1 = dnum1 * (&H15 * i + &H14)
    1555.     Next i

    1556.     Serial = dnum1
    1557.     length = Len(Serial)
    1558.     For i = 1 To length
    1559.         Serial1 = Mid(Serial, i, 1)
    1560.         
    1561.         If i + 1 <= length Then
    1562.            Serial1 = Serial1 & Mid(Serial, i + 1, 1)
    1563.         End If

    1564.        If i + 2 <= length Then
    1565.           Serial1 = Serial1 & Mid(Serial, i + 2, 1)
    1566.        End If

    1567.        For j = 1 To Len(Serial1)
    1568.            number = Asc(Mid(Serial1, j, 1))
    1569.            Serial2 = Serial2 & number
    1570.            dnum2 = Serial2
    1571.        Next j
    1572.       
    1573.        Serial3 = Serial3 & Hex(dnum2)
    1574.        Serial2 = ""
    1575.    Next i

    1576.    length = Len(Serial3)
    1577.    For i = 20 To length - &H12 Step 2
    1578.        Serial4 = Serial4 & Mid(Serial3, i, 1)
    1579.    Next i

    1580.    length = Len(Serial4)
    1581.    For i = 1 To length
    1582.        For j = 1 To 66
    1583.            If (Mid(Serial4, i, 1) = Mid(st2, j, 1)) Then
    1584.               temp_num = Asc(Mid(st3, j, 1)) + num(j - 1)
    1585.               SerialNo = SerialNo & temp_num
    1586.            End If
    1587.       Next j
    1588.    Next i

    1589. End If

    1590. Text2 = SerialNo

    1591. End If

    1592. End Sub

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

    复制代码

    [ 本帖最后由 hrbx 于 2006-1-2 00:15 编辑 ]
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-1-2 09:51:41 | 显示全部楼层
    强啊```支持+学习了```
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-1-3 20:53:51 | 显示全部楼层
    学习了,只找到注册吗,没搞定算法,学习了,看来要加强汇编的学习啊,看破文的时候还要拿出VB函数来对照,佩服,真是我的偶像
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2019-3-25 06:30
  • 签到天数: 1096 天

    [LV.10]以坛为家III

    发表于 2006-1-4 13:44:53 | 显示全部楼层
    分析的非常好,
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-1-4 15:35:39 | 显示全部楼层
    强!高手就是高手。分析的透彻!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-5-3 21:23:32 | 显示全部楼层
    好文章,学习!!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-5-5 20:55:34 | 显示全部楼层
    好文章,不过我还看不动!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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