首页
社区
课程
招聘
[原创]bxm的第6个CrackMe
发表于: 2007-3-1 19:40 7824

[原创]bxm的第6个CrackMe

bxm 活跃值
29
2007-3-1 19:40
7824
难度:1
要求:找出注册码或做出注册机,爆破的不算.
  祝各位玩得愉快!

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
2
会变的,呵呵,好几天没破解过 CM 了
说明,注册码是正确的,但每次不同,不想再追下去了,引用偶像 CCD 的一句话 “珍惜生命,远离破解”
上传的附件:
  • 1.jpg (14.28kb,20次下载)
2007-3-1 21:38
0
雪    币: 309
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
我用OD载入。运行 EAX等其他的寄存器的值就在不停的变动。。。
2007-3-1 21:44
0
雪    币: 309
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
希望楼上的可以把调试过程写一下。。寄存器变动应该怎么处理
2007-3-1 21:48
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
10703
+01234
_______________
11937
我就写写看
“珍惜生命,远离破解”^_^
2007-3-1 22:18
0
雪    币: 297
活跃值: (21)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
6
1.注册码每次不同,和该进程的启动信息有关;
2.注册码共10位;
3.根据启动信息计算出一个十进制数(10位),该十进制数各位之ASCII码加上所在位数所得之ASCII码即为对应位之注册码
感觉象绕口令。。。

2007-3-2 10:16
0
雪    币: 3688
活跃值: (4242)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
7
对随机数的产生有兴趣。

跟了下,没想出来是怎么产生的。
2007-3-2 11:29
0
雪    币: 297
活跃值: (21)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
8
最初由 china 发布
对随机数的产生有兴趣。

跟了下,没想出来是怎么产生的。


