首页
社区
课程
招聘
[原创]算法逆向练习系列
发表于: 2011-12-16 22:39 25180

[原创]算法逆向练习系列

2011-12-16 22:39
25180

大家喜欢玩的拿去练习吧,这是我逆的。Crackme原版看附件,这个Crackme没有全部逆完,做到了算法部分一模一样。
#define ROL(x,t) (x<<t)|(x>>32-t)
#define ROR(x,t) (x>>t)|(x<<32-t)
/**********************************************************************************
004010D6  |.  B9 10000000   MOV ECX,10
004010DB  |.  2BC8          SUB ECX,EAX                ;  减去用户名长度
004010DD  |.  BE 60214000   MOV ESI,00402160           ;  user首地址
004010E2  |.  8BFE          MOV EDI,ESI                ;  用户名首地址
004010E4  |.  03F8          ADD EDI,EAX                ;  得到user的结束位置
004010E6  |.  FC            CLD
004010E7  |.  F3:A4         REP MOVSB                  ;  用user自己输入的补足16位
004010E9  |.  33C9          XOR ECX,ECX
004010EB  |.  BE 71214000   MOV ESI,00402171           ;  Password首地址
004010F0  |>  41            /INC ECX                   ;  长度
004010F1  |.  AC            |LODSB                     ;  放入EAX
004010F2  |.  0AC0          |OR AL,AL                  ;  判断是否结束
004010F4  |.  74 0A         |JE SHORT 00401100
004010F6  |.  3C 7E         |CMP AL,7E                 ;  判断是否大于0x7E
004010F8  |.  7F 06         |JG SHORT 00401100
004010FA  |.  3C 30         |CMP AL,30                 ;  判断是否小于0x30
004010FC  |.  72 02         |JB SHORT 00401100
004010FE  |.^ EB F0         \JMP SHORT 004010F0        ;  继续循环
00401100  |>  83F9 11       CMP ECX,11                 ;  比较Password长度
*********************************************************************************/
int CheckLength(unsigned char *user,unsigned char *password)
{
        int i=0;
        for(;i<10;i++)
        {
                user[i+6]=user[i];
        }
        i=0;
        while(*password)
        {
                if(*password==0||*password>0x7E||*password<0x30)
                        break;
                password++;
                i++;
        }
        if(i!=17)
        {
                return 0;
        }
        return i;
}
/**********************************************************************************
004011F1  /$  A1 60214000   MOV EAX,DWORD PTR DS:[402160]            ;  user的0-4位
004011F6  |.  8B1D 64214000 MOV EBX,DWORD PTR DS:[402164]            ;  user的5-8位
004011FC  |.  3305 71214000 XOR EAX,DWORD PTR DS:[402171]            ;  Password的0-4位
00401202  |.  331D 75214000 XOR EBX,DWORD PTR DS:[402175]            ;  Password的5-8位
00401208  |.  25 0F1F3F7F   AND EAX,7F3F1F0F                         ;  按位与
0040120D  |.  81E3 00010307 AND EBX,7030100                          ;  按位与
**********************************************************************************/
#define  CalcleA(x,y) (*(DWORD*)x^*(DWORD*)y)&0x7F3F1F0F
#define  CalcleB(a,b) (*(DWORD*)(a+4)^*(DWORD*)(b+4))&0x7030100
/**********************************************************************************
00401229  |.  8BD6          |MOV EDX,ESI
0040122B  |.  C0EE 07       |SHR DH,7
0040122E  |.  66:C1E2 07    |SHL DX,7
00401232  |.  C1EA 08       |SHR EDX,8
00401235  |.  C0EE 07       |SHR DH,7
00401238  |.  66:C1E2 07    |SHL DX,7
0040123C  |.  C1EA 08       |SHR EDX,8
**********************************************************************************/
DWORD Cycle(DWORD TSize)
{
        DWORD DSize=TSize;
        WORD  WSize=0;
        BYTE  BSize=0;
        WSize=DSize&0xffff;
        BSize=((unsigned)WSize>>8);
        BSize>>=7;
        WSize=(BSize<<8)|((unsigned)WSize&0xff);
        WSize<<=7;
        DSize&=0xffff0000;
        DSize|=WSize;
        DSize>>=8;
        WSize=DSize&0xffff;
        BSize=((unsigned)WSize>>8);
        BSize>>=7;
        WSize=(BSize<<8)|((unsigned)WSize&0xff);
        WSize<<=7;
        DSize&=0xffff0000;
        DSize|=WSize;
        DSize>>=8;
        return DSize;
}
/**********************************************************************************
0040123F  |.  C0EE 07       |SHR DH,7
00401242  |.  66:D1EA       |SHR DX,1
00401245  |.  8BF2          |MOV ESI,EDX
**********************************************************************************/
DWORD CycleLow(DWORD Num)
{
        WORD  WSize=Num&0xffff;
        BYTE  BSize=((unsigned)WSize>>8);
        BSize>>=7;
        WSize=(BSize<<8)|((unsigned)WSize&0xff);
        WSize>>=1;
        Num&=0xffff0000;
        Num|=WSize;
        return Num;
}
/**********************************************************************************
0040125D  |.  C0EE 07       |SHR DH,7
00401260  |.  66:C1EA 05    |SHR DX,5
00401264  |.  8BFA          |MOV EDI,EDX
**********************************************************************************/
DWORD CycleLowA(DWORD Num)
{
        WORD  WSize=Num&0xffff;
        BYTE  BSize=((unsigned)WSize>>8);
        BSize>>=7;
        WSize=(BSize<<8)|((unsigned)WSize&0xff);
        WSize>>=5;
        Num&=0xffff0000;
        Num|=WSize;
        return Num;
}
/*******************************************************************
004011F1  /$  A1 60214000   MOV EAX,DWORD PTR DS:[402160]            ;  user的0-4位
004011F6  |.  8B1D 64214000 MOV EBX,DWORD PTR DS:[402164]            ;  user的5-8位
004011FC  |.  3305 71214000 XOR EAX,DWORD PTR DS:[402171]            ;  Password的0-4位
00401202  |.  331D 75214000 XOR EBX,DWORD PTR DS:[402175]            ;  Password的5-8位
00401208  |.  25 0F1F3F7F   AND EAX,7F3F1F0F                         ;  按位与
0040120D  |.  81E3 00010307 AND EBX,7030100                          ;  按位与
00401213  |.  33C9          XOR ECX,ECX
00401215  |>  8BF0          /MOV ESI,EAX
00401217  |.  8BFB          |MOV EDI,EBX
00401219  |.  D3E6          |SHL ESI,CL
0040121B  |.  D3E7          |SHL EDI,CL
0040121D  |.  81E6 80808080 |AND ESI,80808080
00401223  |.  81E7 80808080 |AND EDI,80808080
00401229  |.  8BD6          |MOV EDX,ESI
0040122B  |.  C0EE 07       |SHR DH,7
0040122E  |.  66:C1E2 07    |SHL DX,7
00401232  |.  C1EA 08       |SHR EDX,8
00401235  |.  C0EE 07       |SHR DH,7
00401238  |.  66:C1E2 07    |SHL DX,7
0040123C  |.  C1EA 08       |SHR EDX,8
0040123F  |.  C0EE 07       |SHR DH,7
00401242  |.  66:D1EA       |SHR DX,1
00401245  |.  8BF2          |MOV ESI,EDX
00401247  |.  8BD7          |MOV EDX,EDI
00401249  |.  C0EE 07       |SHR DH,7
0040124C  |.  66:C1E2 07    |SHL DX,7
00401250  |.  C1EA 08       |SHR EDX,8
00401253  |.  C0EE 07       |SHR DH,7
00401256  |.  66:C1E2 07    |SHL DX,7
0040125A  |.  C1EA 08       |SHR EDX,8
0040125D  |.  C0EE 07       |SHR DH,7
00401260  |.  66:C1EA 05    |SHR DX,5
00401264  |.  8BFA          |MOV EDI,EDX
00401266  |.  33FE          |XOR EDI,ESI
00401268  |.  8BD7          |MOV EDX,EDI
0040126A  |.  81E2 FF000000 |AND EDX,0FF
00401270  |.  51            |PUSH ECX
00401271  |.  52            |PUSH EDX
00401272  |.  BA 08000000   |MOV EDX,8
00401277  |.  91            |XCHG EAX,ECX
00401278  |.  83F8 03       |CMP EAX,3
0040127B  |.  7F 0F         |JG SHORT 0040128C
0040127D  |.  F6E2          |MUL DL
0040127F  |.  5A            |POP EDX
00401280  |.  83C0 08       |ADD EAX,8
00401283  |.  91            |XCHG EAX,ECX
00401284  |.  D3C0          |ROL EAX,CL
00401286  |.  33C2          |XOR EAX,EDX
00401288  |.  D3C8          |ROR EAX,CL
0040128A  |.  EB 0D         |JMP SHORT 00401299
0040128C  |>  83E8 03       |SUB EAX,3
0040128F  |.  F6E2          |MUL DL
00401291  |.  5A            |POP EDX
00401292  |.  91            |XCHG EAX,ECX
00401293  |.  D3C3          |ROL EBX,CL
00401295  |.  33DA          |XOR EBX,EDX
00401297  |.  D3CB          |ROR EBX,CL
00401299  |>  59            |POP ECX
0040129A  |.  41            |INC ECX
0040129B  |.  83F9 08       |CMP ECX,8
0040129E  |.^ 0F85 71FFFFFF \JNZ 00401215
*******************************************************************/
DWORD CycleKeyGen(unsigned char *user,unsigned char *password)
{
        DWORD KeyA=CalcleA(user,password);
        DWORD KeyB=CalcleB(user,password);
        DWORD ESI=0;
        DWORD EDI=0;
        DWORD Edx=0;
        for(char i=0;i!=8;i++)
        {
                ESI=KeyA;
                EDI=KeyB;
                ESI<<=i;
                EDI<<=i;
                ESI&=0x80808080;
                EDI&=0x80808080;
                Edx=ESI;
                Edx=Cycle(Edx);
                ESI=CycleLow(Edx);
                Edx=EDI;
                Edx=Cycle(Edx);
                EDI=CycleLowA(Edx);
                EDI^=ESI;
                Edx=EDI&0xff;
                if(i<=3)
                {
                        int c=i*8+8;
                        KeyA=ROL(KeyA,c);
                        KeyA^=Edx;
                        KeyA=ROR(KeyA,c);
                }
                else
                {
                        char c=(i-3)*8;
                        KeyB=ROL(KeyB,c);
                        KeyB^=Edx;
                        KeyB=ROR(KeyB,c);
                }
        }
        return KeyA;
}


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 6
支持
分享
最新回复 (31)
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
2
这个Crackme算法逆了大部分,想玩的同学下载附件玩吧,这是我逆的。
#include <windows.h>
#include "resource.h"
char *ChangeWChar(char *Buffer)
{
	char *Tvar=Buffer;
	while(*Tvar!=0x00)
	{
		if(*Tvar>=0x61&&*Tvar<=0x7A)
		{
			*Tvar-=0x20;
		}
		Tvar++;
	}
	return Buffer;
}
UINT WspChange(char *Buffer)
{
	UINT Value=0;
	while(*Buffer!=0)
	{
		if(*Buffer<0x30&&*Buffer>0x46)
			return 0;
		if(*Buffer>0x39&&*Buffer>=0x41)
		{
			*Buffer-=0x37;
		}
		else{
		    *Buffer-=0x30;
		}
		Value=((Value<<4)|(Value>>28));	
		Value+=*Buffer;
		Buffer++;
	}
	return Value;
}
int ButtonProc(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
	char User[128]={0};
	char Code[128]={0};
    switch(LOWORD(wParam))
    {
        case IDC_CHECK:
			if(GetDlgItemText(hWnd,IDC_USER,User,40)<5)
			{
				break;
			}
			if(GetDlgItemText(hWnd,IDC_CODE,Code,40)!=8)
			{
                break;
            }
			UINT Key=WspChange(ChangeWChar(Code));
		    if(Key==0)
				break;
			Key=((Key^0x52476433)^0x52472456)-0x4000000;
    }
	return 1;
}
BOOL CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        case WM_INITDIALOG:
			break;
        case WM_CLOSE:
            EndDialog(hWnd, 0);
            break;
        case WM_COMMAND:
			ButtonProc(hWnd,wParam,lParam);
			break;
    }
    return FALSE;
}


