Cracking4neWBies - Lekce č.8

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: DjH
Datum: 18.8.2007
Hodnocení/Hlasovalo: 3.6/5

Cracking pro začátečníky...poosmé...:-)

Cracking4neWBies

Lekce č.8

Tajemství výroby cracků a patchů

Balík ke stáhnutí zde

Předem bych ctěl říct, že crackeři se většinou pokoušejí rozluštit s/n, a pokud možno vše bez patchování. Ale jsou i situace, kdy se tomu prostě nevyhnete… Ale teď už k praxi…
Já osobně jazyk C++ moc neumím. Znám jen příkazy, které „musím“. Nejvíce mi vyhovuje jazyk Pascal (Delphi), jak již jste mohli vidět. Akorát mě vážně se*e ta výstupní velikost *.exe souboru… V C++ bych asi ani CMe nenaprogramoval, ale i přesto dělám cracky právě v něm.
„Crack“ co jsme vytvořili v minulé lekci je steně velký jako program nepatchovaný. Proč? Protože jsme byty přepsali, ale nic jsme nepřidali. Program tedy zabírá něco kolem 540kB. Což je moc. Mohli bychom program zkomprimovat např. UPXem, nebo packovat do RARu. Ale není nic lepšího, než si vytvořit vlastní program, který vše zapatchuje.
Jak bylo psáno, crack si naprogramujeme v C++. Já budu programovat ve Visual C++ 2005 od Microsoftu. Můžete programovat třeba i v Dev-C++ (c++ jako c++), ale já přikládám source k Vis. C++ 2oo5. Dalo by se říct, že cracky, které budete vyrábět budou založené na této „kostře“:



#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "Form1.h"
{
FILE *f;


int adr=0xadresa; //offset
int owr=0xhex_prikaz; //hex

f = fopen( "crackme.exe" , "rb+");
if (f==NULL) { MessageBox::Show( "File can not be found!", "Error", MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
exit(1);
}


fseek(f,adr,SEEK_SET);


fwrite(&owr,1,1,f);
MessageBox::Show( "Cracked :-)", "Cracked...:-)" ,MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
fclose(f);
}


Ano, je to ta samá kostra z Lekce 1. Ale my si ji samozřejmě upravíme. Jelikož chceme patchnout 3 byty, musíme si najít jejich offsety, a tento cyklus (tohoto kódu), 3x zopakovat. Vypíšu zde offsety které patchnem (podle návodu v Lekci 1 si je můžete také najít sami), a za pomlčkou uvedu, na který byte (hex) to pachnem.
7017D – 74
701B9 – 75
70C67 - 74

Kód potom bude asi takový:
(Kompilovaný patch a source je přoložený…)

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "Form1.h"
{
FILE *f;



int adr=0x7017D; //offset
int owr=0x74; //hex
f = fopen( "CompressMan_CrackMe_2.exe" , "rb+");
if (f==NULL) { MessageBox::Show( "File can not be found!", "Error", MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
exit(1);
}
fseek(f,adr,SEEK_SET);
fwrite(&owr,1,1,f);


adr=0x701B9; //offset
owr=0x74; //hex
f = fopen( "CompressMan_CrackMe_2.exe" , "rb+");
if (f==NULL) { MessageBox::Show( "File can not be found!", "Error", MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
exit(1);
}
fseek(f,adr,SEEK_SET);
fwrite(&owr,1,1,f);

adr=0x70C67; //offset
owr=0x74; //hex
f = fopen( "CompressMan_CrackMe_2.exe" , "rb+");
if (f==NULL) { MessageBox::Show( "File can not be found!", "Error", MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
exit(1);
}
fseek(f,adr,SEEK_SET);
fwrite(&owr,1,1,f);




MessageBox::Show( "Cracked :-)", "Cracked...:-)" ,MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
fclose(f);
}


Dneska jsem cracknul jednu hru, tak se příště mrknem, jak jsem to udělal ;-). Tak zatím Zdarec!