Author Topic: Newbie crackME - 18->[SOLVED]  (Read 2337 times)

Master

  • [t4C]newbie child
  • VIP
  • *****
  • Posts: 615
Re: Newbie crackME - 18
« Reply #60 on: February 13, 2007, 06:29:15 PM »
Ja ho ani patchovat nechci,ale zarazilo me,ze kdyz sem se zastavoval na tech exceptionech v lvl6,tak sem treba udelal jenom jeden krok a dal to pustil F9 a stejne to bouchlo.S tema flagama si to jeste zkontrololuju co a jak.

CZerezpiCZkin

  • Junior Member
  • ***
  • Posts: 181
Re: Newbie crackME - 18
« Reply #61 on: February 13, 2007, 06:59:50 PM »
Quote from: Master
Ja ho ani patchovat nechci,ale zarazilo me,ze kdyz sem se zastavoval na tech exceptionech v lvl6,tak sem treba udelal jenom jeden krok a dal to pustil F9 a stejne to bouchlo.S tema flagama si to jeste zkontrololuju co a jak.


jasne, mrkni si tie flagy este na nete, ten moj popis bol dost povrchny.

nastaveny BP sa da zistovat cez overovanie int3 (kontrola prveho byte instrukcie na 0CCh), je to tiez jeden z druhov antidebugg.
ale v tvojom pripade mozno islo o to, ze si krokoval PRAVE cez to miesto, kde sa zistovala hodnota TF a preto ta to zhodilo, aj ked si to potom dalej uz spustil. nekrokuj cast PUSHFW-POPFW.
CZpCZ

eraser

  • repe cmpsb
  • Senior Member
  • ****
  • Posts: 268
  • Kill malware!
Re: Newbie crackME - 18
« Reply #62 on: February 15, 2007, 08:33:30 AM »
OK, tu je moje rie?enie v podobe keygenerátora - funguje i diakritika, zatiaľ absentuje final test a nechcelo sa mi ka?lať s výpočtom, resp. hľadaním P, Q a následne D pre lvl4. Neskor?ie ho snáď e?te updatujem, ale musím vyrie?iť poslednú úroveň.

V?etko je samozrejme prepísané do ANSI C, tak?e ?iadny vkladaný ASM sa opäť nekoná!   :p

Včera som tro?ku analyzoval lvl6 a mám odkrokované jednotlivé funkcie, ktoré sa dynamicky linkujú. Narazil som i na prvé algo, no ide to pomaly, obfuscation je nechutné a debugging takmer nulový.    :confused:

S Newbie CrackMe 18 to zrejme tento tý?deň nevyjde, lebo som si zabudol doma zopár materiálov, sakra.   :mad:


// edit: Pridaný kompletný  a upravený keygen! V prípade chýb, ma kontaktujte.
« Last Edit: February 16, 2007, 10:39:04 AM by eraser »
th3 r341 f4!1ur3 !5 wh3n y0u d0n't 134rn 4nyth!n6 fr0m 4ny 6!v3n 5!tu4t!0n
the real failure is when you don't learn anything from any given situation

eraser

  • repe cmpsb
  • Senior Member
  • ****
  • Posts: 268
  • Kill malware!
Re: Newbie crackME - 18
« Reply #63 on: February 16, 2007, 08:18:51 AM »
OK, keygenerátor je kompletný a lvl6 pokorený. Včera večer som na to po chvíľke do?iel. Ak má niekto stále s ním problémy, čítajte dalej, ak na to chcete prísť, tak tento príspevok ignorujte a poskú?ajte sa ďalej.

V lvl6 je na prvý pohľad zjavné, ?e je pou?itý SEH, antidebugging a tie? antidisassembling. OllyDbg mi prezradil, ?e na 004010C9 je SE handler. Potom som sa haluzne dostal ďalej, sledoval som volania, ktoré sa mi vypísali v stack okne.

Nasleduje nejaká spleť DB definícií (blok 00401711 - 00401897), čo sú v?ak in?trukcie, tak?e po označení celého bloku a zvolení funkcie Analysis - During next... - Command (thx RoboCop) sú čitateľné niektoré volania CALLs, čo dosť napovedá. V?iminite si e?te skok na 0040170C, ten nás presúva na koniec tejto spleti DB. Po men?ej úvahe a spôsobe, resp. poradi volania funkcií GetProcAddress a GetModuleHandleA som si uvedomil, ?e tie in?trukcie sú vlastne otočené, tak?e stačí celý blok otočiť a máme korektný kód. A toto sa deje i na ďal?ích miestach, kde vidno podozrivé DB definície a pred nimi skok na ich koniec.

Následne som na?iel ďal?ie volania, v zásobníku výsledný key (thx Master) a postupne som sa dovtípil, ako sa key generuje.

Tu je výčet jednolivých volaných funkcií.

0040187D GetProcAddress - GetDlgItemTextA (pomocou dynamického linkovania)
00401854 GetVolumeInformationA
call 00402660 - Convert Serial Number to Deciamal String  (buggy convert ???)
lstrlenA (pomocou dynamického linkovania)
call 0040119B - CRC32


V?imol som si plno volaní call 00401046, čo je vlastne BP check a CC si vypočítava pomocou 48 xor 84.   ;)

Konvertovanie Volume Serial čísla na reťazec sa mi zdá, ?e je tro?ku divné, tak?e som musel tento prepis vyu?iť i v mojom keygene, rovnako je na tom jedna funkcia v lvl5.

