能力值:
( 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);
}
|
能力值:
( 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);
}
|
能力值:
( 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);
}
|
能力值:
( 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);
}
|
能力值:
( 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);
}
|
能力值:
( 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;
}
|
能力值:
( LV12,RANK:440 )
|
-
-
8 楼
感谢韬哥的分享,主题合并,方便大家学习。
|
能力值:
( LV5,RANK:60 )
|
-
-
9 楼
滔哥牛B啊!什么时候才能追上你啊
|
能力值:
( LV12,RANK:1000 )
|
-
-
10 楼
算法牛人啊!简直无法超越
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
一个字:帅呆了。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
牛!!!!!!!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
MARK!!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
进来膜拜学习,感谢楼主分享
|
能力值:
( LV5,RANK:70 )
|
-
-
15 楼
 膜拜一下。
|
能力值:
( LV15,RANK:880 )
|
-
-
16 楼
牛啊。话说算法搞起来真的很蛋疼。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
膜拜牛人!!
|
能力值:
( LV7,RANK:100 )
|
-
-
18 楼
C语言我是新手。请教一下高手们:在用数据类型时,用DWORD还是UINT、用BYTE还是char有什么讲究吗?
|
能力值:
( LV13,RANK:460 )
|
-
-
19 楼
小邓进步神速呀:)太猛了
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
牛!
谢谢分享!!!
|
能力值:
( LV3,RANK:20 )
|
-
-
21 楼
我以前也写过一个简单的...比起楼主这个差远了....有感触啊
|
能力值:
( LV5,RANK:60 )
|
-
-
22 楼
强。。拿来学习一下。
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
先膜拜一下
这些算法看的我头晕 
也不知道逆这些算法花了多长时间,要是让我随便逆其中的一个 也得花好几个小时或者一天 甚至更长时间 
也不知道什么时候才能脱离这个痛苦的阶段
|
能力值:
( LV13,RANK:540 )
|
-
-
24 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
前来道声韬哥牛B !
|
|
|