首页
课程
问答
CTF
社区
招聘
看雪峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
看雪峰会
看雪商城
证书查询
看雪社区
CTF对抗
发新帖
2
7
[原创]bxm CrackMe7算法简析
2007-5-14 02:04
6522
[原创]bxm CrackMe7算法简析
hawking
12
2007-5-14 02:04
6522
【文章标题】: bxm CrackMe7算法简析
【文章作者】: hawking
【作者邮箱】: [EMAIL="rich_hawking@hotmail.com"]rich_hawking@hotmail.com[/EMAIL]
【软件名称】: CrackMe.bxm.VC6.07.exe
【软件大小】: 20.0KB
【下载地址】:
http://bbs.pediy.com/showthread.php?t=44465
【加壳方式】: 无
【编写语言】: VC6
【使用工具】: OD
【操作平台】: 2k
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
看了一下bxm的第7个Crackme,感觉难度不大,而且思路很清晰,可以作为我等初入门的新手进行算法分析的好教材。
看图标就知道了程序是MFC的,运行程序,当注册码输入不正确时,有明显的提示。我们用mfcspy查看一下程序窗口,可以看到下面的信息。
message map=004022E8(CrackMe.bxm.VC6.07.exe+0022E8)
msg map entries at 004022F0(CrackMe.bxm.VC6.07.exe+0022F0)
OnMsg:WM_SYSCOMMAND(0112),func=00401430(CrackMe.bxm.VC6.07.exe+001430)
OnMsg:WM_PAINT(000f),func=004014B0(CrackMe.bxm.VC6.07.exe+0014B0)
OnMsg:WM_QUERYDRAGICON(0037),func=00401570(CrackMe.bxm.VC6.07.exe+001570)
OnCommand: notifycode=0000 id=03ea,func=
00401640
(CrackMe.bxm.VC6.07.exe+001640)
可以看出点击验证按钮后程序会从00401640处开始运行。我们直接在00401640处F2下断点,随便输入用户名及注册码,点击验证按钮后程序断下。
00401640
. 83EC 3C sub esp, 3C
00401643 . 53 push ebx
00401644 . 56 push esi
00401645 . 57 push edi
00401646 . 8BD9 mov ebx, ecx
00401648 . 6A 01 push 1
0040164A . E8 65030000 call <jmp.&MFC42.#6334> ; 取用户名和注册码
0040164F . 8B7B 64 mov edi, dword ptr [ebx+64]
00401652 . 8B47 F8 mov eax, dword ptr [edi-8] ; 注册码长度len
00401655 . 83F8 10
cmp eax, 10
00401658 . 0F85 12010000
jnz 00401770
; len必须等于16,否则失败
0040165E . 83C9 FF or ecx, FFFFFFFF
00401661 . 33C0 xor eax, eax
00401663 . F2:AE repne scas byte ptr es:[edi]
00401665 . F7D1 not ecx ; 以上4句取注册码长度 ecx结果为注册码长度+1
00401667 . 2BF9 sub edi, ecx
00401669 . 8D5424 20 lea edx, dword ptr [esp+20]
0040166D . 8BC1 mov eax, ecx
0040166F . 8BF7 mov esi, edi
00401671 . 8BFA mov edi, edx
00401673 . 6A 10 push
10
00401675 . C1E9 02 shr ecx, 2
00401678 . F3:A5 rep movs dword ptr es:[edi], dword ptr [esi]
0040167A . 8BC8 mov ecx, eax
0040167C . 83E1 03 and ecx, 3
0040167F . F3:A4 rep movs byte ptr es:[edi], byte ptr [esi] ; 以上6句从ESI向EDI复制10个字符
00401681 . 8D4C24 24 lea ecx, dword ptr [esp+24]
00401685 . 51 push ecx
00401686 . E8 45FFFFFF
call 004015D0
; 如果注册码全部为十六进制字符大写形式则返回1,否则返回0
0040168B . 83C4 08 add esp, 8
0040168E . 85C0
test eax
, eax ; 注册码必须全部为十六进制大写形式字符
00401690 . 0F84 DA000000
je 00401770
00401696 . 8B7B 60 mov edi, dword ptr [ebx+60]
00401699 . 83C9 FF or ecx, FFFFFFFF
0040169C . 33C0 xor eax, eax
0040169E . 8D5424 0C lea edx, dword ptr [esp+C]
004016A2 . F2:AE repne scas byte ptr es:[edi]
004016A4 . F7D1 not ecx ; ECX值为用户名长度+1
004016A6 . 2BF9 sub edi, ecx
004016A8 . 68 83FC0000
push 0FC83
004016AD . 8BC1 mov eax, ecx
004016AF . 8BF7 mov esi, edi
004016B1 . 8BFA mov edi, edx
004016B3 . 6A 0B
push 0B
004016B5 . C1E9 02 shr ecx, 2
004016B8 . F3:A5 rep movs dword ptr es:[edi], dword ptr [esi]
004016BA . 8BC8 mov ecx, eax
004016BC . 83E1 03 and ecx, 3
004016BF . F3:A4 rep movs byte ptr es:[edi], byte ptr [esi] ; 复制用户名字符串
004016C1 . 8D4C24 28 lea ecx, dword ptr [esp+28] ; 注册码
004016C5 . 51 push ecx
004016C6 . E8 45FFFFFF
call 00401610
; 取注册码第1--4位并转换成十六进制数字
004016CB . 83C4 04 add esp, 4
004016CE . 50 push eax
004016CF . E8 ACFEFFFF
call 00401580
; 对注册码前4位数字进行计算
004016D4 . 0FBE5424 18 movsx edx,
byte ptr [esp+18]
; 用户名第1位字符 name[0]
004016D9 . 83C4 0C add esp, 0C
004016DC . 3BC2
cmp eax, edx
004016DE . 0F85 8C000000
jnz 00401770
; 对注册码前4位数字进行计算的结果必须等于用户名的首个字符,否则失败
004016E4 . 68 83FC0000
push 0FC83
004016E9 . 8D4424 28 lea eax, dword ptr [esp+28]
004016ED . 6A 0B
push 0B
004016EF . 50
push eax
004016F0 . E8 1BFFFFFF
call 00401610
; 取注册码第5--8位并转换成十六进制数字
004016F5 . 83C4 04 add esp, 4
004016F8 . 50 push eax
004016F9 . E8 82FEFFFF
call 00401580
; 对注册码第5--8位数字进行计算
004016FE . 0FBE4C24 19 movsx ecx, byte ptr [esp+19] ; 用户名第2位字符 name[1]
00401703 . 83C4 0C add esp, 0C
00401706 . 3BC1
cmp eax, ecx
00401708 . 75 66
jnz short
00401770 ; 对注册码第5--8位数字数字进行计算的结果必须等于用户名的第2个字符,否则失败
0040170A . 68 83FC0000 push 0FC83
0040170F . 8D5424 2C lea edx, dword ptr [esp+2C]
00401713 . 6A 0B push 0B
00401715 . 52 push edx
00401716 . E8 F5FEFFFF call 00401610 ; 取注册码第9--12位并转换成十六进制数字
0040171B . 83C4 04 add esp, 4
0040171E . 50 push eax
0040171F . E8 5CFEFFFF call 00401580 ; 对注册码第9--12位数字进行计算
00401724 . 0FBE4C24 1A movsx ecx, byte ptr [esp+1A] ; 用户名第3位字符 name[2]
00401729 . 83C4 0C add esp, 0C
0040172C . 3BC1
cmp eax, ecx
0040172E . 75 40
jnz short 00401770
; 对注册码第9--12位数字进行计算的结果必须等于用户名的第3个字符,否则失败
00401730 . 68 83FC0000 push 0FC83
00401735 . 8D5424 30 lea edx, dword ptr [esp+30]
00401739 . 6A 0B push 0B
0040173B . 52 push edx
0040173C . E8 CFFEFFFF call 00401610 ; 取注册码第13--16位并转换成十六进制数字
00401741 . 83C4 04 add esp, 4
00401744 . 50 push eax
00401745 . E8 36FEFFFF call 00401580 ; 对注册码第13-16位数字进行计算
0040174A . 0FBE4C24 1B movsx ecx, byte ptr [esp+1B] ; 用户名第4位字符 name[3]
0040174F . 83C4 0C add esp, 0C
00401752 . 3BC1
cmp eax, ecx
00401754 . 75 1A
jnz short 00401770
; 对注册码第13-16位数字进行计算的结果必须等于用户名的第4个字符,否则失败
00401756 . 6A 00 push 0
00401758 . 68 38304000 push 00403038
0040175D . 68 2C304000 push 0040302C
00401762 . 8BCB mov ecx, ebx
00401764 . E8 45020000
call <jmp.&MFC42.#4224>
; 成功
00401769 . 5F pop edi
0040176A . 5E pop esi
0040176B . 5B pop ebx
0040176C . 83C4 3C add esp, 3C
0040176F . C3 retn
00401770 > 6A 00 push 0
00401772 . 6A 00 push 0
00401774 . 68 20304000 push 00403020
00401779 . 8BCB mov ecx, ebx
0040177B . E8 2E020000
call <jmp.&MFC42.#4224>
; 失败
00401780 . 5F pop edi
00401781 . 5E pop esi
00401782 . 5B pop ebx
00401783 . 83C4 3C add esp, 3C
00401786 . C3 retn
004015D0
/$ 56 push esi
004015D1 |. 57 push edi
004015D2 |. 8B7C24 10 mov edi, dword ptr [esp+10] ; 注册码长度
004015D6 |. 33D2 xor edx, edx
004015D8 |. 85FF test edi, edi ; 如果注册码长度为0的话则直接返回0
004015DA |. B8 01000000 mov eax, 1
004015DF |. 7E 25 jle short 00401606
004015E1 |. 8B7424 0C mov esi, dword ptr [esp+C]
004015E5 |> 8A0C32 /mov cl, byte ptr [edx+esi]
004015E8 |. 80F9 30 |cmp cl, 30
004015EB |. 7C 17 |jl short 00401604 ; 不能小于0
004015ED |. 80F9 46 |cmp cl, 46
004015F0 |. 7F 12 |jg short 00401604 ; 不能大于F
004015F2 |. 80F9 39 |cmp cl, 39
004015F5 |. 7E 05 |jle short 004015FC ; 小于等于9
004015F7 |. 80F9 41 |cmp cl, 41
004015FA |. 7C 08 |jl short 00401604 ; 不能小于A
004015FC |> 42 |inc edx
004015FD |. 3BD7 |cmp edx, edi
004015FF |.^ 7C E4 \jl short 004015E5
00401601 |. 5F pop edi
00401602 |. 5E pop esi
00401603 |. C3 retn ; 返回1
00401604 |> 33C0 xor eax, eax ; 返回0
00401606 |> 5F pop edi
00401607 |. 5E pop esi
00401608 \. C3 retn
00401610
/$ 8B5424 04 mov edx, dword ptr [esp+4] ; 注册码
00401614 |. 56 push esi
00401615 |. 33C0 xor eax, eax
00401617 |. BE 04000000 mov esi, 4
0040161C |> 8A0A /mov cl, byte ptr [edx] ; key[i]
0040161E |. C1E0 04 |shl eax, 4 ; eax * 10
00401621 |. 80F9 39 |cmp cl, 39
00401624 |. 0FBEC9 |movsx ecx, cl
00401627 |. 7F 05 |jg short 0040162E
00401629 |. 83E9 30 |sub ecx, 30 ; 字符转换成数字
0040162C |. EB 03 |jmp short 00401631
0040162E |> 83E9 37 |sub ecx, 37
00401631 |> 03C1 |add eax, ecx ; 累加eax
00401633 |. 42 |inc edx
00401634 |. 4E |dec esi
00401635 |.^ 75 E5 \jnz short 0040161C ; 依次取注册码中的4位字符并转换成数字
00401637 |. 5E pop esi
00401638 \. C3 retn
00401580
/$ 8B4C24 08 mov ecx, dword ptr [esp+8] ; ecx = 0B
00401584 |. 56 push esi
00401585 |. 8B7424 08 mov esi, dword ptr [esp+8] ; 4位一组的注册码转换后的数字
00401589 |. 57 push edi
0040158A |. 85C9 test ecx, ecx
0040158C |. BF 01000000 mov edi, 1 ; edi = 1
00401591 |. 74 2F je short 004015C2
00401593 |. 53 push ebx
00401594 |. 8B5C24 18 mov ebx, dword ptr [esp+18] ; 0xFC83
00401598 |> F6C1 01 /test cl, 1
0040159B |. 75 0F |jnz short 004015AC
0040159D |. 8BC6 |mov eax, esi ; cl为偶数时来这里
0040159F |. 33D2 |xor edx, edx
004015A1 |. 0FAFC6 |imul eax, esi
004015A4 |. D1E9 |shr ecx, 1 ; ecx>>1
004015A6 |. F7F3 |div ebx
004015A8 |. 8BF2 |mov esi, edx ; esi = ( esi * esi ) % 0xFC83
004015AA |. EB 0C |jmp short 004015B8
004015AC |> 8BC7 |mov eax, edi ; cl为奇数时来这里
004015AE |. 33D2 |xor edx, edx
004015B0 |. 0FAFC6 |imul eax, esi
004015B3 |. 49 |dec ecx ; ecx--
004015B4 |. F7F3 |div ebx
004015B6 |. 8BFA |mov edi, edx ; edi = ( edi * esi ) % 0FC83
004015B8 |> 85C9 |test ecx, ecx
004015BA |.^ 75 DC \jnz short 00401598 ; 如果ECX不等于0则继续循环
004015BC |. 8BC7 mov eax, edi ; 返回edi
004015BE |. 5B pop ebx
004015BF |. 5F pop edi
004015C0 |. 5E pop esi
004015C1 |. C3 retn
004015C2 |> 8BC7 mov eax, edi ; 返回1
004015C4 |. 5F pop edi
004015C5 |. 5E pop esi
004015C6 \. C3 retn
这个Crackme到这里就分析完了,这里可以看到很多常见的代码段,非常适合逆向新手仔细把玩。
给组可用的注册码:
name: hawking key : 60CF55022AE95DD6
附上一个C#版的注册机。
--------------------------------------------------------------------------------
【版权声明】: 感谢看雪论坛、一蓑烟雨, 转载请注明作者并保持文章的完整, 谢谢!
2007年05月14日 1:51:32
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
上传的附件:
bxm7keygen.rar
(4.02kb,42次下载)
收藏
・
2
免费
・
7
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
Youlor
为你点赞~
2023-11-24 00:04
伟叔叔
为你点赞~
2023-8-25 00:46
一笑人间万事
为你点赞~
2023-6-3 05:51
QinBeast
为你点赞~
2023-5-30 01:02
shinratensei
为你点赞~
2023-5-10 00:21
心游尘世外
为你点赞~
2023-5-2 03:55
飘零丶
为你点赞~
2023-4-30 00:37
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
最新回复
(
5
)
acafeel
雪 币:
333
活跃值:
(116)
能力值:
( LV9,RANK:570 )
在线值:
发帖
31
回帖
219
粉丝
1
关注
私信
acafeel
14
2007-5-14 11:48
2
楼
0
呵呵,和兄弟撞车了
厉害,很多细节都注意到了,学习!
bxm
雪 币:
461
活跃值:
(93)
能力值:
( LV9,RANK:1170 )
在线值:
发帖
41
回帖
306
粉丝
1
关注
私信
bxm
29
2007-5-14 12:28
3
楼
0
厉害啊,这么快就搞定了.
qianyicy
雪 币:
228
活跃值:
(10)
能力值:
( LV8,RANK:130 )
在线值:
发帖
18
回帖
95
粉丝
0
关注
私信
qianyicy
3
2007-5-14 22:59
4
楼
0
厉害,了解了MFC程序怎么操作了,呵呵,
大菜一号
雪 币:
424
活跃值:
(10)
能力值:
( LV9,RANK:850 )
在线值:
发帖
58
回帖
1536
粉丝
0
关注
私信
大菜一号
21
2007-5-17 09:15
5
楼
0
哇靠```
hawking兄的手脚总这么快!!
帮你顶了`
tzl
雪 币:
87
活跃值:
(1509)
能力值:
( LV9,RANK:410 )
在线值:
发帖
21
回帖
532
粉丝
0
关注
私信
tzl
10
2007-5-17 16:12
6
楼
0
分析的很精彩,学习了!
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
hawking
12
37
发帖
519
回帖
550
RANK
关注
私信
他的文章
[原创]我的 第三题crackMe 答案
3526
[求助]idapython addhotkey
7179
[活动已结束]逆转VM [X-Men: Days of VM Past]
81793
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
谁下载
×
bstzxy
liuyilin
acafeel
cdmaa
西岭秋风
bxm
playx
新手求教
gdszmai
RuShi
shanhegu
坚持到底
qianyicy
回忆罐头
我兜有糖
basherone
lixiaosi
deletex
不懂算法
janyou
anchovy
chenyan
welsao
smilecf
傻瓜爱情
shaxiaozi
wake
ggdd
hehliang
rdotzues
exportwrc
superz
看原图
赞赏
×
雪币:
+
留言:
快捷留言
返回
顶部