Copy Link
Add to Bookmark
Report

2x07 Full Reverse (Target VCT #1)

eZine's profile picture
Published in 
phearless
 · 14 Jan 2024

                     [ Target: VCT #1 ] 

pH#2 .............F.u.l.l..R.e.v.e.r.s.e............. [ #Sadrzaj ]
0x01 ................................................ [ Intro ]
0x02 ................................................ [ Tools of trade ]
0x03 ................................................ [ Unpacking ]
0x04 ................................................ [ Patching ]
0x05 ................................................ [ Outro & Greetz ]


--[ 0x01 ]----------------------------------------------[ Intro ]

Dobro dosli na strane pH eZina posvecene reversingu! Iako se moze ciniti
da je reversing u senci VX i Hack scene, nije tako. Stoga cu ja danas
uraditi sve sto moguce kako bih stavio reversing na isti nivo kao i VX
scenu. Da bih ovo ucinio stavio sam pred sebe jedan jako obiman zadatak,
u ovom broju pH ja cu opisati ukupno tri razlicita crackmea grupe VCT. Da
resicu tri njihova crackmea koje su objavili na sajtu www.crackmes.de,
najvecoj bazi crackmea na internetu.
Sama meta, to jest problem, koji cemo danas popravljati je VCT #1.
Pravila reversinga ove mete su veoma jednostavna, sve je dozvoljeno,
narocito patchovanje jer nam je zadatak da patchujemo NAG. Sta je NAG?
NAG je poruka koju autor programa ostavlja da bi vas obavestio o
stvarima kao sto je istekla registracija programa, informacija o
kupovanju programa ili jednostavno zeli da vas iznervira cinjenicom da
treba da kliknete na OK da bi ste startovali program! Znate vi o kojim
porukama ja ovde pricam... U datoj meti se nalaze dva NAGa koje treba
ubiti, stoga ce ovde biti dosta vezbe za pocetnike.

--[ 0x02 ]---------------------------------------------[ Tools of trade ]

Da bi smo "popravili" ovaj crackme, trebace nam neki "vaspitni" alati:

[+] OllyDBG v.1.10 .................................. http://www.wasm.ru
[+] LordPE Delux .................................... http://www.wasm.ru
[+] ImpRec v.1.6 .................................... http://www.wasm.ru
[+] PeID v0.93 ...................................... http://www.wasm.ru

i naravno meta:

[+] VCT #1 .......................................... my.target1.zip

Svi ovi alati su neophodni svakom reverseru pa predlazem da ako ih vec
nemate, podhitno ih nabavite! Bez njih se dalje citanje ovog teksta ne
isplati!

--[ 0x03 ]---------------------------------------------[ Unpacking ]

Pre nego sto pocnemo sa patchovanjem samog NAG ekrana, koji je inace ako
se neko od vas pita napisan na vietnamskom, moracemo da odpakujemo metu
koja je pakovana sa svima dobro poznatim pakerom ASPack 2.12 -> Alexey
Solodovnikov. Za ovo postoji stvarno dosta nacina ali ja cu ovde opisati
samo dva:

--= Nacin 1 =------------------------------------------[ Unpacking ]

Nasu metu mozemo odpakovati pomocu y0dinog programa ASPackDie. Ovaj
program je takodje genericki unpacker za sve 2.x verzije ASPacka. Ovaj
program se moze preuzeti sa adrese http://y0da.cjb.net i veoma je
jednostavan za koriscenje.

--= Nacin 2 =------------------------------------------[ Unpacking ]

Mozda najtezi i najduzi ali definitivno i najbolji nacin za odpakivanje
pakovanih aplikacija je rucni nacin. Za ovo cemo otvoriti metu pomocu
Ollya. Na samom OEPu pakovane metevidecemo sledece:

00404001 > 60 PUSHAD
00404002 E8 03000000 CALL vct_crac.0040400A
00404007 - E9 EB045D45 JMP 459D44F7

Posto je ovo ocigledno deo koda koji pripada pakeru pritisnucemo jednom
dugme F8 posle cega cemo se naci na sledecoj ASM komandi, to jest na
sledecem CALLu. Ako pogledate registe videcete da se ESP registar
promenio:

EAX 00000000
ECX 0012FFB0
EDX 7FFE0304
EBX 7FFDF000
ESP 0012FFA4 <- Crven
EBP 0012FFF0
ESI 00560718
EDI 77F5164E ntdll.77F5164E
EIP 004AF002 vct_crac.004AF002

Selektovacemo ovaj registar i kliknucemo desnim dugmetom na njega posle
cega cemo izabrati opciju Follow in Dump. Ovo ce nas odvesti na sledece
mesto u Hex dumpu:

0012FFA4 4E 16 F5 77 18 07 56 00 N..w..V.
0012FFAC F0 FF 12 00 C4 FF 12 00 ........
0012FFB4 00 F0 FD 7F 04 03 FE 7F ........
0012FFBC B0 FF 12 00 00 00 00 00 ........

Ovde cemo postaviti jedan memoriski break-point na prva cetiti bajta, to
jest na 4E,16,F5,77. Nji cemo selektovati i desnim klikom cemo izabrati
sledecu opciju: Breakpoint -> Hardware, on access -> Dword. Posle
postavljanja ovog break-pointa ostaje nam da kliknemo na F9, posle cega
cemo se naci ovde:

004043B0 /75 08 JNZ SHORT vct_crac.004043BA
004043B2 |B8 01000000 MOV EAX,1
004043B7 |C2 0C00 RET 0C
004043BA \68 00104000 PUSH vct_crac.00401000
004043BF C3 RET

Sada nam ostaje samo da 3x pritisnemo F8, to jest da izvrsimo sve
komande od, ukljucujuci i, RET komandu. Posle ovoga cemo se naci na
pravom OEPu zapakovane mete:

00401000 6A DB 6A ; CHAR 'j'
00401001 00 DB 00
00401002 6A DB 6A ; CHAR 'j'

Ali da li je ovo OEP? Naravno da jeste, Olly samo nije stigao da
analizira kod. Ali posle klika na CTRL + A, Olly ce analizirati kod i
onaj ne citljivi kod ce postati ovo:

00401000 . 6A 00 PUSH 0 ; /hTemplateFile = NULL
00401002 . 6A 03 PUSH 3 ; |Attributes = READONLY
00401004 . 6A 00 PUSH 0 ; |Mode = 0
00401006 . 6A 00 PUSH 0 ; |pSecurity = NULL
00401008 . 6A 00 PUSH 0 ; |ShareMode = 0
0040100A . 6A 00 PUSH 0 ; |Access = 0
0040100C . 68 9C314000 PUSH 0040319C ; |FileName = "\\.\SICE"
00401011 . E8 24020000 CALL 0040123A ; \CreateFileA

Dakle ovo je mesto gde cemo uraditi dump pomocu LordPEa i popravku
importa pomocu ImpReca. Zapamtite samo da je adresa pravog OEPa jednaka
00401000 - 00400000 = 1000, to jest RVA - ImageBase = OEP.

--[ 0x04 ]---------------------------------------------[ Patching ]

Kada smo uspesno odpakovali nasu metu otvoricemo je pomocu Ollya da bi
smo pronasli dva NAGa koja bi trebalo da patchujemo. Da ima ih ukupno
dva, prvi se pojavljuje na samom pocetku, a drugi prilikom izlaska iz
crackmea.
Posle odpakivanja OEP se menja sa standardnog ASPack OEPa na sledeci ASM
kod:
00401000 . 6A 00 PUSH 0 ; /hTemplateFile = NULL
00401002 . 6A 03 PUSH 3 ; |Attributes = READONLY
00401004 . 6A 00 PUSH 0 ; |Mode = 0
00401006 . 6A 00 PUSH 0 ; |pSecurity = NULL
00401008 . 6A 00 PUSH 0 ; |ShareMode = 0
0040100A . 6A 00 PUSH 0 ; |Access = 0
0040100C . 68 9C314000 PUSH 0040319C ; |FileName = "\\.\SICE"
00401011 . E8 24020000 CALL 0040123A ; \CreateFileA
00401016 . 83F8 FF CMP EAX,-1
00401019 . 74 06 JE SHORT dmp.00401021
0040101B . 50 PUSH EAX ; /ExitCode
0040101C . E8 1F020000 CALL <ExitProcess> ; \ExitProcess

Ovo kod ne predstavlja nista specijalno, ovo je samo standardan nacin za
detekciju SoftICE debuggera pomocu CreateFileA comande. Pored vxd
reference ka SotfICEu \\.\SICE takodje se pojavljuje i referenca
\\.\NTICE ako se radi o NT sistemima. Da bi smo ovu detekciju zaobisli,
naravno ako koristite SoftICE, dovoljno je da patchujete JE skok sa
adrese 00401019 u JMP. A ako pogledate malo ispod ovih par komandi
primeticete da se tu nalazi prvi NAG. Taj deo koda izgleda ovako:

00401021 > \6A 00 PUSH 0 ; /Style = MB_OK
00401023 . 68 20304000 PUSH 00403020 ; |Title = "... nag ..."
00401028 . 68 00304000 PUSH 00403000 ; |Text = "..."
0040102D . 6A 00 PUSH 0 ; |hOwner = NULL
0040102F . E8 E2010000 CALL <MessageBoxA> ; \MessageBoxA

Naravno ubijanje NAG ekrana se radi veoma lako, naime potrebno je samo
NOPovati sve PUSH komande koje predhode CALLu koji se koristi za
prikazivanje NAGa. Operacija NOPovanja se radi duplim klikom na
selektovanu komandu i unosenjem reci NOP u novo-otvoreni prozor. Posle
klika na OK ili <ENTER> Olly ce selektovanu komandu promeniti u NOP,
posle cega se ona nece vise izvrsavati. Dakle posle NOPovanja svih ovih
komandi imacemo sledece stanje:

00401021 90 NOP
00401022 90 NOP
00401023 90 NOP
00401024 90 NOP
00401025 90 NOP
00401026 90 NOP
00401027 90 NOP
00401028 90 NOP
00401029 90 NOP
0040102A 90 NOP
0040102B 90 NOP
0040102C 90 NOP
0040102D 90 NOP
0040102E 90 NOP
0040102F 90 NOP
00401030 90 NOP
00401031 90 NOP
00401032 90 NOP
00401033 90 NOP

Posto postoji jos jedan NAG u programu potrazicemo ga traceovanjem kroz
kod, to jest pritiskanjem na F8 sve dok ne dodjemo do sledeceg CALLa:

0040104A . 6A 0A PUSH 0A
0040104C . FF35 AC314000 PUSH DWORD PTR DS:[4031AC]
00401052 . 6A 00 PUSH 0
00401054 . FF35 A8314000 PUSH DWORD PTR DS:[4031A8]
0040105A . E8 0B000000 CALL 0040106A

Posle izvrsavanja ovog CALLa glavni prozor mete ce se pojaviti na
ekranu. Posto znamo da se NAG izvrsava nakon izlaska iz ove mete
postavicemo jedan obican break-point (pritiskom na F2) na sledecu adresu
koja se nalazi odmah ispod CALLa koji je zaduzen za prikazivanje ovog
prozora, postavicemo break-point na adresu 0040105A.

0040105F |. E8 61010000 CALL 004011C5
00401064 |. 50 PUSH EAX ; /ExitCode
00401065 \. E8 D6010000 CALL <ExitProcess> ; \ExitProcess

Naravno posle zatvaranja glavnog prozora nase mete zavrsicemo na nasem
break-pointu. Ovaj put cemo pritisnuti F7 da bi smo usli u CALL na adresi
0040105F. Zasto? Zato sto se posle ovog CALLa nalazi jos samo
kernel32.ExitProcess CALL koji sluzi za gasenje nase mete. Iz ovog
razloga zakljucujemo da se drugi NAG nalazi u CALLu sa adrese 0040105F.
Kada udjemo u taj CALL videcemo sledece:

004011C5 /$ 6A 00 PUSH 0 ; /Style = MB_OK
004011C7 |. 68 66304000 PUSH 00403066 ; |Title = "..."
004011CC |. 68 40304000 PUSH 00403040 ; |Text = "... nag ..."
004011D1 |. 6A 00 PUSH 0 ; |hOwner = NULL
004011D3 |. E8 3E000000 CALL <MessageBoxA> ; \MessageBoxA
004011D8 \. C3 RET

I kao sto vidimo bili smo u pravu! Trazeni NAG se zaista nalazi u ovom
CALLu i njega cemo kao i prvi NAG ukloniti na isti nacin, a posle
patchovanja nasa meta ce izgledati ovako:

004011C5 90 NOP
004011C6 90 NOP
004011C7 90 NOP
004011C8 90 NOP
004011C9 90 NOP
004011CA 90 NOP
004011CB 90 NOP
004011CC 90 NOP
004011CD 90 NOP
004011CE 90 NOP
004011CF 90 NOP
004011D0 90 NOP
004011D1 90 NOP
004011D2 90 NOP
004011D3 90 NOP
004011D4 90 NOP
004011D5 90 NOP
004011D6 90 NOP
004011D7 90 NOP
004011D8 \. C3 RET

Pored ovog nacina patchovanja NAGova postoji i drugi nacin patchovanja.
Ovaj drugi nacin se koristi u slucaju da program broju NOPove koji se
nalaze u njegovom kodu. Ovaj patcherski trik se ogleda u patchovanju
zeljenih komandi u novi niz komandi koje cine dve ASM komande INC EAX,
DEC EAX... Prva komanda povecava vrednost EAXa za jedan a druga smanjuje
tu vrednost za jedan. Ovde samo treba paziti da ako EAX ima uticaja na
dalje izvrsavanje komandi bude isi broj DEC EAX i INC EAX komandi.
Primenjeno na ovaj primer to izgleda upravo ovako:

004011C5 40 INC EAX
004011C6 48 DEC EAX
004011C7 40 INC EAX
004011C8 48 DEC EAX
004011C9 40 INC EAX
004011CA 48 DEC EAX
004011CB 40 INC EAX
004011CC 48 DEC EAX
004011CD 40 INC EAX
004011CE 48 DEC EAX
004011CF 40 INC EAX
004011D0 48 DEC EAX
004011D1 40 INC EAX
004011D2 48 DEC EAX
004011D3 40 INC EAX
004011D4 48 DEC EAX
004011D5 40 INC EAX
004011D6 48 DEC EAX
004011D7 40 INC EAX
004011D8 \. C3 RET

Pored ovoga postoji i jos jedan nacin patchovanja koji ce vam omoguciti
da uklonite NAG tako da izmenite samo jedan bajt! Ovaj nacin se uvek moze
primenjivati a ta promena bi izgledala ovako:

004011C5 /$ 6A FF PUSH FF ; /Style = MB_OK
004011C7 |. 68 66304000 PUSH 00403066 ; |Title = "..."
004011CC |. 68 40304000 PUSH 00403040 ; |Text = "... nag ..."
004011D1 |. 6A 00 PUSH 0 ; |hOwner = NULL
004011D3 |. E8 3E000000 CALL <MessageBoxA> ; \MessageBoxA
004011D8 \. C3 RET

ili

004011C5 /$ 6A 00 PUSH 00 ; /Style = MB_OK
004011C7 |. 68 66304000 PUSH 00403066 ; |Title = "..."
004011CC |. 68 40304000 PUSH 00403040 ; |Text = "... nag ..."
004011D1 |. 6A FF PUSH FF ; |hOwner = NULL
004011D3 |. E8 3E000000 CALL <MessageBoxA> ; \MessageBoxA
004011D8 \. C3 RET

Kao sto vidite potrebno je samo izmeniti MessageBox tip u neki broj za
koji ne postoji pravi tip MessageBoxa ili mozete programu proslediti hWND
koji ne postoji. Ovaj drugi nacin, patchovanja samo jednog bajta, je
mnogo isplatljiviji ako radite inline patching nekog pakera!

Konacno kada smo uradili sve promene jednostavnim klikom u CPU prozoru
Ollya na desno dugme -> Copy to executable -> All modifications -> Copy
All -> desno dugme -> Save file... snimicemo sve promene direktno pomocu
Ollya. Ovo tehnika patchovanja ukida potrebu za neki Hex Editorom pomocu
koga bi ste direktno menjali fajl!

--[ 0x05 ]---------------------------------------------[ Outro & Greetz ]

Naravno ovo je bio jedan newbie tekst koji bi trebalo pocetnicima da
pokaze kako se to uklanjaju razlicite NAG poruke iz programa. Bas ovakve
lake primere bi trebalo da resavaju svi pocetnici koji zele da se bave
reversingom. Ostanite uz pH jer slede jos dva izvrsna reversing teksta...

Greetz:

SeekNDestroy | TSRh | EMiNENCE | CoolPHat | ELUSIVE | [ES]
b4d_s3c70r | asphyx | B0r0 | loco | Kostolomac | Virus Krew | Jezgra

--[ EOF ]----------------------------------------------[ made by Ap0x ]

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT