Author Topic: Newbie crackME - 11 - [SOLVED]  (Read 1681 times)

CZerezpiCZkin

  • Junior Member
  • ***
  • Posts: 181
Newbie crackME - 11 - [SOLVED]
« Reply #15 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...
CZpCZ

llAmElliK

  • [TiME4CRiME]
  • Administrator
  • VIP
  • *****
  • Posts: 960
Newbie crackME - 11 - [SOLVED]
« Reply #16 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.......
« Last Edit: November 17, 2005, 07:39:59 PM by llAmElliK »
TiME AND CRiME ARE ETERNAL-REVERSE ENGINEERiNG iS MODERN PHiLOSOPHY AND iSN'T CRiME
[TiME4CRiME]

CZerezpiCZkin

  • Junior Member
  • ***
  • Posts: 181
Newbie crackME - 11 - [SOLVED]
« Reply #17 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:
CZpCZ

Master

  • [t4C]newbie child
  • VIP
  • *****
  • Posts: 615
Newbie crackME - 11 - [SOLVED]
« Reply #18 on: November 17, 2005, 08:29:01 PM »
No ja kdyz dam memory BP,tak mi to jebne cele a mam exception

llAmElliK

  • [TiME4CRiME]
  • Administrator
  • VIP
  • *****
  • Posts: 960
Newbie crackME - 11 - [SOLVED]
« Reply #19 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? .....
TiME AND CRiME ARE ETERNAL-REVERSE ENGINEERiNG iS MODERN PHiLOSOPHY AND iSN'T CRiME
[TiME4CRiME]

Master

  • [t4C]newbie child
  • VIP
  • *****
  • Posts: 615
Newbie crackME - 11 - [SOLVED]
« Reply #20 on: November 18, 2005, 08:11:59 AM »
nevim jak myslis vsim,ale vsechny co sem nasel sem vynopoval :)

HypnotiX

  • [CSCF]
  • Newbie
  • ***
  • Posts: 43
hint #1
« Reply #21 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

Z!L0G80

  • -=[t4C]=-
  • Senior Member
  • ****
  • Posts: 280
Newbie crackME - 11 - [SOLVED]
« Reply #22 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 ...
-= SmrT SiGNaTuRaM !!! =-

HypnotiX

  • [CSCF]
  • Newbie
  • ***
  • Posts: 43
jak na IDA
« Reply #23 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

Master

  • [t4C]newbie child
  • VIP
  • *****
  • Posts: 615
Newbie crackME - 11 - [SOLVED]
« Reply #24 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??
« Last Edit: November 18, 2005, 08:02:25 PM by Master »

CZerezpiCZkin

  • Junior Member
  • ***
  • Posts: 181
Newbie crackME - 11 - [SOLVED]
« Reply #25 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.
« Last Edit: November 19, 2005, 07:29:52 PM by CZerezpiCZkin »
CZpCZ

HypnotiX

  • [CSCF]
  • Newbie
  • ***
  • Posts: 43
trochu jinak
« Reply #26 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.
« Last Edit: November 19, 2005, 05:07:14 PM by HypnotiX »

CZerezpiCZkin

  • Junior Member
  • ***
  • Posts: 181
Newbie crackME - 11 - [SOLVED]
« Reply #27 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?
CZpCZ

llAmElliK

  • [TiME4CRiME]
  • Administrator
  • VIP
  • *****
  • Posts: 960
Newbie crackME - 11 - [SOLVED]
« Reply #28 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;)
« Last Edit: November 21, 2005, 12:09:39 PM by llAmElliK »
TiME AND CRiME ARE ETERNAL-REVERSE ENGINEERiNG iS MODERN PHiLOSOPHY AND iSN'T CRiME
[TiME4CRiME]

Master

  • [t4C]newbie child
  • VIP
  • *****
  • Posts: 615
Newbie crackME - 11 - [SOLVED]
« Reply #29 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