能力值:
( LV2,RANK:10 )
|
-
-
26 楼
14L的够仔细
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
试试看有结果mi
|
能力值:
( LV2,RANK:10 )
|
-
-
28 楼
疯了,弄不出来
|
能力值:
( LV2,RANK:10 )
|
-
-
29 楼
今天好爽,终于靠自已的力量找到了一个注册号12343618
我是先用12345678来做试验,后来改了两个数字
|
能力值:
( LV2,RANK:10 )
|
-
-
30 楼
00401C1C E8 DFFBFFFF call 00401800 ; \cm1.00401800
變為
00401C1C 90 nop ; \cm1.00401800
00401C1D 90 nop
00401C1E 90 nop
00401C1F 90 nop
00401C20 90 nop
|
能力值:
(RANK:520 )
|
-
-
31 楼
void fun2(char *p,char *q)
{
_asm{
nop
nop
push eax
xor eax,eax
call next
next:
pop eax
push edi
lea edi,[eax+4]
pop eax
pop edi
}
int i=0;
while(i<6&&(r[i]<r[i+1]))i++;
if(i!=6)
{
strncpy(p,q,4);
}
else strncpy(p,r+6,4);
char *name="I am tired ,how about you?";
char *key2="XBBF";
_asm{
push eax
lea eax,name
push eax
push key2
pop eax
pop eax
pop eax
}
}
void c_change(char *c1,char *c2)
{
char t;
t=*c1;
*c1=*c2;
*c2=t;
}
void fun1(char *s1,char *s2)
{
char ch_code[20]="ABCDEF";
char temp[8];
char s_code[40];
int i=1,len=0;
while((s2[i]-'0')>=0&&(s2[i]-'0')<=9)i++;
if(i<7)
{
AfxMessageBox("wrong key!");
HANDLE proc=GetCurrentProcess();
TerminateProcess(proc,0);
}
i=strlen(ch_code)-1;
while(len<=20)
{
s_code[len]=ch_code[i--]+3;
len+=4;
}
i=strlen(ch_code)-1;
len=1;
if(strlen(s2)>16)
{
AfxMessageBox("key string too long!");
HANDLE proc=GetCurrentProcess();
TerminateProcess(proc,0);
}
char *p1=s1+8;
while(len<=21)
{
s_code[len]=ch_code[i--]+3;
len+=4;
}
i=strlen(ch_code)-1;
len=2;
strncpy(temp,p1,4);
while(len<=22)
{
s_code[len]=ch_code[i--]+3;
len+=4;
}
i=strlen(ch_code)-1;
len=3;
char *p2=s1+12;
strcpy(s1,s2);
while(len<=23)
{
s_code[len]=ch_code[i--]+3;
len+=4;
}
*(ULONG *)p1=*(ULONG *)temp;
char value;
value=s_code[4];
int k=6;
i=1;
while(i!=k+1)
c_change(&s_code[((s2[i++]-1)-'0')*4+i-1],&s_code[((s2[k--]-1)-'0')*4]);
if(s_code[0]>s_code[1])
{
AfxMessageBox("wrong key!");
HANDLE proc=GetCurrentProcess();
TerminateProcess(proc,0);
}
else
if(s_code[0]>s_code[4])
{
*(ULONG *)p2=(ULONG )fun2;
return;
}
else if(s_code[8]>s_code[14])
{
AfxMessageBox("wrong key!");
HANDLE proc=GetCurrentProcess();
TerminateProcess(proc,0);
}
i=0;
k=0;
while(k<3)
{
r[k++]=s_code[i];
i+=4;
}
i=14;
while(k<6)
{
r[k++]=s_code[i];
i+=3;
}
while(k<10)
r[k++]=*(ULONG *)p2++;
fun2(p2,(char *)fun2);
}
void CCmDlg::OnOK()
{
// TODO: Add extra validation here
GetDlgItem(IDC_EDIT1)->GetWindowText(m_edit1);
char *key=m_edit1.GetBuffer(m_edit1.GetLength());
char buf[8];
if(strlen(key)==0)
{
MessageBox("please enter the key!");
return;
}
fun1(buf,key);
MessageBox("Congratulations!you win!");
}
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
好变态的。。。 爆破了。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
33 楼
在OllyICE中调试反汇编入下代码段:
00401800 55 push ebp ; 加密函数入口, 0012f860返回地址
...
00401BA9 C3 retn 针对这个关键部分,简单的写了一些伪代码如下:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Hello, world\n");
return 0;
}
static const char EBP_C[] = "ABCDEF\0\0";
//EBP_A8="P1g" key="1234567"
void fun(char* key, char* EBP_A8)
{
int i48 = 1;
int i4c = 0;
char EBP_14[] = "ABCDEF\0\0\0\0";
char EBP_44[24];
do{
if((key[i48] - '0')>0)//以\0结束
{
if((key[i48] - '0')>9)
{
i48 += 1;
continue;
}
}
break;
}while(1);
//是否包含开头连续7位数字?
if(i48 < 0x7)
{
AfxMessgeBox("wrong key");
exit(0);
}
i48 = (strlen(EBP_14) - 1);//=5
//执行后:EBP_44 = "F---E---D---C---B---A---";
while(i4c < 0x14)
{
EBP_44[i4c] = EBP_14[i48] + 3;
i48 -=1;
i4c += 4;
}
i48 = (strlen(EBP_14) - 1);//5
i4c = 1;
if(strlen(key) > 10)
{
AfxMessgeBox("key too long");
exit(0);
}
char* EBP_58 = EBP_A8 +8; // == KEY
//执行后:EBP_44 = "FF--EE--DD--CC--BB--AA--";
while(i4c <= 0x15)
{
EBP_44[i4c] = EBP_14[i48] + 3;
i48 -=1;
i4c += 4;
}
i48 = (strlen(EBP_14) - 1);
i4c = 2;
char EBP_1C[XX];
strncpy(EBP_1C, EBP_58, 4);//COPY key to ESP-IC
//执行后:EBP_44 = "FFF-EEE-DDD-CCC-BBB-AAA-";
while(i4c <= 0x16)
{
EBP_44[i4c] = EBP_14[i48] + 3;
i48 -=1;
i4c += 4;
}
i48 = (strlen(EBP_14) - 1);//=5
i4c = 3;
char* EBP_5C = EBP_A8 + 0xC;//保存函数返回地址
strcpy(EBP_A8, key);// COPY key TO EBP+A8
//执行后:EBP_44 = "FFFFEEEEDDDDCCCCBBBBAAAA"; 6*4=24 <44----C8>
while(i4c <= 0x17)
{
EBP_44[i4c] = EBP_14[i48] + 3;
i48 -=1;
i4c += 4;
}
EBP_58 = EBP_1C;//KEY=KEY, 重新指向新的KEY地址
char EBP_60 = EBP_44[EBP_44.length - 4]; //='A'
int i64 = 6;
i48 = 1;
//IIII HHHH GGGG FFFF EEEE DDDD
//IIII 0xBC HHH GGGG FFFF EEEE DDDD H when i64=6;
//IIII 0xBC HHH GDGG FFFF EEEE GDDD H when i64=5;
//IIII 0xBC HHH GDGG FFEF FEEE GDDD H when i64=4;
do{
if((i64 + 1) != i48)//i64循环6,5,4然后跳出循环
{
char* EBP_70 = (ebp + key[i64]*4-0x108);//= ebp + 4*('7'-'B'), '7'-'B' = 11, '6'-'B'=12
int tmp = i48+ key[i48]*4 -0xc4;//= i48 + 4*(key[i48]-'1'), when key[i48]='2'
char* EBP_74 = EBP_44[tmp+1];
i48 += 1;
i64 -= 1;
CALL_4017D0(EBP_74, EBP_70);//交换这两个地址指向的值
continue;
}
break;
}while(1);
if(EBP_44[0] > EBP_44[1])
{
AfxMessageBox("wrong key");
exit(0);
}
if(EBP_44[0] <= EBP_44[4])
{
if(EBP_44[8] > EBP_44[14])
{
AfxMessageBox("wrong key");
exit(0);
}
}else{
//????????????????
&EBP_5C = 0x401730;
return;
}
int i48 = 0;
int i64 = 0;
while(i64 < 3)
{
[i64 + 4040EC] = EBP_44[i48];
i64 += 1;
i48 += 3;
}
i48 = 0x0E;
while (i64 < 6)
{
[i64 + 4040EC] = EBP_44[i48];
i64 += 1;
i48 += 3;
}
while (i64 < 0xOA)
{
[i64 + 4040EC] = EBP_44[i5c];
i64 += 1;
i5c += 3;
}
CALL_401730(&EBP_5c, &CALL_401730);//????????????
}
void CALL_401730(char *p5c, const char * pFun)
{
int EBP_4 = 0;
while(EBP_4 < 6)
{
if( *[EBP_4 + 0x4040EC] >= *[EBP_4 + 0x4040ED])
{
break;
}
EBP_4 += 1;
}
if(EBP_4 != 6)
{
strncpy(p5c, pFun, 4);
}else{
strncpy(p5c, 0x4040F2, 4);
}
AfxMessageBox("Sorry, i'm tired");
return ;
}
//交换地址 返回 C8, B4
void CALL_4017D0(char *EBP_74, char *EBP_70)
{
char* EBP_4 = EBP_74;
char* TMP = EBP_74;
EBP_4 = EBP_70;
EBP_74 = EBP_4;
EBP_70 = TMP;
}
|
能力值:
(RANK:520 )
|
-
-
34 楼
很不错,学习!
|
能力值:
( LV2,RANK:10 )
|
-
-
35 楼
羞愧, 搂主都把代码贴出来, 我还来献丑...............
|
能力值:
( LV2,RANK:10 )
|
-
-
36 楼
呵呵,挺有意思的
|
能力值:
( LV2,RANK:10 )
|
-
-
37 楼
00401C05 |. 68 98354000 PUSH cm1.00403598 ; ASCII "please enter the key!"
00401C0A |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00401C0D |. E8 96050000 CALL <JMP.&MFC42.#4224_?MessageBoxA@CWnd>
00401C12 |. EB 21 JMP SHORT cm1.00401C35
00401C14 |> 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
00401C17 |. 52 PUSH EDX ; /Arg2
00401C18 |. 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10] ; |
00401C1B |. 50 PUSH EAX ; |Arg1
00401C1C |. E8 DFFBFFFF CALL cm1.00401800 ; \cm1.00401800 <---这里在ESP中可以得到....不过具体算法....不清楚
00401C21 |. 83C4 08 ADD ESP,8
00401C24 |. 6A 00 PUSH 0
00401C26 |. 6A 00 PUSH 0
00401C28 |. 68 7C354000 PUSH cm1.0040357C ; ASCII "Congratulations!you win!"
00401C2D |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
|
能力值:
( LV2,RANK:10 )
|
-
-
38 楼
楼上的全部都是高手哇
|
能力值:
( LV2,RANK:10 )
|
-
-
39 楼
怎么还没发现完全看懂的文章
|
能力值:
( LV2,RANK:10 )
|
-
-
40 楼
只会碰运气的爆破 在深入就没招了 好像算法在CALL里 汇编没学好 不会跟
|
能力值:
( LV2,RANK:10 )
|
-
-
41 楼
厉害!
好多大龙虾!
不过我还是把它给爆破掉了~~~
改了一下CALL的地址就行了~~
|
能力值:
( LV2,RANK:10 )
|
-
-
42 楼
都是高手哈[QUOTE][/QUOTE]汗死了
|
能力值:
( LV2,RANK:10 )
|
-
-
43 楼
LZ搞那么多英文
|
能力值:
( LV2,RANK:10 )
|
-
-
44 楼
进来学习!!!!!!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
45 楼
7654321
就已经得了,干嘛要打多后面那几个啊。
|
能力值:
( LV4,RANK:50 )
|
-
-
46 楼
修改00401874 修改 JMP 00401C24 ,哈哈 爆破
|
能力值:
( LV2,RANK:10 )
|
-
-
47 楼
学习了一下,好好的
|
能力值:
( LV2,RANK:10 )
|
-
-
48 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
49 楼
连数,123456789不行,倒着数就会出提示框。
看来以后破解不出框的软件要反过来输下试试看了。
|
能力值:
( LV2,RANK:10 )
|
-
-
50 楼
有意思啊。有意思啊。
|
|
|