WinAce 1.0 by emo

W tym tutorialu postaram sie zwrócic uwage czytelnika na niekonwencjonalne podejscia do crackowania. Moja dewiza to - <<W crackowaniu najwazniejsze jest m y s l e n i e>>. Wiadomo, ze nie zawsze bedziesz mógl w stanie sobie poradzic, ale nie poddawaj sie zbyt szybko.

Cel : WinAce 1.0 Final Version (Szeroko uzywana byla jego dosowa wersja do pakowania zlamanych gier na tzw. plytach - skladankach, obecnie wyszla wersja pod W95/98/NT)

Gdzie znalezc : Prawdopodobnie bedzie na jakims Cover-CD - ostatnio nie nadazam za tym, ostatni numer kupilem ok. pól roku wstecz... - za to jest zawsze dostepny na www.winace.com - wersja instalacyjna 2 020 777 bajtów, plik 'winace1x.exe'

Narzedzia : Softice 3.xx - wazne, ze dobrze skonfigurowany :), moim poprzednim v1.9 BETA tez bym sobie poradzil...

Inne : Jesli nie wiesz co to SoftIce, czytanie reszty mozesz sobie odpuscic... Chociaz... Ja w koncu tez tak zaczynalem...

Musze sie przyznac, ze moja przygoda z crackowaniem zaczela sie, gdy nie mialem dostepu do internetu raz na tydzien (jak obecnie) i zaczynalem od czytania... Wtedy nie mialem zadnych polskich tutoriali i przeczytalem cala serie +ORC, SoftIce'a mialem wersje BETA, zadnej wiedzy o assemblerze (no moze jakies podstawy z C64) i wszystkiego nauczylem sie SAM, praktykujac 'reverse engineering'. Dopiero gdy trafilem na jakies materialy, dotarlo do mnie jak niewiele umiem...

Nie bede dalej zrzedzil, wiec -

Zaczynamy:

Nie sa to raczej instrukcje, jak zlamac WinAce'a, ale opis moich zmagan z tym programem (troche ponad 1h) i porada dla srednio zaawansowanych crackerów (ja nigdy nie uwazalem sie za kogos lepszego i nie jest mi to do szczescia potrzebne).

Przejde do konkretów - po zainstalowaniu widzimy:

    Your AV - String :
     ___________________________
    [___________________________]

    Your registration key :
    
     ___________________________
    [___________________________],

gdzie 'key' ma postac xxx-xxxx-xxxx-xxxx-xxxx

W registration menu czytamy, ze AV-String to nic innego, jak 'znak firmowy' - w archiwach znajdzie sie napis 'Spakowane by <<string>>' - Hmm, ciekawe. Po zalozeniu 'flagowych' bpx Hmemcpy i bpx GetWindowTextA dostalem sie do miejsca :

0137:0055F780  E8EB48EAFF          CALL    00404070
0137:0055F785  50                  PUSH    EAX
0137:0055F786  E84546F6FF          CALL    004C3DD0<-- !! sprawdzanie kodu 
0137:0055F78B  8945F8              MOV     [EBP-08],EAX<-- przechowaj eax
0137:0055F78E  33C0                XOR     EAX,EAX<-- wyczysc EAX
0137:0055F790  5A                  POP     EDX
0137:0055F791  59                  POP     ECX
0137:0055F792  59                  POP     ECX
0137:0055F793  648910              MOV     FS:[EAX],EDX
0137:0055F796  EB0A                JMP     0055F7A2
0137:0055F798  E9B73CEAFF          JMP     00403454
0137:0055F79D  E8563FEAFF          CALL    004036F8               
0137:0055F7A2  837DF800            CMP     DWORD PTR [EBP-08],00 <-- porównanie...
0137:0055F7A6  7424                JZ      0055F7CC<-- jezeli OK, skacz
0137:0055F7A8  C60524A4560000      MOV     BYTE PTR [0056A424],00
0137:0055F7AF  8D95F0FCFFFF        LEA     EDX,[EBP-0310]
0137:0055F7B5  A17C2C5700          MOV     EAX,[00572C7C]
0137:0055F7BA  E86159EAFF          CALL    00405120
0137:0055F7BF  8B85F0FCFFFF        MOV     EAX,[EBP-0310]
0137:0055F7C5  E87606FEFF          CALL    0053FE40        <-- w srodku MessageBoxA...
0137:0055F7CA  EB26                JMP     0055F7F2        <-- omin zarejestrowanie... 
0137:0055F7CC  6A00                PUSH    00             <-- dziekujemy za support...
0137:0055F7CE  8D95F0FCFFFF        LEA     EDX,[EBP-0310]
0137:0055F7D4  A104305700          MOV     EAX,[00573004]

Moja rada : zawsze sprawdzaj ostatni CALL przed wywolaniem MessageBoxA, a zajdziesz daleko. Z latwoscia móglbym zrobic patcha, ale nie o to przeciez nam chodzi... Zreszta program dziekuje za rejestracje, a nadal jest 'unregistered' <-- sprawdz w menu 'About'. BTW - program jest zabezpieczony przed W32Dasm, wiec po co sie meczyc.

Autorzy podjeli niezly wysilek - twój 'AV-string' (kazda litera) jest XORowany tabela umieszczona w pamieci, ostatni hex jest ROL-owany i dodawany do EAX i tak po kolei... (przynajmniej ja tak to widze), natomiast jeszcze wieksze parodie sa przy 'key'. Okazuje sie, ze pierwsze trzy litery nie sa na nic przydatne, a pozostalych szesnascie moze tylko znajdowac sie wsród '34679ACDEFHKLMNPQRSTWXY' - chyba nie ufaja zbyt wielu samogloskom... koduje na '0123456789abcdef0123456

