wbz_007 发表于 2019-8-4 21:15

160 个 CrackMe 之 004 算法分析及易语言注册机实现

本帖最后由 wbz_007 于 2019-8-4 21:34 编辑

160 个 CrackMe 之 004 算法分析及易语言注册机实现
直入正题:
这个CrackMe,输入用户名 注册码,点击没有任何反应,因为是Borland Delphi 4.0 - 5.0,我的方法直接采用,Delphi 按钮事件脚本下断,于是段在如下call(注册事件的call)



进入call,来到这里,通过跟踪后发现 没有任何有意义的代码,得到的数据不是注册码,不可用。
00457FB8/.55            push ebp
00457FB9|.8BEC          mov ebp,esp
00457FBB|.B9 04000000   mov ecx,0x4
00457FC0|>6A 00         /push 0x0
00457FC2|.6A 00         |push 0x0
00457FC4|.49            |dec ecx
00457FC5|.^ 75 F9         \jnz short CKme.00457FC0
00457FC7|.51            push ecx
00457FC8|.53            push ebx
00457FC9|.56            push esi
00457FCA|.8BF0          mov esi,eax
00457FCC|.33C0          xor eax,eax
00457FCE|.55            push ebp
00457FCF|.68 FD804500   push CKme.004580FD
00457FD4|.64:FF30       push dword ptr fs:
00457FD7|.64:8920       mov dword ptr fs:,esp
00457FDA|.33DB          xor ebx,ebx
00457FDC|>8D55 F4       /lea edx,
00457FDF|.8B86 D4020000 |mov eax,dword ptr ds:
00457FE5|.E8 5EB3FCFF   |call CKme.00423348                      ;取用户名长度
00457FEA|.8B45 F4       |mov eax,                     ;用户名给eax
00457FED|.E8 8ABBFAFF   |call CKme.00403B7C                      ;用户名长度eax
00457FF2|.83C0 1E       |add eax,0x1E                            ;用户名长度加1e 给eax
00457FF5|.8D55 F8       |lea edx,
00457FF8|.E8 07FBFAFF   |call CKme.00407B04
00457FFD|.FF75 F8       |push                         ;压入 用户名长度加 1e 的十进制值
00458000|.8D55 F0       |lea edx,
00458003|.8B86 D4020000 |mov eax,dword ptr ds:
00458009|.E8 3AB3FCFF   |call CKme.00423348
0045800E|.FF75 F0       |push                         ;msctf.754B3F35
00458011|.8D55 EC       |lea edx,
00458014|.8BC3          |mov eax,ebx
00458016|.E8 E9FAFAFF   |call CKme.00407B04
0045801B|.FF75 EC       |push
0045801E|.8D45 FC       |lea eax,
00458021|.BA 03000000   |mov edx,0x3

od 中继续往下翻,没有可用代码,于是就往上翻翻看,一定要仔细看,发现了可逆字符,但还是不是很肯定,于是就在来到如下代码,在段首下断,并且删除 按钮事件那个断点