int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    return DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, DialogProc);
}
 
上传的附件:
2011-12-16 22:43
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
3
这个CRC32效验工具全逆,计算出的结果和原程序一模一样,想玩的同学下载附件玩吧,这是我逆的。
#include <windows.h>
#include <shellapi.h>
#include "resource.h"
HINSTANCE hInst;
char wcPath[MAX_PATH]={0}; 
char Crc32Table[256]={0};
void InitCrc32(void)
{
	UINT Value=0; 
	UINT Count=0;
	for(UINT i=0;i<1024;i+=4,Count++)
	{
		Value=Count;
		for(int j=8;j!=0;j--)
		{
			if(((BYTE)Value)&1)
				Value=(Value>>1)^0xEDB88320;
			else
				Value=(Value>>1);
		}
		*(DWORD*)(Crc32Table+i)=Value;
	}
}
UINT CalculateCrc32(char *Buffer,int Size)
{
	UINT Value=0xffffffff;
	BYTE WChar;
	for(int i=0;i<Size;i++)
	{
		WChar=Buffer[i];
		UINT Key=(Value&0xff)^WChar;
		Value=(Value>>8)^*(DWORD*)(Crc32Table+(Key*4));
	}
	return ~Value;
}
void CalculateBinary(UINT Key,char *Buffer)
{
	UINT Value;
	for(unsigned char i=0;i<32;i++)
	{
		Value=(Key<<i)&0x80000000;
		if(Value!=0x80000000)
		{
			*Buffer=0x30;
		}
		else{
			*Buffer=0x31;
		}
		Buffer++;
	}
	*Buffer=0x00;
}
BOOL GetOpenFile(HWND hWnd)
{
    OPENFILENAME  FileName = {0,0,0};
    TCHAR szPe[]="Target(*.exe)\0*.exe\0Target(*.dll)\0*.dll\0";
    FileName.hInstance = (HINSTANCE)hWnd;
    FileName.hwndOwner = hWnd;
    FileName.lStructSize = sizeof(OPENFILENAME);
    FileName.lpstrFilter = szPe;
    FileName.lpstrFile = wcPath;
    FileName.Flags = OFN_FILEMUSTEXIST||OFN_PATHMUSTEXIST;
    FileName.nMaxFile = sizeof(wcPath);
    if(!GetOpenFileName(&FileName))
    {
        return FALSE;
    }
	return TRUE;
}
int ButtonProc(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
	char *lpText=0x00;
	UINT Size=0;
	DWORD dwRead=0;
	HANDLE hFile=NULL;
	char Crc32[32]={0};
	DWORD Crc=0;
    switch(LOWORD(wParam))
    {
        case IDBROWSE:
			GetOpenFile(hWnd);
			SetDlgItemText(hWnd,IDPATH,wcPath);
            break; 
        case IDEDIT:
	    	Size=SendMessage(GetDlgItem(hWnd,IDEDIT),WM_GETTEXTLENGTH,0,0);
			lpText=(char*)malloc(Size);
			GetDlgItemText(hWnd,IDEDIT,lpText,Size+1);
			InitCrc32();
			Crc=CalculateCrc32(lpText,Size);
			wsprintf(Crc32,"%08X",Crc);
			SetDlgItemText(hWnd,ID_CRC32,Crc32);
			CalculateBinary(Crc,Crc32);
			SetDlgItemText(hWnd,ID_BIN,Crc32);
			break;
		case IDOK:
			hFile=CreateFile(wcPath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
			Size=GetFileSize(hFile,NULL);
			lpText=(char*)malloc(Size);
			ReadFile(hFile,lpText,Size,&dwRead,NULL);
			InitCrc32();
			Crc=CalculateCrc32(lpText,Size);
			wsprintf(Crc32,"%08X",Crc);
			SetDlgItemText(hWnd,IDCRC32,Crc32);
			CalculateBinary(Crc,Crc32);
			SetDlgItemText(hWnd,IDBIN,Crc32);
			break;
    }
	return 0;
}
BOOL CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	HDROP hDrop;
	HICON  hIcon;
    switch(uMsg)
    {
        case WM_INITDIALOG:
            hIcon = LoadIcon(hInst,(LPCTSTR)IDI_ICON);
            SendMessage(hWnd,WM_SETICON,TRUE,(WPARAM)hIcon);
			DragAcceptFiles(hWnd,TRUE);
			break;
        case WM_CLOSE:
            EndDialog(hWnd, 0);
            break;
        case WM_COMMAND:
			ButtonProc(hWnd,wParam,lParam);
			break;
		case WM_DROPFILES:
			hDrop = ( HDROP )wParam;
			UINT nFile = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
			for(int i=0;i<nFile;i++)
			{
			    DragQueryFile(hDrop,i, wcPath, sizeof(wcPath)); 
			    SetDlgItemText(hWnd,IDPATH,wcPath);
			}
			DragFinish(hDrop);
			break;
    }
    return FALSE;
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    hInst=hInstance;
    return DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, DialogProc);
}
上传的附件:
2011-12-16 22:45
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
4
这是一个Crackme的注册机,想玩的同学下载去玩吧,这是我逆的。
#include "Header.h"
int BMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
	char *Table="ZWATRQLCGHPSXYENVBJDFKMU";
	char Name[MAX_PATH]={0};
	char Serial[MAX_PATH]={0};
	int Length=0;
	BYTE Var=0;
	long Var1=0;
    switch(LOWORD(wParam))
    {
        case IDOK:
			Length=GetDlgItemText(hWnd,IDC_NAME,Name,MAX_PATH);
			for(int i=0;i<Length;i++)
			{
				Var+=Name[i];
			}
			Var1=((unsigned)Var%0x18);
			if(Var1>0x18)
				Var1-=0x18;
			Serial[0]=*(Table+Var1);
			Serial[1]=0x45;
			Var1+=Var1;
			if(Var1>0x18)
				Var1-=0x18;
			Serial[2]=*(Table+Var1);
			BYTE Key=0;
			BYTE TVar=Var1;
			for(int i=2;i!=8;i++)
			{
				Key=Serial[i];
				TVar=(TVar+(Key-0x41));
				if(TVar>0x18)
					TVar-=0x18;
				Serial[i+1]=Table[TVar];
			}
			Var1=0;
			for(int i=0;i<9;i++)
			{
				Var1+=Serial[i];
			}
			Serial[9]=(Var1/9);
			SetDlgItemText(hWnd,IDC_SERIAL,Serial);
		    break;
		case IDABOUT:
			ShellExecute(hWnd,"open","1b1K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8W2k6r3W2&6i4K6u0W2j5$3!0E0",NULL,NULL,SW_SHOWNORMAL);
			break;
	}
	return 1;
}
BOOL CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	HICON Icon;
    switch(uMsg)
    {
        case WM_INITDIALOG:
			Icon=LoadIcon((HINSTANCE)GetModuleHandle(NULL),(LPCSTR)IDI_ICON);
			SendMessage(hWnd,WM_SETICON,TRUE,(WPARAM)Icon);
			break;
        case WM_CLOSE:
            EndDialog(hWnd, 0);
            break;
        case WM_COMMAND:
			BMCommand(hWnd,wParam,lParam);
			break;
    }
    return FALSE;
}