!Uwaga - kluczowy punkt - program 'przekodowuje' twój key na inny ciag znaków. Jako 3 traktuje 0, zamiast 4 jest 1, 6 jest 2 itd. Nastepnie wykonuje na nich rózne operacje matematyczne, a w koncu porównuje. Tylko popatrz :

0137:00629971  EB05                JMP     00629978
0137:00629973  49                  DEC     ECX
0137:00629974  85C9                TEST    ECX,ECX
0137:00629976  7C37                JL      006299AF
0137:00629978  31D2                XOR     EDX,EDX
0137:0062997A  6B442AF017          IMUL    EAX,[EBP+EDX-10],17 !!!!!!
0137:0062997F  83C204              ADD     EDX,04
0137:00629982  89442AEC            MOV     [EBP+EDX-14],EAX
0137:00629986  83FA0C              CMP     EDX,0C
0137:00629989  75EF                JNZ     0062997A
0137:0062998B  0FB64429E0          MOVZX   EAX,BYTE PTR [EBP+ECX-20]
0137:00629990  0145F0              ADD     [EBP-10],EAX
0137:00629993  31C0                XOR     EAX,EAX
0137:00629995  8B5428F0            MOV     EDX,[EBP+EAX-10]
0137:00629999  83C004              ADD     EAX,04
0137:0062999C  C1EA18              SHR     EDX,18
0137:0062999F  C64428EF00          MOV     BYTE PTR [EBP+EAX-11],00

Ciekawostka! - Patrz na linie oznaczona wykrzyknikami - jest to operacja mnozenia... To niesamowite na co mozna wpasc w kuchni jedzac jablko - a*b*0=0 ! - chyba kazdy to wie :) Skoro 3 daje nam 0 - nie wpisuj nic w polu AV, a jako kod np. BAC-3333-3333-3333-3333 I... zarejestrowane. Postanowilem to sprawdzic, wychodze z programu i uruchamiam ponownie... mina mi zrzedla - nic z tego... Program nie akceptuje pustego AV-String.

Trzeba poszukac innego sposobu - jak wspominalem myslenie ma przyszlosc. Po nieokreslonym czasie znalazlem takie cos: (gleboko schowane...)

0137:00629C0E  8902                MOV     [EDX],EAX
0137:00629C10  3B4260              CMP     EAX,[EDX+60]       (*) !wskazówka - bpx 629c10 nie
0137:00629C13  7521                JNZ     00629C36           zadziala, dopóki jako 'key'
0137:00629C15  BB03000000          MOV     EBX,00000003       nie wpiszesz dozwolonych
0137:00629C1A  B8FFFFFFFF          MOV     EAX,FFFFFFFF       znaków, które sa powyzej
0137:00629C1F  83C24C              ADD     EDX,4C  np. 'BAC-3434-4334-4433-3443'
0137:00629C22  E87B560000          CALL    0062F2A2
0137:00629C27  8B55BC              MOV     EDX,[EBP-44]
0137:00629C2A  3A4266              CMP     AL,[EDX+66]     (**)
0137:00629C2D  7507                JNZ     00629C36
0137:00629C2F  BE01000000          MOV     ESI,00000001
0137:00629C34  EB02                JMP     00629C38
0137:00629C36  31F6                XOR     ESI,ESI
0137:00629C38  89F0                MOV     EAX,ESI
0137:00629C3A  E9AF330000          JMP     0062CFEE 

Gdy normalnie próbowalem zarejestrowac program przez zmiane jnz w 557fa6 (patrz na poczatku), program dziekowal za rejestracje i... nadal pozostawal niezarejestrowany. To co widzisz w linii oznaczonej (*) jest porównaniem EAX, w którym znajduje sie przeksztalcony AV-String z twoim falszywym 'key' (tez przeksztalconym). W moim wypadku EAX=6DB8CFB8, wiec wpisalem do edx+60 'na zywca' B8,CF,B8,6D (Dlaczego w odwrotnej kolejnosci chyba nie musze tlumaczyc...). W linii (**) sprawa ma sie podobnie, ale trzeba podmienic tylko jeden bajt. Spokojnie wykonalem 'bd *', program podziekowal za rejestracje, po ponownym uruchomieniu wszystko dziala nadal!

Zgadnijcie, co jest tego przyczyna?? - Otóz program generuje 256 bajtowy plik 'ace.key' i przed uruchomieniem go sprawdza. Gdy wpisalem prawidlowe wartosci, WinAce nagral to na plik i problem z glowy. Wygenerowal prawdziwy keyfile!! Mozesz teraz skopiowac w bezpieczne miejsce plik 'ace.key' - tylko on wystarczy, aby pozbyc sie klopotu :-) - na twoim komputerze ;)))) Po przegraniu pliku 'ace.key' na inny komputer program nadal pozostaje 'unregistered'. Nie podpowiem nic wiecej jak 'Regmon & Filemon'. A zreszta - skoro juz lamiecie program na podstawie tutorialu, to nie po to, aby go pózniej rozpowszechniac... A moze sie myle?

To juz koniec, teraz mozesz: Wyjsc na spacer, do kina, pobawic sie z psem, kotem, chomikiem, nakarmic rybki i odpoczac od siedzenia przed komputerem ;-)

Mam nadzieje, ze czegos sie nauczyles, a jezeli nie, to nic nie szkodzi - teoria teoria, tylko praktyka czyni mistrza.

<<EMO>>
emo@viper.pl

!UWAGA - Tekst powstal tylko w celach edukacyjnych i autor nie ponosi odpowiedzialnosci za szkody wynikle z niewlasciwego stosowania porad tu zamieszczonych. W przypadku uzywania programu przez dluzszy czas nalezy go zarejestrowac.

Greetings : Sir_THomasRE, Monter, MAX, CrackPL za inspiracje