00457C1C   .53 75 6E 20 4>ascii "Sun Bird",0   可疑字符暂时不知道是什么用处
00457C25      00            db 00
00457C26      00            db 00
00457C27      00            db 00
00457C28   .FFFFFFFF      dd FFFFFFFF
00457C2C   .0F000000      dd 0000000F
00457C30   .64 73 65 6C 6>ascii "dseloffc-012-OK",0    可疑字符,暂时不知道是什么用处
00457C40/.55            push ebp                     段首下断,删除按钮事件那个断点
00457C41|.8BEC          mov ebp,esp
00457C43|.51            push ecx
00457C44|.B9 05000000   mov ecx,0x5
00457C49|>6A 00         /push 0x0
00457C4B|.6A 00         |push 0x0
00457C4D|.49            |dec ecx
00457C4E|.^ 75 F9         \jnz short CKme.00457C49
00457C50|.51            push ecx
00457C51|.874D FC       xchg ,ecx
00457C54|.53            push ebx
00457C55|.56            push esi
00457C56|.8BD8          mov ebx,eax
00457C58|.33C0          xor eax,eax
00457C5A|.55            push ebp
00457C5B|.68 3D7E4500   push CKme.00457E3D
00457C60|.64:FF30       push dword ptr fs:
00457C63|.64:8920       mov dword ptr fs:,esp
00457C66|.8BB3 F8020000 mov esi,dword ptr ds:         ;用户名长度给esi
00457C6C|.83C6 05       add esi,0x5                              ;esi=用户名长度加5
00457C6F|.FFB3 10030000 push dword ptr ds:            ;压入字符串 黑头Sun Bird
00457C75|.8D55 F8       lea edx,
00457C78|.8BC6          mov eax,esi                              ;eax=esi 用户名长度加5
00457C7A|.E8 85FEFAFF   call CKme.00407B04
00457C7F|.FF75 F8       push                            ;取用户名长度 加 5
00457C82|.FFB3 14030000 push dword ptr ds:            ;压入字符串 dseloffc-012-OK
00457C88|.8D55 F4       lea edx,
00457C8B|.8B83 D4020000 mov eax,dword ptr ds:
00457C91|.E8 B2B6FCFF   call CKme.00423348                     ;取用户名长度
00457C96|.FF75 F4       push                            ;压入用户名用户名
00457C99|.8D83 18030000 lea eax,dword ptr ds:
00457C9F|.BA 04000000   mov edx,0x4
00457CA4|.E8 93BFFAFF   call CKme.00403C3C
00457CA9|.33D2          xor edx,edx
00457CAB|.8B83 F4020000 mov eax,dword ptr ds:
00457CB1|.E8 AAB5FCFF   call CKme.00423260
00457CB6|.8B93 18030000 mov edx,dword ptr ds:         ;得到的字符串给edx黑头Sun Bird12dseloffc-012-OKwbz_007,可疑字符串出现,验证注册成功
00457CBC|.8B83 F4020000 mov eax,dword ptr ds:
00457CC2|.E8 B1B6FCFF   call CKme.00423378
00457CC7|.33F6          xor esi,esi                              ;esi 清零
00457CC9|>8D55 EC       /lea edx,
00457CCC|.8B83 D4020000 |mov eax,dword ptr ds:
00457CD2|.E8 71B6FCFF   |call CKme.00423348                      ;取用户名长度
00457CD7|.8B45 EC       |mov eax,                     ;用户名给eax
00457CDA|.E8 9DBEFAFF   |call CKme.00403B7C
00457CDF|.83C0 03       |add eax,0x3                           ;用户名长度加3
00457CE2|.8D55 F0       |lea edx,
00457CE5|.E8 1AFEFAFF   |call CKme.00407B04
00457CEA|.FF75 F0       |push                         ;msctf.754B3F35
00457CED|.8D55 E8       |lea edx,
00457CF0|.8B83 D4020000 |mov eax,dword ptr ds:
00457CF6|.E8 4DB6FCFF   |call CKme.00423348
00457CFB|.FF75 E8       |push
00457CFE|.8D55 E4       |lea edx,
00457D01|.8BC6          |mov eax,esi
00457D03|.E8 FCFDFAFF   |call CKme.00407B04
00457D08|.FF75 E4       |push
00457D0B|.8D45 FC       |lea eax,
00457D0E|.BA 03000000   |mov edx,0x3
00457D13|.E8 24BFFAFF   |call CKme.00403C3C
00457D18|.46            |inc esi
00457D19|.83FE 13       |cmp esi,0x13
00457D1C|.^ 75 AB         \jnz short CKme.00457CC9
00457D1E|.8D55 E0       lea edx,
00457D21|.8B83 D8020000 mov eax,dword ptr ds:         ;CKme.004132A4
00457D27|.E8 1CB6FCFF   call CKme.00423348
00457D2C|.8B45 E0       mov eax,                        ;假码给eax
00457D2F|.8B93 18030000 mov edx,dword ptr ds:         ;真码黑头Sun Bird12dseloffc-012-OKwbz_007给edx
00457D35|.E8 52BFFAFF   call CKme.00403C8C                     ;比较call
00457D3A|.75 0A         jnz short CKme.00457D46                  ;不等就挂了也是爆破点
00457D3C|.C783 0C030000>mov dword ptr ds:,0x3E
00457D46|>8B83 0C030000 mov eax,dword ptr ds:
00457D4C|.83C0 10       add eax,0x10

算法很简单:黑头Sun Bird(作者预设字符串)+用户名长度加5+dseloffc-012-OK(作者预设字符串)+用户名
易语言实现注册机,很简单

不知道什么原因,这个程序注册码复制进去不行,比须要手动键盘输入一些,键盘输入才可以出发注册效果,而且点击注册,需要多点击几次







马甲 发表于 2019-8-4 21:27

楼主一直更新吗?想看全部的crackme

wbz_007 发表于 2019-8-4 21:28

马甲 发表于 2019-8-4 21:27
楼主一直更新吗?想看全部的crackme

有些太过去简单,找一些有意思更新
页: [1]
查看完整版本: 160 个 CrackMe 之 004 算法分析及易语言注册机实现