能力值:
( LV9,RANK:250 )
2 楼
会变的,呵呵,好几天没破解过 CM 了
说明,注册码是正确的,但每次不同,不想再追下去了,引用偶像 CCD 的一句话 “珍惜生命,远离破解”
上传的附件:
能力值:
( LV4,RANK:50 )
3 楼
我用OD载入。运行 EAX等其他的寄存器的值就在不停的变动。。。
能力值:
( LV4,RANK:50 )
4 楼
希望楼上的可以把调试过程写一下。。寄存器变动应该怎么处理
能力值:
( LV9,RANK:250 )
5 楼
10703
+01234
_______________
11937
我就写写看
“珍惜生命,远离破解”^_^
能力值:
( LV9,RANK:330 )
6 楼
1.注册码每次不同,和该进程的启动信息有关;
2.注册码共10位;
3.根据启动信息计算出一个十进制数(10位),该十进制数各位之ASCII码加上所在位数所得之ASCII码即为对应位之注册码
感觉象绕口令。。。
能力值:
(RANK:215 )
7 楼
对随机数的产生有兴趣。
跟了下,没想出来是怎么产生的。
能力值:
( LV9,RANK:330 )
8 楼
最初由 china 发布 对随机数的产生有兴趣。 跟了下,没想出来是怎么产生的。
是进程启动信息里面三个项的和
能力值:
( 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]
里面是些什么东东
能力值:
(RANK:215 )
10 楼
最初由 dewar 发布 是进程启动信息里面三个项的和
这三个项是怎么取的?没看出门道来,注册机没法写,郁闷。
能力值:
( LV9,RANK:250 )
11 楼
对我这种菜鸟来说,如果真的要写注册机的话
先来个内存注册机 ,读取了这个 CALL 的数据
00401779 . E8 687F0000 call
然后就容易写了的很了
能力值:
( LV9,RANK:330 )
12 楼
写注册机估计关键在API函数GetStartupInfo上
能力值:
(RANK:215 )
13 楼
最初由 dewar 发布 写注册机估计关键在API函数GetStartupInfo上
老兄有工夫给分析下吧。
我看到这里,跟了一下就放弃了。
能力值:
( LV9,RANK:1170 )
14 楼
最初由 KAN 发布 会变的,呵呵,好几天没破解过 CM 了
注册码不会变,当然用OD跟踪就会变了.
附两个可用的注册码:
name:bxm78
serial:8157
name:pediy.com
serial:1573<
能力值:
(RANK:215 )
15 楼
user:china
pass:938<
能力值:
( LV9,RANK:1170 )
16 楼
最初由 china 发布 user:china pass:938<
恭喜兄弟!
能力值:
(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;
上传的附件:
能力值:
( LV9,RANK:410 )
18 楼
学习...
能力值:
( LV9,RANK:250 )
19 楼
俺明白了,幸好有你的提示
开始我错了,不要笑啊
正确的,注册机超容易写
上传的附件:
能力值:
(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大牛辛苦了,多谢!
能力值:
( LV9,RANK:330 )
21 楼
能力值:
( LV9,RANK:1170 )
22 楼
能力值:
(RANK:550 )
23 楼
学习