首页
社区
课程
招聘
"一个crackme的算法分析bos3.exe "我有点搞不懂
发表于: 2010-5-21 13:05 3485

"一个crackme的算法分析bos3.exe "我有点搞不懂

2010-5-21 13:05
3485
我是小菜。。看了“爱在天涯”后的破文后我很有感触,所以也想自己搞算法
但是今天遇到了好好学习2写的 "一个crackme的算法分析bos3.exe  "

地址是:http://bbs.pediy.com/showthread.php?threadid=10406

我真的看得是云里雾里~~不管怎么跟就是没看到一点关键的地方~~
  只知道CM取了我的用户名计算,但是根本没看见密码的计算地方~
我希望有人能帮帮我这个菜鸟~~
   我也是真的努力了~~不懂才来问的·

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己顶下~~
2010-5-21 18:54
0
雪    币: 622
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不要浮躁 看到取注册名 就开始一点一点分析了 一直到比较判断
2010-5-23 17:12
0
雪    币: 333
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
帖子写的很详细,不过也是很值得分析的,必须有耐心。
0046C729   .  E8 02F6FFFF   call    0046BD30                       ;  计算
跟进call
0046BDC5  |.  8B45 E8       |mov     eax, dword ptr [ebp-18]       ;  三位三位取
0046BDC8  |.  E8 ABC6F9FF   |call    00408478                      ;  792算出318
跟进CALL看怎么算出318
00402DAE  |>  80EB 30       /sub     bl, 30                        ;  取出来的三位的第一位减30,如果是数字,比如7,ASCII值37减去30正好是7; Default case of switch 00402D83
00402DB1  |. |80FB 09       |cmp     bl, 9
00402DB4  |. |77 25         |ja      short 00402DDB
00402DB6  |. |39F8          |cmp     eax, edi
00402DB8  |. |77 21         |ja      short 00402DDB
00402DBA  |. |8D0480        |lea     eax, dword ptr [eax+eax*4]    ;  初始eax为0
00402DBD  |. |01C0          |add     eax, eax                      ;  自身相加也就是*2
00402DBF  |. |01D8          |add     eax, ebx                      ;  与ebx相加,也就是上面的bl,具体说就是7
00402DC1  |. |8A1E          |mov     bl, byte ptr [esi]            ;  取出来的三位的第二位放入bl
00402DC3  |. |46            |inc     esi
00402DC4  |. |84DB          |test    bl, bl
00402DC6  |.^\75 E6         \jnz     short 00402DAE                ;  跳上去循环
这样就是帖子上的了
第一次(0+0*4)*2+7=7
第二次(7+7*4)*2+9=4F
第三次(4F+4F*4)*2+2=318
运算出call,到
0046BDF0  |.  3345 E0       |xor     eax, dword ptr [ebp-20]       ;  算出的318与b的ASCII值XOR
0046BDF3  |.  8945 DC       |mov     dword ptr [ebp-24], eax       ;  37A
其余的一样,
第一次是用户名密码计算,然后在下面与zzh比较
0046C729   .  E8 02F6FFFF   call    0046BD30                       ;  计算

0046C766   .  BA 38CA4600   mov     edx, 0046CA38                  ;  zzh
0046C76B   .  E8 147DF9FF   call    00404484                             ;比较
第二次是序列号密码计算,然后在下面与序列号比较
0046C7BB   .  E8 70F5FFFF   call    0046BD30                       ;  计算

0046C7DA   .  8B55 C4       mov     edx, dword ptr [ebp-3C]        ;  序列号放入

0046C7DE   .  E8 A17CF9FF   call    00404484                            ;序列号密码计算结果与序列号比较

其实唯一的困难就是怎么确定是哪三个数运算完末两位符合要求
倒推能推出末两位,但是三个数要算出来末两位和要求的还得稍微分析找出规律,希望对你有帮助。
2010-5-24 00:51
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
取到用户名会存放到内存中
对该段内存下访问断点
总会跟到算法的地方去
2010-5-26 20:40
0
雪    币: 24
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哈哈,,谢谢了,,在看雪真的是获益匪浅哦
2010-5-27 00:01
0
游客
登录 | 注册 方可回帖
返回
//