能力值:
(RANK:680 )
26 楼
膜拜ccfer, 膜拜海风.
第一次知道这种新式的穷举(对我来说是新式
), 总之获益匪浅.
能力值:
( LV13,RANK:350 )
27 楼
谢谢海风月影大虾 学习了
能力值:
(RANK:680 )
28 楼
海风牛第一次放的附件中的CM被修改了, 导致注入后无法穷举. GetDlgItemTextA和MessageBoxA的调用被nop了, 呵呵. 所以之前下的朋友到1楼下载.
能力值:
( LV9,RANK:180 )
29 楼
膜拜所有人.
能力值:
(RANK:1130 )
30 楼
第一个附件我放错了。。。。新的附件才是正确的,直接注入到1楼的原版cm里面即可
能力值:
( LV9,RANK:180 )
31 楼
jackozoo这个画面好像曾经看过
能力值:
( LV6,RANK:90 )
32 楼
卡卡? 杀很大?
能力值:
(RANK:680 )
33 楼
s大指的画面是什么? CM头像是一支球队的合影.
能力值:
( LV9,RANK:180 )
34 楼
这个CM的足球图像
能力值:
( LV6,RANK:90 )
35 楼
我也玩玩:
name: cutesnail
Serial: xjkvhmzro
能力值:
( LV15,RANK:2473 )
36 楼
2000下不能运行的原因:
1. 进入DialogProc后的ebx不一定是0
2. MessageBoxA函数入口地址不能随便+2
能力值:
( LV6,RANK:90 )
37 楼
能力值:
( LV2,RANK:10 )
38 楼
学习论坛里的牛人方法。。。
能力值:
( LV6,RANK:90 )
39 楼
procedure TForm1.BitBtnCountClick(Sender: PObj);
var
i,j : Integer;
Regname, RegCode : string;
const
key : string = 'zyxwvutsrqponmlkjihgfedcba';
begin
if (Length( editBox1.text )<4) or (EditBox1.Text = 'name must more than 3 !')
then begin
EditBox1.Text := 'name must more than 3 !';
EditBox2.Text := 'name must more than 3 !';
Exit;
end;
Regname := editBox1.text;
RegCode := '';
for i := 1 to Length(Regname) do
begin
j := ord(regname[i]) - 97;
regcode := regcode + key[j+1];
end;
RegCode := Copy(RegCode,1,1) + 'jk' + Copy(RegCode,4,Length(Regname)-3);
EditBox2.Text := regcode;
end;
能力值:
(RANK:1130 )
40 楼
我是来膜拜的
VM无法挡住你进攻的步伐
BTW:幸好我没用VM
能力值:
( LV9,RANK:180 )
41 楼
CS明天要大开杀戒了
能力值:
( LV6,RANK:90 )
42 楼
明天我的参赛cm就要被放出来了,希望能够多坚持一会儿~
能力值:
(RANK:680 )
43 楼
用你的注册机试试这个注册名:
wqertywvdgr
能力值:
( LV6,RANK:90 )
44 楼
注册名长度大于9位的猜不出来了
能力值:
(RANK:1130 )
45 楼
ccfer太强大了,更新一下我的a.c
上传的附件:
能力值:
(RANK:680 )
46 楼
的确, 这样速度快了不止一个数量级 .
ccfer太强大了...
能力值:
(RANK:1130 )
47 楼
算不出9位以上的name
太难了
能力值:
( LV15,RANK:2473 )
48 楼
不用注入,改成exe更方便一些
#include <windows.h>
DWORD Base;
BOOL check(char *name, char *key)
{
DWORD a = Base + 0x227B0;
DWORD b = Base + 0x22814;
DWORD c = Base + 0xF168;
DWORD d = Base + 0x2B80;
BOOL r = 0;
strcpy((char *)a, name);
strcpy((char *)b, key);
__asm
{
xor ebx, ebx;
mov ecx, a;
push c;
push offset _out;
push d;
retn;
_out:
mov r, eax;
}
return r;
}
#define MAX_CHAR 100
char wantname[MAX_CHAR] = "wqertywvdgr";
char name[MAX_CHAR];
char key[MAX_CHAR];
__declspec(dllexport) void aaaa()
{
int len = strlen(wantname);
int i;
char cc;
memset(name, 0, MAX_CHAR);
memset(key, 0, MAX_CHAR);
strcpy(name, "feng");
strcpy(key, "ujkt");
for(i = 0; i < len; i++) //name
{
name[i] = wantname[i];
for(cc = 'a'; cc < 'z'; cc++)
{
key[i] = cc;
if(check(name, key))
{
MessageBox(NULL, name, key, NULL);
break;
}
}
}
MessageBox(NULL, name, key, NULL);
return;
}
int main(int argc, char* argv[])
{
DWORD dwProt;
LPDWORD x;
int i;
Base = (DWORD)LoadLibraryEx("ZooCMa.exe", NULL, DONT_RESOLVE_DLL_REFERENCES);
VirtualProtect((LPVOID)Base,0x9000,PAGE_EXECUTE_READWRITE,&dwProt);
*(DWORD *)(Base+0x2BE6) += Base-0x400000;
x = *(LPDWORD *)(Base+0x2BE6);
for (i=0;i<0x3B;i++)
{
x[i] += Base-0x400000;
}
aaaa();
}
能力值:
( LV12,RANK:1000 )
49 楼
前面有人写了个注册机,其实从已有的3组序列号就能猜出来算法,根本不需要调试。况且高人都用穷举的办法,我等晚辈就不再浪费光阴了。ccfer大侠借用crackme的算法call穷举,猜出来的可能性不是很大。原因可能是1、crackme就没有计算大于9位注册码的功能;2、计算时间不能忍受。
楼上的大侠写的程序可能有些人看不懂,简单注释一下:
思路就是借用crackme的算法call来穷举,技巧就是下面的一段代码
BOOL check(char *name, char *key)
{
DWORD a = Base + 0x227B0; //得到的用户名的地址
DWORD b = Base + 0x22814; //得到的注册名的地址
DWORD c = Base + 0xF168; //算法call入口参数 如果修改会影响call中执行流程,报错
DWORD d = Base + 0x2B80; //算法call入口地址
BOOL r = 0;
strcpy((char *)a, name);
strcpy((char *)b, key);
__asm
{
xor ebx, ebx;
mov ecx, a;
push c; //004010FB |. 68 68F14000 PUSH ZooCMa.0040F168
push offset _out; //为从creakme返回提前放入后面指令的地址
push d; // 这两句模拟 CALL ZooCMa.00402B80 执行creakme的代码,执行完后跳到_out处继续
retn;
_out:
mov r, eax;
}
return r;
} if (check(name, key)) then MessageBox(NULL, name, key, NULL);
// 模拟 00401100 |. E8 7B1A0000 CALL ZooCMa.00402B80
//00401105 |. 83F8 01 CMP EAX,1
可能还没有人手工调试出算法。 楼主能否给个 tianyilove 的注册?只是超过9位,本人水平有限,无法得知。
能力值:
( LV2,RANK:10 )
50 楼
不懂