RE FORUM

[REVERSE ENGINEERING] => Newbie => Topic started by: llAmElliK on November 10, 2005, 02:28:27 PM

Title: Newbie crackME - 11 - [SOLVED]
Post by: llAmElliK on November 10, 2005, 02:28:27 PM
newbie crackME - 11

Packer - není
Compiler - MASM/TASM
Ochrana - N/S
Ře?ení - Valid SERIAL nebo KEYGEN

Odzkou?eno na w2k a win XP - ale snad nebudou potí?e ani jinde.

Jedno prý jednoduché cme od HypnotiX pou?ívající velmi známý asymetrický crypto-algoritmus.

tHx to HypnotiX.
Title: Newbie crackME - 11 - [SOLVED]
Post by: Master on November 10, 2005, 02:57:17 PM
ahh kurva,no uvidime...jak prijdu domu,tak stahnu

Edit:Kurna,tak sem se v tom tak nejak rejpal.Vim ?e to je crypto Base64.
Nasel sem si i jak pracuje a mam uz udelanej i coder a dekoder jmena ve VB 2k5.
Jediny co me tam tak trapi,je udajnej malej antidebug,na kterej nemuzu prijit  :confused: Pak jeste sem nasel otaceni jmena a nejake cachrovani s 65537.Ale neco,co by pripominalo,ze by pracovalo s kryptem,sem zatim nenasel...  :(
Title: Newbie crackME - 11 - [SOLVED]
Post by: llAmElliK on November 11, 2005, 11:38:36 AM
Prej to je o trochu počítání říkal Hypno:D - co se týče antidebug - neznamená to v?dycky pád aplikace - jsou i zákeřněj?í metody - člověk trasuje a trasuje a počítá a počítá,pak to dopočítá (správne),vypne debugger, zadá KEY a ono h*v*o........BAD BOY.....
Title: Newbie crackME - 11 - [SOLVED]
Post by: Master on November 11, 2005, 01:29:03 PM
jo,tuhle metodu znam a napadle me hned jako prvni.A rikas o trochu poctani,no nevim,myslim,?e tohle cme bude zase asi skupinova prace jak cme 2  :eek:
Title: Newbie crackME - 11 - [SOLVED]
Post by: CZerezpiCZkin on November 11, 2005, 09:20:15 PM
A zasa sa pustit do studovania... OK
Title: Newbie crackME - 11 - [SOLVED]
Post by: Z!L0G80 on November 12, 2005, 06:42:57 PM
rada1: je pouzit biglib ;)
Title: Newbie crackME - 11 - [SOLVED]
Post by: CZerezpiCZkin on November 12, 2005, 07:46:46 PM
2 Z80:
Ten biglib som si uz vsimol, ale zatial som sa nedopracoval k tomu, abu som to aj pochopil...
HypnotiX tam pise aj o nejakom jednoduchom Antidebug, ale nic take podozrive som si tam nevsimol... Bojim sa, ze to bude nad moje sily, ale este sa pokusat budem.
Title: Newbie crackME - 11 - [SOLVED]
Post by: Master on November 12, 2005, 08:11:28 PM
jaksi nemuzu o biglibu nic najit,a neco co sem nasel bylo v nemcine nebo rusky :(
Title: Newbie crackME - 11 - [SOLVED]
Post by: Z!L0G80 on November 12, 2005, 09:34:21 PM
Quote from: Master
jaksi nemuzu o biglibu nic najit,a neco co sem nasel bylo v nemcine nebo rusky :(

http://www.reteam.org/fleur/archive/files/projects/biglib.zip

rada2: ten a-debug trick je
Code: [Select]

.text:00401392                 or      dword ptr [esp], 100h
.text:00401399                 popf
.text:0040139A                 inc     eax
.text:0040139B                 jz      short near ptr loc_4013B0+4
.text:0040139D                 inc     eax
.text:0040139E                 dec     ecx

vyvola to vyjimku(pokud sem pochopil dobre) a pokracuje se tady
Code: [Select]

.text:00401248                 mov     ecx, [esp+20h+var_14]
.text:0040124C                 mov     eax, [esp+20h+var_1C]
.text:00401250                 cmp     dword ptr [eax], 80000004h
.text:00401256                 jnz     short loc_4012B4
Title: Newbie crackME - 11 - [SOLVED]
Post by: CZerezpiCZkin on November 12, 2005, 10:00:53 PM
Quote from: Z!L0G80
http://www.reteam.org/fleur/archive/files/projects/biglib.zip

rada2: ten a-debug trick je
Code: [Select]

.text:00401392                 or      dword ptr [esp], 100h
.text:00401399                 popf
.text:0040139A                 inc     eax
.text:0040139B                 jz      short near ptr loc_4013B0+4
.text:0040139D                 inc     eax
.text:0040139E                 dec     ecx

vyvola to vyjimku(pokud sem pochopil dobre) a pokracuje se tady
Code: [Select]

.text:00401248                 mov     ecx, [esp+20h+var_14]
.text:0040124C                 mov     eax, [esp+20h+var_1C]
.text:00401250                 cmp     dword ptr [eax], 80000004h
.text:00401256                 jnz     short loc_4012B4



 :eek:
Po prvy raz vidim taketo nieco ako a-debug. Mohol by som poprosit o male objasnenie ako detekuje samotny debugger? Pri krokovani som to akosi nepochopil. Cakal som nieco ako API fcia IsDebuggerPresent, len dobre schovana...
Heh, vidim, ze mam hodne co dobiehat. :(
Title: Newbie crackME - 11 - [SOLVED]
Post by: Master on November 12, 2005, 11:17:19 PM
Máme... :confused:
Title: Newbie crackME - 11 - [SOLVED]
Post by: llAmElliK on November 13, 2005, 11:45:15 AM
Co se týče toho antidebug - ten sem popisoval v threadu o EXE-Protectoru(REQUEST - SQLite Analyzer) - cituju :

kod (-1) hodnota FFFFFFFFh znamená detekci nějakýho toolu v paměti (mů?e to bejt debugger ale právě i unpacker) - a je to postavený na volání SEHu před instrukcí - v případě ?e je program trasován tak SEH není volán a tím dojde ke spadnutí aplikce - pokud to je tak je třeba najít to místo.
 Heh - zapomněl jsem co mně k tomu vede - instrukce POPFD!!!!
 Je třeba mrknout na net na fintu Trap Flag..........

Nevím jestli tady aplikace padá,nebo se děje na základě toho něco jinýho - v ka?dým případě to je odchyt SINGLE STEP.Důle?itý je teda odsledovat registr gde v registru resp flagu-TRAP (T) nakočí 1 - pokud pou?ijte Sice a myslím ?e to tam fungovat nebude.........(mo?ná se pletu) - mo?ná se pletu úplně - je?tě jsem to CME ani nespustil v Olly není time - pí?u jen na základě toho co sem napsal Z80.
Title: Newbie crackME - 11 - [SOLVED]
Post by: Master on November 13, 2005, 08:57:12 PM
No nevim.I tak nam to skoro porad nic nerika.Trochu sem studoval ten trapflag.
Nakonec sem nasel jednu metodu,jak to udajne obejit,ale nevime,jestli to je spravne.Zde je nase reseni:

00401392      810C24 007000>OR      DWORD PTR SS:[ESP], 100
sme změnili na:
00401392      810C24 007000>OR      DWORD PTR SS:[ESP], 7000

Je mo?no???
Title: Newbie crackME - 11 - [SOLVED]
Post by: Master on November 16, 2005, 07:55:19 PM
Kua,ja uz fakt nevim.Z nejakeho me neznameho duvodu to preskakuje 2 velky cykly a na konci se mi porovnava moje jmeno a prazndy string a ani za boha nemuzu prijit,proc to preskakuje  :(  :confused:
Title: Newbie crackME - 11 - [SOLVED]
Post by: llAmElliK on November 17, 2005, 01:17:08 PM
Hi,

tady si dovolím kousek zajímavýho kodu - dole v attachmentu máte popis debugg registrů ,třebas to trochu pomů?e k pochopení + do Olly jsem upload jeden plugin do olly;) - no a tady v tom návodu by vás mohla zajímat kapitola 3.1 s názvem - How to hook a SEH?

 
Code: [Select]
call instal_SEH
mov ecx,dword ptr[esp+0Ch] ;CONTEXT
mov eax,dword ptr[esp+04h] ;RECORD
.if dword ptr[eax]==EXCEPTION_SINGLE_STEP
add [ecx+CONTEXT.regEip],2
xor eax,eax
mov [ecx+CONTEXT.iDr0],eax
mov [ecx+CONTEXT.iDr1],eax
mov [ecx+CONTEXT.iDr2],eax
mov [ecx+CONTEXT.iDr3],eax
mov [ecx+CONTEXT.iDr6],eax
mov [ecx+CONTEXT.iDr7],155h
Title: Newbie crackME - 11 - [SOLVED]
Post by: CZerezpiCZkin on November 17, 2005, 07:25:22 PM
No, neviem, ci si myslim spravne - opravte ma, ak sa mylim. Ale to, co poslal llAmElliK je obchadzanie hardwareovych BP. Ja by som skor typoval, ze toto CME detekuje tie softwareove BP.
Ten anti-debug trik, co nam nasiel Z80 sa da obist sposobom, ktory tu uz naznacil Master. Lenze je tam este nieco, co "upravuje" podstatne cykly...
Podla toho, co som si nasiel, tak softwareove BP maju pointu v tom, ze debugger instrukciu, kde je zadany BP prepise na INT3 (0CCh) a tym pozastavi beh programu. Pri ochrane sa skontroluju "podstatne" instrukcie a  ak sa tam nenajde 0CCh, tak nie je nastaveny ziaden soft. BP. Tolko teoria...

Chcel by som sa spytat, ci existuje nejaka metoda, ako toto hladanie BP najst v kode. Lebo to porovnavanie sa moze prevadzat vela sposobmi a neviem ako ho najst...
Title: Newbie crackME - 11 - [SOLVED]
Post by: llAmElliK on November 17, 2005, 07:37:28 PM
Já sem to tu nepsal aby ste obcházeli HW Breakpointy - ale abyste se zaměřili  na SEH - zkus si jenom dát kamkoliv do kodu MEMORY Breakpoint a mrkni co ti to dělá se jmenem - to jen tak pro zajímavost .
A co se týče tý metody ne kterou se ptá? - znám packery který to dělaj obráceně - nastaví jakoby HW breakpointy a ty tam musí bejt - pokud ty lokalizovaný místo přepí?e? čímkoliv jiným je to chyba a program to pozná. OCCh a jeho implementace je trochu slo?itěj?í proto?e to se dá dát pouze do místa kde 0CCh není jako něco jiného (co tam má být) - proto se třebas pou?ívá CRC výpočet bloku dat (těch který chceme chránit) vyjde nám výsledek XXXXXXh
tím ?e do místa vlo?íme BP přičítá se k výsledku CRC hodnota BP čili 0CCh v tu chvíli výsledek CRC nesouhlasí a program to pozná.......to je jeden ze způsobů.
A jinak ten kod co sem dal vej? je z toho cme tak ho porovnej s tím co je v tom tutoriálu.......
Title: Newbie crackME - 11 - [SOLVED]
Post by: CZerezpiCZkin on November 17, 2005, 08:10:24 PM
Ano, ten kod co si sem dal som si pozrel. Je to vlastne ten isty kus kodu, ktoreho zaciatok dal do tohoto threadu aj Z80. Problem ale je v tom, ze tam sa beh programu ani nedostane... (teda na BP mi to nezareaguje, este je moznost, ze to je nejako osetrene proti tomu BP...)


EDIT:
Heh, a tomuto hovori HypnotiX ze jednoduchy Anti-debug trik... :eek:
Title: Newbie crackME - 11 - [SOLVED]
Post by: Master on November 17, 2005, 08:29:01 PM
No ja kdyz dam memory BP,tak mi to jebne cele a mam exception
Title: Newbie crackME - 11 - [SOLVED]
Post by: llAmElliK on November 17, 2005, 10:53:44 PM
Zatrhněte v Olly Debugging Options v?e - hlavně Memory AV a INT3 Break - klidně v?echno - úplně dole zadejte C0000004 (SINGLE STEP) + pou?íveje SHIFT+F9 - celej problem je v SEHu.
Hypno tam nemá ?ádný IF a ELSE ale v?e obsluhuje SEH - kontrolujte registry...nebo ať sem teda hodí nějakej hint - proto?e SEH se chová jinak v XP a v ostatních btw kdo u? si v?im instrukcí INT3? .....
Title: Newbie crackME - 11 - [SOLVED]
Post by: Master on November 18, 2005, 08:11:59 AM
nevim jak myslis vsim,ale vsechny co sem nasel sem vynopoval :)
Title: hint #1
Post by: HypnotiX on November 18, 2005, 03:37:50 PM
ta jo, zamerte se na tento radek:
00401391   . 9C             PUSHFD
00401392   . 810C24 0001000>OR DWORD PTR SS:[ESP],100
00401399   . 9D             POPFD

je to nastaveni Trap priznaku (viz Iczelion 30ti tutorial  (u picassa dokonce v cestine od Goldana))
jak se dostanete k tomuto mistu tak dejte v olly  View -> SEH chain a nahore mate obsluhu SEHu (doporucuju nastudovat SEH (Cracking bez tajemstvi nebo net)) dejte si do toho sehu BreakPoint a sledujte (zalezi take na nasteveni Exceptions v olly) a nakonec jeden mega hint v priloze mate Crypto signature do IDY tak doufam ze s tim uz pohnete
Title: Newbie crackME - 11 - [SOLVED]
Post by: Z!L0G80 on November 18, 2005, 03:39:53 PM
rada3: co se tyce jak to debugovat me staci 3BP ... prvni na 40135F pak trasovat do 401391 pak F9... druhej 401277 trasovat do 4012B4 pak F9 ... atreti na 4013B6 a dotrasovat.. melo by to fungovat ...
Title: jak na IDA
Post by: HypnotiX on November 18, 2005, 03:51:01 PM
To CryptoSIG.sig zkopirujte do slozky sig otevrete cm v IDe pak otevrete  menu File -> Load file -> FLIRT signature file a otevrete "CRYPTOSIG  Crypto by Cauchy//HTBTeam" a IDA vam najde vsechny pouzite crypto funkce v cm
Title: Newbie crackME - 11 - [SOLVED]
Post by: Master on November 18, 2005, 08:00:02 PM
Poradí mi nekdo s idou???Nevim co sem zkurvila,ale mam tam tohle(prilo?eny screen).Tímhle se stava pro mě IDA nepou?itelna a nevim co s tim.Vubec to neumim ovladat...Poradi mi nekdo co s tim??
Title: Newbie crackME - 11 - [SOLVED]
Post by: CZerezpiCZkin on November 19, 2005, 04:12:55 PM
No, prisiel som asi na toto:
Pracuje sa s formatom BigNum, kde prvy DWORD znamena pocet DWORDov obsadenych cislom. Potom nasleduje vlastne cislo, zacinajuc od najspodnejsieho DWORDu.
Asi takto:
             hexa cislo 010001h je po prevedeni do BigNum
             01 00 00 00    01 00 01 00



Postup vypoctu kontrolovaneho retazca:

X = BigNum[ retazec zadaneho MENA ]
E = BigNum[ hexa prepis zadaneho KODu ]
N = BigNum[0C84EC7D61A79A101771BF5533D4D38B03282831819F92C5D21h]
------------------------------------------

  Z = X ^ E mod N
  Vysledok = Z ^ 010001h mod N

Premenna vysledok sa potom len prekopiruje po bitoch na adresu 004043A8 odkial sa porovnava so zadanym menom.
Asi ani netreba pripominat, ze sa tieto dva retazce musia rovnat. Snad este poznamka, ze to hexa cislo 010001h s ktorym sa pocita vysledok je vlastne len hexa prepis cisla 65537.
Moj problem ale spociva v tom, ze zatial som este neprisiel na sposob, ako mam tento postup reverznut...

EDIT:
Thx 2 HypnotiX, tu chybku som si nevsimol... Prave som to poopravil, dufam, ze uz spravne, mala by to byt konstanta.
Title: trochu jinak
Post by: HypnotiX on November 19, 2005, 05:05:13 PM
neni to  Z = X ^ E mod 07h ale jak jsi psal o tom BigNum tak 07 je pocet tech DWORDu takze to cislo zacina az na 7 DWORDu, na to cislo 010001h se podivejte do RSA tools je tam taky, v priloze je map.map coz je vitazek z IDA pomoci MapConv pluginu do Olly si to zkopirujte do olly a budete videt vsechny funkce co nasla IDA take v olly.
Title: Newbie crackME - 11 - [SOLVED]
Post by: CZerezpiCZkin on November 20, 2005, 08:33:48 PM
Akosi sa nedokazem dopocitat k spravnemu vysledku... (Budem pisat v jednotnom cisle, ale nie su to len ciste moje zasluhy - pracujeme na tom spolocne s Masterom.)

Zadane meno: "t4C"
Pre overenie spravnosti su pouzite tieto dve rovnice (ta prva sifruje, ta druha to rozsifruje):
                     Mcrypt = M^e mod n
                     M = Mcrypt^d mod n
----------------------------
 
M = 00743443h    (meno v BigNum tvare)
d = 010001h        (hexa prepis cisla 65537)
n = 0C84EC7D61A79A101771BF5533D4D38B03282831819F92C5D21h (to je konstanta)

Ked premennu n faktorizujem dostanem dve prvocisla P a Q   (zo vztahu n = P * Q):
P = 0D4A157BE36A2E7A0EB299294Bh
Q = 0F12A021FC292CBC69AC151BC3h

Z tychto prvocisiel si mozem vypocitat F zo vztahu F = (P-1) * (Q-1) :
F = 0C84EC7D61A79A101771BF55320F0831252EF27E1A19A7E1814h

Dalej by som mohol vychadzat z rovnice:
d = e^(-1) mod F
Lenze tu som sa zasekol, poznam vsetko okrem premennej e, ktoru musim vypocitat. V nej by sa mal nachadzat hexa prepis spravneho kodu. Lenze neviem to spravne upravit a vlastne ani neviem, ci som spravne postupoval. Helpne mi niekto?
Title: Newbie crackME - 11 - [SOLVED]
Post by: llAmElliK on November 21, 2005, 12:05:30 PM
Jeliko? se svou pílí a umem neustále přibli?ujete blí? a blí? dovolím si opakovat co sem konkretně Master-ovi řekl u? X - krát , nejedná se o RSA algo CRYPT a DECRYPT.
A co se týče E - to sem vám řekl taky - kde ho hledat,abyste se trochu pohnuli tak tohle :

 M = 00743443h    (meno v BigNum tvare)
d = 010001h        (hexa prepis cisla 65537) <-----------------------------
 n = 0C84EC7D61A79A101771BF5533D4D38B03282831819F92C5D2  1h (to je konstanta)

.....není D ale E (snad mi Hypno odpustí tohle upřesnění)

Jinak si nasypu popel na hlavu a říkám ?e sám bych to NEDAL ani náhodou - tak?e dr?ím těm co to dokázali a? sem palce;)
Title: Newbie crackME - 11 - [SOLVED]
Post by: Master on November 21, 2005, 06:21:19 PM
Já se asi vyvratim.My to měli celou dobu pred nosem a nevsimli sme si toho.
Thx to hypno za pripomenuti.

P.S. Mel si to vytrimovat :D
Title: Newbie crackME - 11 - [SOLVED]
Post by: Master on November 22, 2005, 08:00:33 PM
Tak tady je tutor.Případné chyby omluvte a nebo jeste lepe je opravte  :o
Title: Newbie crackME - 11 - [SOLVED]
Post by: Z!L0G80 on November 22, 2005, 08:41:41 PM
joooj ja kreten si to D neprevedl na DEC a ze me tu furt nevychazelo tak blba chyba  :eek:
Title: Newbie crackME - 11 - [SOLVED]
Post by: Master on November 23, 2005, 07:17:08 AM
to nic,jak sem zjistil,?e je to D v dec,a ?e to D se mi valelo v textaku uz asi 4 dny,tak sem se malem vybulil ze ?idle.Proto?e mam za to,?e jsem ho uz myslim i zkou?el,ale nefungoval mi kvuli jedine mezeře na konci,ktera vznikla pri kopirovani.