能力值:
( LV3,RANK:20 )
|
-
-
2 楼
不好意思。刚才的那个加壳了。。汗。。重新上传一份未加壳的。。。
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
6004ddsoft
1234
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
exile 大牛都来了。。。Crackme注定被破。。
这个Crackme的算法,主要是突然从某API中想到的。。。
如果加些密码学算法,然后再加线程防爆破应该会更难点。
|
能力值:
( LV6,RANK:90 )
|
-
-
5 楼
输入1234ddsoft
key :1234
没反映啊
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
这个Crackme算法非常简单,就两三步。
主要是涉及到了一些API,感觉这种方式比较新颖。
我用的操作系统是 XP SP3.
exile 的注册码也是对的。你再试试。。
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
我自己也逆向了一下,如果对API很熟的话,这个Crackme还是比较简单的。
对文件操作的那部分代码迷惑人的,当然这里也可以写些真正有用的代码。
程序有个新线程,本来想做监视用的,后来又懒得写。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
高啊,还可以根据API来
|
能力值:
( LV6,RANK:90 )
|
-
-
9 楼
我也是用的xp sp3的系统
用你给你的那组key无效~
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
算法找到了,但我的C相当的渣,写不出来算所有满足条件的注册码的程序
用户名格式:四个字符+ddsoft
注册码:全数字
用户名做如下计算:
for(a=0;a<=9;a++)
{
b=(int)name[a]+5;
_asm
{
mov eax,b;
xor eax,0x23;
and eax,0x0ff;
mov b,eax;
}
b=b+123*a;
c=b+c;
}
结果是c,然后密码乘以c如果等于7548378,就过关~
|
能力值:
( LV3,RANK:20 )
|
-
-
11 楼
楼上的算法分析是对的。源码如下:
CString name;
GetDlgItem(IDC_EDIT1)->GetWindowText(name);
int nindex=name.Find(L"ddsoft");
if (nindex<4)
{
return ;
}
TCHAR szName[256]={0};
unsigned sum=0;
for(int i=0;i<name.GetLength();i++)
{
szName[i]=((name[i]+5) ^ 0x23) & 0x00FF;
sum=sum+szName[i]+123*i;
}
HANDLE hThread=(HANDLE)_beginthreadex(NULL,0,myFunc,NULL,CREATE_SUSPENDED,NULL);
CONTEXT Context;
Context.ContextFlags=CONTEXT_FULL;
GetThreadContext(hThread,&Context);
DWORD sn=Context.Eip;
unsigned int key=GetDlgItemInt(IDC_EDIT2);
//创建一个临时文件,将大小设为187个字节
HANDLE hFile;
hFile=CreateFile(L"1.txt",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ ,
NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE,NULL);
if (hFile==INVALID_HANDLE_VALUE)
{
return ;
}
LARGE_INTEGER li;
li.QuadPart=187;
SetFilePointerEx(hFile,li,NULL,FILE_BEGIN);
SetEndOfFile(hFile);
GetFileSizeEx(hFile,&li);
CloseHandle(hFile);
if (sn==sum*key*li.QuadPart+677284027)
{
MessageBox(L"感谢你的注册!\n\n如果不是爆破,就说说算法吧!",L"提示",0x20);
}
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
谢谢楼主的cm,也拜读了楼主及楼上的分析.
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
1、这个cm有难度,它并不是每一个用户名都能生成注册码.我是采用生成注册码后再验证筛选的方法.我不明白算法F的为什么这样设计。
2、算法启用一个新建线程的上下文eip作常量参与运算,不错啊。
3、我不用sdk,用的是mfc了,所以有点大。
4、我自己没用逆向,都是楼主及楼上的现成分析。:)
|
能力值:
( LV3,RANK:20 )
|
-
-
14 楼
写得不错。注册机代码发出来参考一下。
|
能力值:
( LV3,RANK:20 )
|
-
-
15 楼
注册机原理:7548378猜成两个整数的积。A和B。B为输入的注册码。
显然根据我提供的注册码:1234可以知道,需要满足F(name)=6117即可!
将注册码固定为1234来写注册机会比较容易。
因为用户名只需要在第5位以后出现“ddsoft”字符即可。呵呵!从用户名来算注册码是不可能的。
换其他的注册码必须满足被7548378整除。
其他类似的name: XXXXddsoft1
key: 1234
PS:发这个原理出来,是想看看大家如何写注册机。谢谢。所以最好帖源码。
|
能力值:
( LV3,RANK:20 )
|
-
-
16 楼
很显然 7548378=3*2516126,
意味着即使我不公布 1234,大家也可以写其他的注册机。
将key定为3,F(name)=2516126,这样用户名会很长。
当然可以把key用程序算一算,换个大点的。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
破解这个跟操作系统的关系很大吗?
我好不容易搞出个HWID方面的crackme,
正沾沾自喜呢,...
童鞋们反映无法运行...
|
|
|