首页
社区
课程
招聘
[原创]趣味crackme try it!
发表于: 2008-4-25 00:24 46058

[原创]趣味crackme try it!

2008-4-25 00:24
46058
收藏
免费 7
支持
分享
最新回复 (56)
雪    币: 102
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
14L的够仔细
2008-5-5 19:07
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
试试看有结果mi
2008-5-7 16:02
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
疯了,弄不出来
2008-5-11 15:00
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
今天好爽,终于靠自已的力量找到了一个注册号12343618
我是先用12345678来做试验,后来改了两个数字
2008-5-14 22:35
0
雪    币: 37
活跃值: (10)
能力值: ( 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
2008-5-15 02:06
0
雪    币: 10902
活跃值: (3288)
能力值: (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!");
}
2008-5-21 10:07
0
雪    币: 16
活跃值: (430)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
好变态的。。。 爆破了。。。
2008-5-24 03:37
0
雪    币: 199
活跃值: (10)
能力值: ( 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;
}

2008-5-25 13:58
0
雪    币: 10902
活跃值: (3288)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
34
很不错,学习!
2008-5-25 15:04
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
羞愧, 搂主都把代码贴出来, 我还来献丑...............
2008-5-25 18:58
0
雪    币: 150
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
呵呵,挺有意思的
2008-5-31 09:34
0
雪    币: 109
活跃值: (10)
能力值: ( 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]
2008-6-7 01:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tkb
38
楼上的全部都是高手哇
2008-6-12 22:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
怎么还没发现完全看懂的文章
2008-6-22 16:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
只会碰运气的爆破 在深入就没招了 好像算法在CALL里 汇编没学好 不会跟
上传的附件:
2008-8-25 21:04
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
厉害!
好多大龙虾!
不过我还是把它给爆破掉了~~~
改了一下CALL的地址就行了~~
2008-10-11 00:14
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
42
都是高手哈[QUOTE][/QUOTE]汗死了
2008-10-11 04:04
0
雪    币: 175
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
LZ搞那么多英文
2008-10-11 20:22
0
雪    币: 14
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
进来学习!!!!!!!!!
2008-10-12 04:09
0
雪    币: 412
活跃值: (127)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
7654321

就已经得了,干嘛要打多后面那几个啊。
2008-10-15 09:22
0
雪    币: 136
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
46
修改00401874 修改 JMP 00401C24  ,哈哈  爆破
2008-10-15 15:55
0
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
学习了一下,好好的
2008-10-22 09:06
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48


来点教程!
2008-10-26 19:30
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
49
连数,123456789不行,倒着数就会出提示框。
看来以后破解不出框的软件要反过来输下试试看了。
2008-11-6 04:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
50
有意思啊。有意思啊。
2008-12-5 23:37
0
游客
登录 | 注册 方可回帖
返回
//