首页
社区
课程
招聘
[原创]一简单算法PbCrackME#1
发表于: 2009-2-7 11:27 5223

[原创]一简单算法PbCrackME#1

2009-2-7 11:27
5223
算法很简单,爆破找码都算数!

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 201
活跃值: (269)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
2
学习下。,,
上传的附件:
2009-2-7 14:22
0
雪    币: 208
活跃值: (376)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
3
0040C329   . /0F85 4F030000 jnz     0040C67E
上传的附件:
2009-2-7 15:07
0
雪    币: 171
活跃值: (92)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谁出个教程吧
学习一下
2009-2-12 09:55
0
雪    币: 268
活跃值: (95)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
0040C254        E8 521E0000     CALL PbCrackM.0040E0AB

bp SendMessageA 两次断后ALT+F9返回跟下,注册码就出来了。明码比较。
2009-2-13 13:25
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
6
楼主的重点是对断点的防御。

没有防御CTRL+N。

我还有一招。

这两天正总结、整理断点方面的理论体系,拿这个CRACK ME测试了两天,还触发了灵感,又挖掘出一个断点法。还设想了一个对付重启验证的断点法,有待实践检验。

呵呵,收获颇丰啊。
2009-2-22 19:11
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
7
  我只能追出注册码,却不能分析它的算法,下断后返回得到的好像是数据段的数字定义。
  作者能给出源码么?而且用PEID也看不出是用什么语言编写的,有点好奇。
上传的附件:
2009-3-18 21:02
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
8
现在发现,要想最快找到答案,还是得自己研究啊,高手们一般都没时间来回答我等小菜提出的问题啊!
    经过仔细追踪,发现了算法部分,现分析如下,并给出注册算法:

0040B96E  |.  8B75 08       mov     esi, dword ptr [ebp+8]           ;  取用户名
0040B971  |.  8B4D 0C       mov     ecx, dword ptr [ebp+C]           ;  取用户名的长度n
0040B974  |.  8B45 10       mov     eax, dword ptr [ebp+10]          ;  EAX=0
0040B977  |.  BF 93010001   mov     edi, 1000193
0040B97C  |.  33DB          xor     ebx, ebx
0040B97E  |>  F7E7          /mul     edi                             ;  eax*=100193h
0040B980  |.  8A1E          |mov     bl, byte ptr [esi]              ;  username[i]
0040B982  |.  33C3          |xor     eax, ebx                        ;  eax^=username[i]
0040B984  |.  46            |inc     esi                             ;  i++
0040B985  |.  49            |dec     ecx                             ;  n--
0040B986  |.^ 0F85 F2FFFFFF \jnz     0040B97E
0040B98C  |.  8985 68FFFFFF mov     dword ptr [ebp-98], eax

上面的算法应该很简单,用C++描述一下如下:
ULONG64 x = 0;
for(int i=0; i<m_s1.GetLength();i++)
{
        x = (x*0x1000193)^m_s1.GetAt(i);
}
这个x,就是程序计算到的注册码,只不过将它字串化了。
上传的附件:
2009-3-19 14:12
0
游客
登录 | 注册 方可回帖
返回
//