是进程启动信息里面三个项的和
2007-3-2 13:12
0
雪    币: 380
活跃值: (101)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
9
00401406  call    dword ptr [<&KERNEL32.GetStartup>; \GetStartupInfoA
0040140C  mov     edx, dword ptr [esp+30]
00401410  mov     eax, dword ptr [esp+24]
00401414  mov     ebx, dword ptr [esp+20]
00401418  add     edx, eax
0040141A  add     edx, ebx
0040141C  push    0                                ; /Revert = FALSE
0040141E  mov     dword ptr [42D0C0], edx          ; |

搞不清楚
[esp+30]
[esp+24]
[esp+20]
里面是些什么东东
2007-3-2 13:28
0
雪    币: 3688
活跃值: (4242)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
10
最初由 dewar 发布
是进程启动信息里面三个项的和


这三个项是怎么取的?没看出门道来,注册机没法写,郁闷。
2007-3-2 13:52
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
11
对我这种菜鸟来说,如果真的要写注册机的话
先来个内存注册机 ,读取了这个 CALL 的数据
00401779   .  E8 687F0000   call   

然后就容易写了的很了
2007-3-2 17:54
0
雪    币: 297
活跃值: (21)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
12
写注册机估计关键在API函数GetStartupInfo上
2007-3-2 21:23
0
雪    币: 3688
活跃值: (4242)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
13
最初由 dewar 发布
写注册机估计关键在API函数GetStartupInfo上


老兄有工夫给分析下吧。

我看到这里,跟了一下就放弃了。
2007-3-2 21:56
0
雪    币: 461
活跃值: (93)
能力值: ( LV9,RANK:1170 )
在线值:
发帖
回帖
粉丝
14
最初由 KAN 发布
会变的,呵呵,好几天没破解过 CM 了

注册码不会变,当然用OD跟踪就会变了.
附两个可用的注册码:
name:bxm78
serial:8157

name:pediy.com
serial:1573<
2007-3-2 22:05
0
雪    币: 3688
活跃值: (4242)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
15
user:china
pass:938<
2007-3-2 22:12
0
雪    币: 461
活跃值: (93)
能力值: ( LV9,RANK:1170 )
在线值:
发帖
回帖
粉丝
16
最初由 china 发布
user:china
pass:938<


恭喜兄弟!
2007-3-2 22:14
0
雪    币: 3688
活跃值: (4242)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
17
最初由 bxm 发布
恭喜兄弟!


老兄一点拨,可以写机了。

随机数去掉,处理用户名就行了。

机机限制:不支持中文名,最大19位。

var
  a,b,i,l,m:Integer;
  s1,s2,s:string;
begin
  s1:=edit1.Text;
  l:=Length(s1);
  if l=0 then Exit;
  m:=20;
  a:=1;
  for i:=1 to l do
  begin
     a:=a+(ord(s1[i])*(m-i+1));
  end;

  s2:=IntToStr(a);
  b:=0;
  s:='';
  for i:=1 to Length(s2) do
  begin
    b:=Ord(s2[i])+i-1;
    s:=s+char(b);
  end;
  Edit2.text:=s;
上传的附件:
2007-3-2 22:17
0
雪    币: 242
活跃值: (1664)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
18
学习...
2007-3-2 23:13
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
19
俺明白了,幸好有你的提示
开始我错了,不要笑啊
正确的,注册机超容易写
上传的附件:
  • 2.jpg (12.22kb,10次下载)
2007-3-2 23:16
0
雪    币: 10885
活跃值: (3288)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
20
这个crackme很特别,很容易让人感觉写不出注册机.
程序应该加了异常处理吧,
od载入时,则会读取本进程STARTUPINFO 结构.
lpStartupInfo,参数结构
typedef struct _STARTUPINFO { // si
    DWORD   cb; //结构长度
    LPTSTR  lpReserved; //保留
    LPTSTR  lpDesktop; //保留
    LPTSTR  lpTitle; //如果为控制台进程则为显示的标题
    DWORD   dwX; //窗口位置...........
    DWORD   dwY; //窗口位置...........
    DWORD   dwXSize; //窗口大小
    DWORD   dwYSize; //窗口大小
    DWORD   dwXCountChars; //控制台窗口字符号宽度 .........
    DWORD   dwYCountChars; //控制台窗口字符号高度
    DWORD   dwFillAttribute; //控制台窗口填充模式
    DWORD   dwFlags; //创建标记
    WORD    wShowWindow; //窗口显示标记如同ShowWindow中的标记
    WORD    cbReserved2; //
    LPBYTE  lpReserved2; //
    HANDLE  hStdInput; //标准输入句柄
    HANDLE  hStdOutput; //标准输出句柄
    HANDLE  hStdError; //标准错误句柄
} STARTUPINFO, *LPSTARTUPINFO;
将读出的结构的第9,6,5个参数的值相加得到随机数,然后加上前面运算得到的数字,得到一个数,把该数十进制每一位加该位的序号(从0开始)得到一个数,把该数十进制表示的数转为字符串形式便是注册码.
如果单用od跟踪,而没考虑到异常的话,很难想象可以做出一个注册机.
因为:
netwind  (2007-03-02 22:42:07)
问下:
GetStartupInfo(&si);获得当前进程的STARTUPINFO 结构
如何获得指定某个进程的STARTUPINFO 结构
大牛(2007-03-02 22:43:16)
那些信息都存放在那个进程的 PEB 里。
大牛 (2007-03-02 22:43:30)
PEB 不公开的。去找些资料来看
netwind  (2007-03-02 22:44:06)
恩,谢谢了
没有其他的简单方法了吗?
大牛  (2007-03-02 22:44:17)

大牛 (2007-03-02 22:44:27)
或者说,我不知道

crackme的算法分析较容易,爆破点也很容易找到,对异常处理那块较感兴趣.
希望有人能贴出好的破文,谢谢!
这个crackme应该公布 源代码 希望如此,bxm大牛辛苦了,多谢!
2007-3-2 23:57
0
雪    币: 297
活跃值: (21)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
21
原来被bxm兄蒙蔽了
2007-3-3 08:53
0
雪    币: 461
活跃值: (93)
能力值: ( LV9,RANK:1170 )
在线值:
发帖
回帖
粉丝
22
我的源代码在附件中.
上传的附件:
2007-3-3 19:43
0
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
23
学习
2007-3-3 19:47
0
游客
登录 | 注册 方可回帖
返回
//