xhn1002 发表于 2007-9-13 15:18:09

简单的CRACKME 分析(学习笔记)

没什么目的 主要是 加入学习小组有要求
30积分的那个CRACKME是我最讨厌的VB写的
只能看50积分的那个要求 数数看就差一篇了
就去看雪 捞了个简单的CRACKME
今明两天估计要刷分到50
0045006E|.55            push    ebp
0045006F|.68 E3014500   push    004501E3
00450074|.64:FF30       push    dword ptr fs:
00450077|.64:8920       mov   dword ptr fs:, esp
0045007A|.8D45 F0       lea   eax, dword ptr
0045007D|.BA F8014500   mov   edx, 004501F8                  ;ASCII "~!@#$%^&*()_+|\=-/?.,><;:`"
00450082|.E8 213EFBFF   call    00403EA8                         ;注意上面的固定字符串
00450087|.8D45 EC       lea   eax, dword ptr
0045008A|.E8 813DFBFF   call    00403E10
0045008F|.8D55 F8       lea   edx, dword ptr
00450092|.8B45 FC       mov   eax, dword ptr
00450095|.8B80 00030000 mov   eax, dword ptr
0045009B|.E8 B8F2FDFF   call    0042F358                         ;读取用户名N
004500A0|.8B45 F8       mov   eax, dword ptr
004500A3|.E8 2840FBFF   call    004040D0
004500A8|.8945 E8       mov   dword ptr , eax
004500AB|.837D E8 04    cmp   dword ptr , 4
004500AF|.0F8C 06010000 jl      004501BB                         ;用户名位数》4
004500B5|.8D55 F4       lea   edx, dword ptr
004500B8|.8B45 FC       mov   eax, dword ptr
004500BB|.8B80 08030000 mov   eax, dword ptr
004500C1|.E8 92F2FDFF   call    0042F358                         ;读取注册码S
004500C6|.8B45 F4       mov   eax, dword ptr          ;S送EAX
004500C9|.E8 0240FBFF   call    004040D0                         ;S的位数
004500CE|.8945 E4       mov   dword ptr , eax
004500D1|.837D E4 00    cmp   dword ptr , 0
004500D5|.0F84 E0000000 je      004501BB                         ;检验S是否为空
004500DB|.8B45 E8       mov   eax, dword ptr           ;用户名位数送EAX
004500DE|.25 01000080   and   eax, 80000001                  ;位与 80000001H
004500E3|.79 05         jns   short 004500EA
004500E5|.48            dec   eax
004500E6|.83C8 FE       or      eax, FFFFFFFE
004500E9|.40            inc   eax
004500EA|>85C0          test    eax, eax
004500EC|.74 0D         je      short 004500FB
004500EE|.8D45 F8       lea   eax, dword ptr
004500F1|.BA 1C024500   mov   edx, 0045021C
004500F6|.E8 DD3FFBFF   call    004040D8
004500FB|>8B45 F8       mov   eax, dword ptr          ;N送EAX
004500FE|.E8 CD3FFBFF   call    004040D0
00450103|.8945 E8       mov   dword ptr , eax
00450106|.8B45 E8       mov   eax, dword ptr
00450109|.D1E8          shr   eax, 1                           ;N的位数右移1位
0045010B|.8945 D8       mov   dword ptr , eax
0045010E|.8B45 D8       mov   eax, dword ptr
00450111|.85C0          test    eax, eax
00450113|.0F8E 82000000 jle   0045019B
00450119|.8945 D4       mov   dword ptr , eax
0045011C|.C745 E0 01000>mov   dword ptr , 1
00450123|>33C0          /xor   eax, eax
00450125|.8945 DC       |mov   dword ptr , eax
00450128|.8B45 F8       |mov   eax, dword ptr
0045012B|.8B55 E0       |mov   edx, dword ptr
0045012E|.0FB64410 FF   |movzx   eax, byte ptr        ;N送EAX
00450133|.C1E0 02       |shl   eax, 2                        ;N[I[的ASC值左移2位
00450136|.B9 1A000000   |mov   ecx, 1A
0045013B|.33D2          |xor   edx, edx
0045013D|.F7F1          |div   ecx                           ;/1A H
0045013F|.8955 DC       |mov   dword ptr , edx         ;余数入栈
00450142|.8D45 CC       |lea   eax, dword ptr
00450145|.8B55 F0       |mov   edx, dword ptr          ;固定字符串
00450148|.8B4D DC       |mov   ecx, dword ptr
0045014B|.8A140A      |mov   dl, byte ptr           ;按余数 取固定字符串对应的数送DL
0045014E|.E8 A53EFBFF   |call    00403FF8
00450153|.8B55 CC       |mov   edx, dword ptr
00450156|.8D45 EC       |lea   eax, dword ptr
00450159|.E8 7A3FFBFF   |call    004040D8
0045015E|.8B45 F8       |mov   eax, dword ptr
00450161|.8B55 E0       |mov   edx, dword ptr
00450164|.0FB60410      |movzx   eax, byte ptr          ;N送EAX
00450168|.8D0440      |lea   eax, dword ptr
0045016B|.B9 1A000000   |mov   ecx, 1A
00450170|.33D2          |xor   edx, edx
00450172|.F7F1          |div   ecx                           ;/1A H
00450174|.8955 DC       |mov   dword ptr , edx         ;余数入栈
00450177|.8D45 C8       |lea   eax, dword ptr
0045017A|.8B55 F0       |mov   edx, dword ptr
0045017D|.8B4D DC       |mov   ecx, dword ptr
00450180|.8A140A      |mov   dl, byte ptr           ;按余数 取固定字符串对应的数送DL
00450183|.E8 703EFBFF   |call    00403FF8
00450188|.8B55 C8       |mov   edx, dword ptr
0045018B|.8D45 EC       |lea   eax, dword ptr
0045018E|.E8 453FFBFF   |call    004040D8
00450193|.FF45 E0       |inc   dword ptr
00450196|.FF4D D4       |dec   dword ptr
00450199|.^ 75 88         \jnz   short 00450123
0045019B|>8B45 EC       mov   eax, dword ptr           ;内存注册机
0045019E|.8B55 F4       mov   edx, dword ptr
004501A1|.E8 7640FBFF   call    0040421C                         ;比较CALL
004501A6|.75 13         jnz   short 004501BB                   ;爆破点
004501A8|.6A 40         push    40                               ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
004501AA|.68 20024500   push    00450220                         ; |Title = "Congratulations"
004501AF|.68 30024500   push    00450230                         ; |Text = "Good job,man!"
004501B4|.6A 00         push    0                              ; |hOwner = NULL
004501B6|.E8 E562FBFF   call    <jmp.&user32.MessageBoxA>      ; \MessageBoxA

zzage 发表于 2007-9-13 20:00:17

噢.不错的文章/...学习了~~~~还在为分析头疼啊~~/:010
页: [1]
查看完整版本: 简单的CRACKME 分析(学习笔记)