CO : antsmex.com (haslo 10 znakow) jeden z crackme SKAD: http://crackme.home.ml.org (pozdrowiam Crook'a :) CZYM: TR 2.50 (http://tr.kstar.com)
Antsmex to malutki crackme (245b) napisany przez Shmana[UCL]. W opisie jest napisane, ze haslo to 10 znakow i postaramy sie je znalezc :). Uruchamiamy program , zeby zobaczyc jak zadziala. Jezeli juz uruchomiles i komp sie zawiesil to masz fuksa :), inaczej pokazuje t Invalid Password!. Teraz pora na nas. Uruchamiamy TR-a wpisujac jako parametr antsmex.com. TR to debugger ,ale troche inny niz np S-ICE,bo sam interpretuje kod który wykonuje !!! Daje to np brak wykrywalonsci, bo to pod nim wszytskie instrukcje sie wykonuja !!!.
Jesli juz jestes w TR to w sekcji kodu zobaczysz cos takiego jak nizej. Wykonujesz teraz kolejne instrukcje F8 lub F10 (BTW: przeczytaj instrukcje).
2664:00FC 0000 ADD [BX+SI],AL 2664:00FE 0000 ADD [BX+SI],AL 2664:0100 EB00 JMP 0102 ;start 2664:0102 B409 MOV AH,09 ;int21 z ah=09 wyswietla 2664:0104 BA4401 MOV DX,0144 ;lancuch spod adresu z 2664:0107 CD21 INT 21 ;rejestru DX do znaku '$' 2664:0109 B40A MOV AH,0A ;int21 ah=0a wczytuje znaki 2664:010B BAE901 MOV DX,01E9 ;zaczynajac od adresu 2664:010E CD21 INT 21 ;który jest w DX 2664:0110 BFB801 MOV DI,01B8 ;+--- 2664:0113 33D2 XOR DX,DX ;| 2664:0115 8A0EEA01 MOV CL,[01EA] ;| Ilosc wpisanych znakow 2664:0119 BEEB01 MOV SI,01EB ;| do CX.Do SI adres hasla. 2664:011C 8A14 MOV DL,[SI] ;| znak z [SI] do DL. 2664:011E 8A05 MOV AL,[DI] ;| znak z zakodowanego. 2664:0120 32C2 XOR AL,DL ;| XOR oba znaki :) . 2664:0122 8805 MOV [DI],AL ;| co powstalo do adresu 2664:0124 46 INC SI ;| z DI. Zwieksza SI i DI 2664:0125 47 INC DI ;| o 1. 2664:0126 E2F4 LOOP 011C ;| Jezeli CX>1 wroc do 11c. 2664:0128 FE06B701 INC [BYTE 01B7] ;| zwieksza [1b7] o 1. 2664:012C 803EB70105 CMP [BYTE 01B7],05;| czy rowne 5. 2664:0131 75E0 JNE 0113 ;| jak nie to powrot do 113
Tu sie zatrzymamy. Instrukcje od :11c do :126 wykonuja sie tyle razy ile bylo znakow we wpisanym hasle, czyli skoro ma ich byc 10 wiec wykona sie ta petla 10 razy. Od :1eb sa znaki z twojego hasla.Kod kazdego znaku jest XOR-wany z kolejnymi znakami zaczynajac od :1b8 .[ XOR to suma symetryczna . Instrukcja prownuje kolene bity z obu porownywanych bajtow i wynik zostwia w pierwszym. Zasada jest taka 1+1=0 ,0+0=0, 1+0=1 ,0+1=1 ].Pózniej zwieksza wartosc komorki :1b7 i dopoki nie jest rowna 5, powtarza petle kodujaca zmieniajac kolejne miejsca w pamieci (chyba ciezko to zrozumiec wiec najlepiej sam sprawdz co dzieje sie pod adresem :1b8 i dalej (wpisz 'd 1b8' aby wyswietlic zawartosc pamieci od :1b8 ). Teraz jezeli petla kodujaca wykona sie juz 50 razy to mamy cos takiego
2664:0133 8A4DFE MOV CL,[DI-02] ; znak z [DI-2] do CL 2664:0136 80F924 CMP CL,24 ; czy CL=24 ? 2664:0139 747D JE 01B8 ; jak tak to skok do :1b8 2664:013B B409 MOV AH,09 ; jesli nie wyswietl 2664:013D BA9F01 MOV DX,019F ; t Invalid Password! 2664:0140 CD21 INT 21 ; i 2664:0142 CD20 INT 20 ; wyjdz z proga 2664:0144 FE20 ??? [BYTE BX+SI]
hmm, jedyne porownanie to czy w [DI-2] jest 24 !! Dobra wrocmy do poczatku wpisz 'reload' i jestes na pierwszej instrukcji :). Trzeba teraz dowiedziec sie co jest w [DI-2] przy starcie programu. Zalozymy pulapke na instrukcji
:133 MOV CL,[DI-02]
Wpisz 'BP 133'. 'BL' wyswietli zalozone pulapki Teraz 'reload' a potem 'go' aby uruchomic program (pamietaj wpisz 10 znakow). Program zatrzymal sie i jest cos takiego
2664:0133 8A4DFE MOV CL,[DI-02] (2664:01E8=6E)
Z prawej strony w nawiasach jest adres na który wskazuje [DI-2] i jest to :1e8 i wartosc tej komorki to 6e. Teraz przyda sie sprawdzic w którym momencie ta komorka zmienia wartosc. 'BPM adres_' zatrzyma po instrukcji ktora odczyta lub zmieni wartosc komorki o adresie adres_ , wiec wpisujemy 'bpm 1e8' potem 'reload' i 'go' :) Program stanie po:
2664:011E 8A05 MOV AL,[DI]
czyli odczytal wartosc komorki [DI]=1e8 i wstawil do AL. Teraz musimy sprawdzic co wstawil do DL, a wlasciwie skad (linijka wyzej)
2664:011C 8A14 MOV DL,[SI]
Wisujemy 'd si' i pokazuje sie nam 9 znak naszego hasla , fajnie ;) Jeszcze 'go' i znowu 'go' i jestesmy po:
2664:0133 8A4DFE MOV CL,[DI-02]
hmmm. [1e8] jest zmieniany tylko raz z 9-tym znakiem z hasla ,a potem jest tylko jedno porownanie czy rowna sie 24. (Wiadomsci niezbedne by cos dalej rozumiec:) XOR l1,l2 da nam l3 teraz XOR l3,l2 da nam l1 !!! ) Dzieki temu mozemy dowiedziec sie jaki jest wlasciwy 9 znak w hasle :) Robimy 'reload' . Teraz sprawdzamy jaka jest pierwotna wartosc pod :1e8
Wpisz 'd 1e8' Zobaczysz 57 (w sekcji wyswietlajacej wartosci komórek pamieci).
2664:01E8 57 40 00 00 00 00 00 00-00 00 00 00 00 06 26 83 W@............&? 2664:01F8 7D 10 01 75 03 FF 4E E4-8D 7E E4 16 57 C4 7E D6 }..u.?N“T~“.WŽ~™
Teraz wykorzystamy inna ceche TR-a.W lini polecenie mozesz wpisywac instrukcje asemblera i TR je wykona !!! Teraz to wykorzystamy aby znalezc znaki z hasla:) Wpisz 'xor [1e8],24' i zobacz jaki jest wynik :)
2664:01E8 73 40 00 00 00 00 00 00-00 00 00 00 00 06 26 83 s@............&? 2664:01F8 7D 10 01 75 03 FF 4E E4-8D 7E E4 16 57 C4 7E D6 }..u.?N“T~“.WŽ~™
No to mamy juz jedna litere to 's' na 9 miejscu w hasle. Jak chcesz to sprawdz jak program zadziala gdy 9 znak to s . Jesli sprawdziles to pewnie system zawisl :) Trzeba teraz sprawdzic reszte miejsc zmienianych przez 's' z hasla. Jesli zostales w TR to 'reload'. Aby miec wieksze okienko sekcji pamieci wpisz 'wd liczba' gdzie liczba oznacza ilosc linii zarezerwowanych na ta sekcje ,np: 'wd 5'.Teraz wpisz 'd 1b8' i krokowo lub recznie sprawdz co,gdzie i na co sie zmienia dzieki 's' na 9 miejscu w hasle.Jezeli doszedles juz tu to zwroc uwage na adres pod który jest skok gdy [1e8] to 24 (spojrz nizej)
2664:0133 8A4DFE MOV CL,[DI-02] ; znak z [DI-2] do CL 2664:0136 80F924 CMP CL,24 ; czy CL=24 ? 2664:0139 747D JE 01B8 ; jak tak to skok do :1b8
(BTW: liczby w kodzie sa w systemie szesnastkowym :) jesli ktos tego nie zauwazyl ;) .Prgram wlasnie skacze pod adres który haslo rozkodowuje !!. Jesli nie wiesz jaki znak ma kod 24h to wpisz 'e' i tam zmien wartosc jakiejs komorki na 24h ,a to da '$'.Teraz mozna sie domyslac ze kod spod adresu :1b8 ma wyswietlic jakis lancuch, bo na koncu lancucha musi byc wlasnie znak '$'. Jezeli chcesz t zobacz jak zapisane sa w pamieci nie zakodowane teksty ktore prog wyswietla (juz powinienes ew.powinnas :) wiedziec jak ) 'reload' (rany, który to juz raz :| ) 'xor [1b8+8],73' i masz CD UUuuu... tzn. ze w nastepnym bajcie jest numer przerwania !!! (miedzy adresem a instrukcja masz wlasnie sposób zakodowania tej instrukcji w pamieci zobacz nizej na linie :107) Spojrz teraz w jaki sposób sa uzywane przerwania do wyswietlania lancuchow w programie np tu:
2664:0102 B409 MOV AH,09 ;int21 z ah=09 wyswietla 2664:0104 BA4401 MOV DX,0144 ;lancuch spod adresu z 2664:0107 CD21 INT 21 ;rejestru DX do znaku '$'i jak konczy prace np tu:
2664:0142 CD20 INT 20 ; wyjdz z proga
Jezeli sie zastanawiasz dlaczego mysle ze wyswietla cos i wychodzi, to 1. wyjsc musi ;) 2. w kodzie nie widac zadnego napisu z gratulacjami (lub cos podobnego) ze haslo jest poprawne, no to moze byc tu Wiec, tak do wyswietlenia czegos potrzebne jest 7 bajtow, do zakonczenia pracy 2 bajty, wiec 10 znak moze odkodowac 01 na 20 tzn ze tu prog skonczy.'xor [1b8+9],20' i jest '!'. Dobrze, jezeli tak to wczesniej pewnie jest CD 21 (patrz wyzej ^) , 'xor [1b8+7],21' i 'xor [1b8+6],cd'. I juz sa prawdopodobnie cztery dane znaki z hasla :)).Jezeli dobrze myslimy to wczesniej moze byc albo MOV ah,09 albo mov dx,adres_poczatku_lancucha. Jezeli kolejnosc jest taka jak wczesniej to bedzie MOV DX,adres , a tym adresem moze byc np 1b8+0a. Jak nie wiesz ile to jest to sprawdz '? 1b8+a' = 1c2 :) Sprawdzamy 'xor [1b8+5],01' , 'xor [1bb8+4],c2' , 'xor [1b8+3],ba'. Wszystko wyglada wporzadku wiec sprawdzajmy dalej 'xor [1b8+2],09' , 'xor [1b8+1],b4' Wszystkie odkodowane znaki mozna wpisac bez problemu z klawiatury , ale zostal nam jeszcze jeden nie odkodowany znak. Prog skacze do :1b8, a tu musi byc instrukcja ktora da sie zapisac w 1 bajcie, moze to byc np NOP czyli nic nie rob. Sprawdzamy kod NOP to 90 'xor [1b8],90' jezeli wszystko sie udalo to zobaczysz juz haslo ;) Teraz tylko pozostaje uruchomic i je cale wpisac :) BTW: te dziwne znaczki to z ruskiego, uruchom np: russia.com i bedzie dobrze i Gandjubas! wyglada poprawniej, przekonaj sie dlaczego
Nonme [CrackPL]