RE FORUM
[REVERSE ENGINEERING] => Newbie => Topic started 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.
-
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... :(
-
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.....
-
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:
-
A zasa sa pustit do studovania... OK
-
rada1: je pouzit biglib ;)
-
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.
-
jaksi nemuzu o biglibu nic najit,a neco co sem nasel bylo v nemcine nebo rusky :(
-
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
.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
.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
-
http://www.reteam.org/fleur/archive/files/projects/biglib.zip
rada2: ten a-debug trick je
.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
.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. :(
-
Máme... :confused:
-
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.
-
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???
-
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:
-
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?
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
-
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...
-
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.......
-
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:
-
No ja kdyz dam memory BP,tak mi to jebne cele a mam exception
-
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? .....
-
nevim jak myslis vsim,ale vsechny co sem nasel sem vynopoval :)
-
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
-
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 ...
-
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
-
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??
-
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.
-
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.
-
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?
-
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;)
-
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
-
Tak tady je tutor.Případné chyby omluvte a nebo jeste lepe je opravte :o
-
joooj ja kreten si to D neprevedl na DEC a ze me tu furt nevychazelo tak blba chyba :eek:
-
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.