int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    InitCommonControls();
	DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(DLG_MAIN), NULL, DialogProc);
	ExitProcess(0);
}
上传的附件:
2011-12-16 22:47
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
5
这个Crackme是一个查表,想玩的同学下载附件玩吧,这是我逆的。
#include <windows.h>
#include <shellapi.h>
#include <mmsystem.h>
#include "resource.h"
UINT GetASIICode(BYTE Offset,char *Buffer)
{
	UINT TVar=Buffer[3+Offset];
	UINT TVar1=Buffer[2+Offset];
	TVar<<=8;
	TVar+=TVar1;
	TVar1=Buffer[1+Offset];
	TVar<<=8;
	TVar+=TVar1;
	TVar1=Buffer[0+Offset];
	TVar<<=8;
	TVar+=TVar1;
	return TVar;
}
UINT GetUserKey(char *Buffer)
{
	UINT Array[]={0x12,0x5C,0x34,0x22,0xAB,0x9D,0x54,0x00,0xDD,0x84,0xAE,0x66,0x31,0x78,0x73,0xCF};
	char *TVar="eheh";
	UINT Asii=GetASIICode(0,TVar);
	strcat(Buffer," is a whore.");
	int j=0;
	for(UINT i=0;i<sizeof(Array);i+=4,j++)
	{
		UINT ASII=GetASIICode(i,Buffer);
		ASII+=(Array[j]^j);
		ASII=(ASII<<7)|(ASII>>25);
		Asii^=ASII;
	}
	return Asii;
}
void ClearString(UINT Length,char *Buffer)
{
	UINT Len=strlen(Buffer);
	while(Len!=Length)
	{
		Buffer[Len]=0;
		Len--;
	}
	Buffer[Len]=0;
}
int BMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
	char User[64]={0};
	char Buffer[32]={0};
	char *Table="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	char Serial[]="KEYGENNING4NEWBIES";
	UINT Length;
	UINT KEY;
    switch(LOWORD(wParam))
    {
        case IDOK:
			Length=GetDlgItemText(hWnd,IDC_USER,User,64);
			if(Length==0&&Length>64)
		        return 0;
			KEY=GetUserKey(User);
			ClearString(Length,User);
			for(UINT i=0;i<18;i++)
			{
				Buffer[i]=Table[KEY%0x1A];
			_asm{
					mov eax,KEY
					shl eax,3
					IMUL EAX
					ADD EAX,EDX
					mov [KEY],eax
				}
			}
			for(UINT i=0;i<18;i++)
			{
				Serial[i]^=i;
			}
			for(UINT i=0;i<18;i++)
			{
				Serial[i]=((Serial[i]^Buffer[i])+0x30);
			}
			SetDlgItemText(hWnd,IDC_SERIAL,Serial);
			break;
		case IDABOUT:
			ShellExecute(hWnd,"open","7b5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8W2k6r3W2&6i4K6u0W2j5$3!0E0",NULL,NULL,SW_SHOWNORMAL);
			break;
	}
	return 1;
}
BOOL CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	HICON Icon;
    switch(uMsg)
    {
        case WM_INITDIALOG:
			Icon=LoadIcon((HINSTANCE)GetModuleHandle(NULL),(LPCSTR)IDI_ICON);
			SendMessage(hWnd,WM_SETICON,TRUE,(WPARAM)Icon);
			break;
        case WM_CLOSE:
            EndDialog(hWnd, 0);
            break;
        case WM_COMMAND:
			BMCommand(hWnd,wParam,lParam);
			break;
    }
    return FALSE;
}