00401724 call Newbie_1.00401605 je volanie good/bad boy, v prípade úspechu sa zobrazí hlá?ka Goood job a pokiaľ overenie zlyhá, tak sa zatrasie oknom, čo zabezpečujú rutinky Sleep, GetWindowRect a SetWindowPos.


E?te dodám, ?e v OllyDbg mám nastavené v Debuging Options - Exeptions ignorovanie výnimiek.

Podrobnej?í popis spracujem v eseji, teraz je to trochu neucelené, no niektoré časti musím e?te preskúmať. Jedno z nich je i dvojité volanie GetVolumeInformation, atď. Nájde sa tam dosť haluziek, no do kritického bloku sa v?dy podarí ten jeden BP nahodiť.

// added: RoboCop mi poslal tento text, ktorý daný beh ozrejmí viacej.

Výhody kódu be?iaceho pospiatky

Hlavnou výhodou takéhoto kódu je skutočne to, ?e jeho činnosť je relatívne ťa?ko odhaliteľná. Okrem nesprávneho smeru toku programu toti? dĺ?ky in?trukcií, ktoré vkladáme po ka?dom riadku v časti be?iacej pospiatky, spôsobujú, ?e kód nie je správne disassemblovaný.

Debugger (resp. disassembler) toti? nevie, ?e SEH upravuje EIP a v skutočnosti je prvý bajt po ka?dej in?trukcii preskočený. Preto sa sna?í disassemblovať ako in?trukciu aj na?u informáciu o dĺ?ke. Jeho snaha samozrejme spoľahlivo deformuje zvy?ok in?trukcií.

zdroj: http://www.zive.sk/h/TestCentrum/AR.asp?ARI=115163
« Last Edit: February 16, 2007, 10:42:57 AM by eraser »
th3 r341 f4!1ur3 !5 wh3n y0u d0n't 134rn 4nyth!n6 fr0m 4ny 6!v3n 5!tu4t!0n
the real failure is when you don't learn anything from any given situation

CZerezpiCZkin

  • Junior Member
  • ***
  • Posts: 181
Re: Newbie crackME - 18->[SOLVED]
« Reply #64 on: February 16, 2007, 04:42:18 PM »
To, co popisujes sa nazyva Running Line a vymyslel to tusim jeden Rusak, ale jeho meno si teraz nespomeniem...
CZpCZ

eraser

  • repe cmpsb
  • Senior Member
  • ****
  • Posts: 268
  • Kill malware!
Re: Newbie crackME - 18->[SOLVED]
« Reply #65 on: February 16, 2007, 06:48:59 PM »
Jojo, v tom článku je to popísané a celkom dobre vysvetlené. Inak odporúčam jednak tú linkovanú časť 8, ale najskôr i časť 7. Potom skočiť na danú adresu 0x004010C9 a sledovať, jak je to povedomé... :)

Inak to označenie Running Line som na?iel len v tom článku na zive.sk, tak neviem, či je to korektné.  :confused:

Men?ia uká?ka sa dá nájsť i na tejto adrese...

http://www.wasm.ru/forum/viewtopic.php?pid=120154
th3 r341 f4!1ur3 !5 wh3n y0u d0n't 134rn 4nyth!n6 fr0m 4ny 6!v3n 5!tu4t!0n
the real failure is when you don't learn anything from any given situation

robocop

  • Newbie
  • *
  • Posts: 13
Re: Newbie crackME - 18->[SOLVED]
« Reply #66 on: February 16, 2007, 07:40:15 PM »
ten Rusak se jmenuje Serge Pachkovsky

eraser

  • repe cmpsb
  • Senior Member
  • ****
  • Posts: 268
  • Kill malware!
Re: Newbie crackME - 18->[SOLVED]
« Reply #67 on: February 16, 2007, 08:51:59 PM »
Ja u? som dávno tvrdil, ?e Rusáci sú jednoznačne lebkouni... paradoxom je, koľko z nich má brutálne znalosti, za ktoré by v USA mali iné pra?ule.

Inak, s Robocopom sme sa poustili do NOPovania size DBčiek a po preanalýze je to u? iné kafíčko... aby som citoval na?eho ruského priateľa, tak teper vsjo jasno.
th3 r341 f4!1ur3 !5 wh3n y0u d0n't 134rn 4nyth!n6 fr0m 4ny 6!v3n 5!tu4t!0n
the real failure is when you don't learn anything from any given situation

robocop

  • Newbie
  • *
  • Posts: 13
Re: Newbie crackME - 18->[SOLVED]
« Reply #68 on: February 18, 2007, 10:15:50 AM »
prikladam mensí ukazku zprehlednení kodu.... jeste me napadlo jestli nejak nevyuzit tech "size" mezi jednotlivyma instrukcema k uplnemu otoceni obraceneho kodu, to by bylo asi uplne nejlepsi

eraser

  • repe cmpsb
  • Senior Member
  • ****
  • Posts: 268
  • Kill malware!
Re: Newbie crackME - 18->[SOLVED]
« Reply #69 on: February 18, 2007, 01:52:33 PM »
Niektoré in?trukcie e?te nesedia (hlavne, ten záverečný jump - obfuscation ), tak?e dám sem i svoju verziu, ale mo?no som sa tie? niekde sekol.  :)
th3 r341 f4!1ur3 !5 wh3n y0u d0n't 134rn 4nyth!n6 fr0m 4ny 6!v3n 5!tu4t!0n
the real failure is when you don't learn anything from any given situation