int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    return DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, DialogProc);
}
上传的附件:
2011-12-16 22:49
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
6
这个是加密解密第五章的Crackme,想玩的同学下载玩吧,这是我逆的
#include <windows.h>
#include <shellapi.h>
#include <mmsystem.h>
#include "resource.h"
#pragma comment(linker, "/EXPORT:WinMain,@16")
#pragma comment(linker, "/ENTRY:WinMain")
#pragma comment(linker, "/BASE:1000")
#pragma comment(linker, "/ALIGN:0x200")
#pragma comment(linker, "/SAFESEH:NO")
int BMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
	char User[32]={0};
	char Serial[32]={0};
	UINT Length;
	UINT KEY=0;
    switch(LOWORD(wParam))
    {
        case IDOK:
			Length=GetDlgItemText(hWnd,IDC_USER,User,32);
			for(UINT i=0;i<Length;i++)
			{
				if(User[i]<0x41)
					break;
				if(User[i]>=0x41&&User[i]>0x5A)
				{
					User[i]-=0x20;
				}
				KEY+=User[i];
			}
			KEY^=0x5678;
			KEY^=0x1234;
			wsprintf(Serial,"%d",KEY);
			SetDlgItemText(hWnd,IDC_SERIAL,Serial);
			break;
		case IDABOUT:
			ShellExecute(hWnd,"open","ff3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8W2k6r3W2&6i4K6u0W2j5$3!0E0",NULL,NULL,SW_SHOWNORMAL);
			break;
	}
	return 1;
}
BOOL CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	HICON Icon;
    switch(uMsg)
    {
        case WM_INITDIALOG:
			Icon=LoadIcon((HINSTANCE)GetModuleHandle(NULL),(LPCSTR)IDI_ICON);
			SendMessage(hWnd,WM_SETICON,TRUE,(WPARAM)Icon);
			break;
        case WM_CLOSE:
            EndDialog(hWnd, 0);
            break;
        case WM_COMMAND:
			BMCommand(hWnd,wParam,lParam);
			break;
    }
    return FALSE;
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    return DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(DLG_MAIN), NULL, DialogProc);
}
上传的附件:
2011-12-16 22:51
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
7
这是源代码,以前那个。想看下这垃圾代码的下载附件吧
#include <windows.h>
/**************************************
检测横排是否有一样的数字
**************************************/
int CheckX(char Code[9][9])
{
	for(int i=0;i<9;i++)
	{
		for(int j=0;j<9;j++)
		{
			BYTE Key=Code[i][j];
			if(Key==Code[i][1]&&j!=1)
				return 0;
			if(Key==Code[i][2]&&j!=2)
				return 0;
			if(Key==Code[i][3]&&j!=3)
				return 0;
			if(Key==Code[i][4]&&j!=4)
				return 0;
			if(Key==Code[i][5]&&j!=5)
				return 0;
			if(Key==Code[i][6]&&j!=6)
				return 0;
			if(Key==Code[i][7]&&j!=7)
				return 0;
			if(Key==Code[i][8]&&j!=8)
				return 0;
		}
	}
	return 1;
}
/**************************************
检测竖排是否有一样的数字
**************************************/
int CheckY(char code[9][9])
{
	for(int i=0;i<9;i++)
	{
		for(int j=0;j<9;j++)
		{
			BYTE Key=code[i][j];
			if(Key==code[1][j]&&i!=1)
				return 0;
			if(Key==code[2][j]&&i!=2)
				return 0;			
			if(Key==code[3][j]&&i!=3)
				return 0;
			if(Key==code[4][j]&&i!=4)
				return 0;
			if(Key==code[5][j]&&i!=5)
				return 0;
			if(Key==code[6][j]&&i!=6)
				return 0;
			if(Key==code[7][j]&&i!=7)
				return 0;
			if(Key==code[8][j]&&i!=8)
				return 0;
		}
	}
	return 1;
}
/**************************************
检测左斜排是否有一样的数字
**************************************/
int CheckXY(char code[9][9])
{
	for(int i=0;i<9;i++)
	{
		BYTE Key=code[i][i];
		if(Key==code[1][1]&&i!=1)
			return 0;
		if(Key==code[2][2]&&i!=2)
			return 0;
		if(Key==code[3][3]&&i!=3)
			return 0;
		if(Key==code[4][4]&&i!=4)
			return 0;
		if(Key==code[5][5]&&i!=5)
			return 0;
		if(Key==code[6][6]&&i!=6)
			return 0;
		if(Key==code[7][7]&&i!=7)
			return 0;
		if(Key==code[8][8]&&i!=8)
			return 0;
	}
	return 1;
}
/**************************************
检测右斜排是否有一样的数字
**************************************/
int CheckYX(char code[9][9])
{
	int j=8;
    for(int i=0;i<9;i++)
    {
		BYTE Key=code[i][j];
		if(Key==code[i+1][j-1])
			return 0;
		if(Key==code[i+2][j-2])
			return 0;
		if(Key==code[i+3][j-3])
			return 0;
		if(Key==code[i+4][j-4])
			return 0;
		if(Key==code[i+5][j-5])
			return 0;
		if(Key==code[i+6][j-6])
			return 0;
		if(Key==code[i+7][j-7])
			return 0;
		if(Key==code[i+8][j-8])
			return 0;
		j--;
    }
	return 1;
}
/**************************************
检测横排的和
**************************************/
int CheckXCum(char code[9][9])
{
	for(int i=0;i<9;i++)
	{
		int Num=0;
		for(int j=0;j<9;j++)
		{
			Num+=code[i][j];
		}
		if(Num!=477)
			return 0;
	}
	return 1;
}
/**************************************
检测竖排的和
**************************************/
int CheckYCum(char code[9][9])
{
	for(int i=0;i<9;i++)
	{
		int Num=0;
		for(int j=0;j<9;j++)
		{
			Num+=code[j][i];
		}
		if(Num!=477)
			return 0;
	}
	return 1;

}
上传的附件:
2011-12-16 22:56
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
8
感谢韬哥的分享,主题合并,方便大家学习。
2011-12-17 09:32
0
雪    币: 287
活跃值: (618)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
滔哥牛B啊!什么时候才能追上你啊
2011-12-17 14:43
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
10
算法牛人啊!简直无法超越
2011-12-17 16:47
0
雪    币: 120
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
一个字:帅呆了。
2011-12-17 17:17
0
雪    币: 81
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
牛!!!!!!!!!!
2011-12-17 23:35
0
雪    币: 81
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
MARK!!!!!
2011-12-17 23:36
0
雪    币: 244
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
进来膜拜学习,感谢楼主分享
2011-12-18 07:16
0
雪    币: 437
活跃值: (130)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
15
膜拜一下。
2011-12-18 10:06
0
雪    币: 14983
活跃值: (5324)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
16
牛啊。话说算法搞起来真的很蛋疼。
2011-12-18 13:14
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
膜拜牛人!!
2011-12-18 13:49
0
雪    币: 257
活跃值: (28)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
18
C语言我是新手。请教一下高手们:在用数据类型时,用DWORD还是UINT、用BYTE还是char有什么讲究吗?
2011-12-18 14:26
0
雪    币: 768
活跃值: (585)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
19
小邓进步神速呀:)太猛了
2011-12-18 14:28
0
雪    币: 14714
活跃值: (4982)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
牛!

谢谢分享!!!
2011-12-18 20:07
0
雪    币: 156
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
我以前也写过一个简单的...比起楼主这个差远了....有感触啊
2011-12-19 10:30
0
雪    币: 149
活跃值: (401)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
22
强。。拿来学习一下。
2011-12-19 11:08
0
雪    币: 403
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
先膜拜一下
这些算法看的我头晕  
也不知道逆这些算法花了多长时间,要是让我随便逆其中的一个  也得花好几个小时或者一天 甚至更长时间
也不知道什么时候才能脱离这个痛苦的阶段
2011-12-19 14:51
0
雪    币: 2573
活跃值: (4323)
能力值: ( LV13,RANK:540 )
在线值:
发帖
回帖
粉丝
24
学习,学习~~
2011-12-20 10:29
0
雪    币: 122
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
前来道声韬哥牛B !
2011-12-20 23:20
0
游客
登录 | 注册 方可回帖
返回