Xara3D by tato

How to ... czyli: "Nie wszystko zloto co sie swieci !"

Cel       : Uzyskanie wersji zarejestrowanej XARA3D 3.0 Trial z 9 grudnia 98 (PCWK 02/99)
Narzedzia : W32DASM, SI

Próba zarejestrowania programu, sugerowana przez sam program przy kazdym jego starcie, nieodmiennie konczy sie komunikatem informujacym o wprowadzeniu blednego kodu (program nie pyta o uzytkownika, lecz jedynie o #SN !). Nie skutkuja standartowe pulapki na zakladane na wywolania standartowych funkcji API.

Posluzenie sie W32DASM da nam plik ze zdisamblewanym kodem XARA 3D !

Jednak w okienku "strings" nie znajdujemy komunikatu generowanego po nieudanej rejestracji ! Posluzymy sie zatem poleceniem "Find String" dostepnym w Menu programu : "You entered" ... ! Program zatrzymuje sie po chwili na odpowiednim adresie. Kilka linijek wyzej znajdujemy adresy skad, w trakcie realizacji programu, nastepuje skok do miejsca w kodzie wskazujacego na podanie blednego SN. Miejsc tych jest w sumie DZIEWIEC !!! Obserwujemy, ze pierwszych siedem nastepuje po wywolaniu jakiejs procedury i testowaniu tego co "zwracane" jest przez nia w rejestrze AL. Spisujemy sobie wszystkie adresy odwolan warunkowych i zamykamy z W32DASM. Nie bedzie nam juz potrzebny plik ze "zródlem" XARA 3D.

Uruchamiamy SILoader, i z niego, nasz program XARA3D. SILoader zatrzymuje nas na pierwszym rozkazie programu. Ustawiamy pulapke BPX na pierwszy z adresow zdobytych dzieki W32DASM i pozwalamy programowi na swobodne realizowanie swoich funkcji ! Proba rejestracji spowoduje zadzialanie pulapki. Posluzmy sie tym ! Zatrzymujemy sie w miejscu skad nastepuje skok pod adres realizujacy polecenia zwiazane z podaniem blednego kodu !

Gasimy go (F9) i ustawiamy nowy (F9) kilka linii wyzej, tam gdzie jest wywolanie "procedury kontroli". Pozwalamy programowi "pójsc" dalej, ogladamy komunikat o blednym kodzie i podejmujemy kolejna próbe rejestracji. SI zatrzymuje nas w miejscu wejscia do "procedury kontroli". F8 wprowadza nas do jej wnetrza. Krótka procedura pobiera znak z wprowadzonego przez nas SN i w kilku poleceniach kontroluje czy SN spelnia jakis wstepny warunek. Kilka eksperymentów prowadzi do prostego wniosku iz pierwszy znak naszego SN MUSI!!! byc WIELKA litera !

Poprawiamy co trzeba we wprowadzonym SN i rejestrach i spokojnie sledzimy (F8) co dzieje sie dalej.

Program wraca z "procedury kontroli" do glównego watku i "przechodzi" przez pierwszy z "punktow kontrolnych". Kolejne wywolania tej samej co porzednio procedury prowadza do wniosku, iz CALY SN MUSI skladac sie z dokladnie 7 LITER pisanych WIELKIMI znakami.

Po pomyslnym przejsciu przez wszystkie siedem punktów kontrolnych przechodzimy do "kawalka"odpowiedzialnego za wygenerowanie na podstawie wprowadzonego SN wartosci jednego z rejestrów i porównanie go z innym, równierz modyfikowanym rejestrem.

Skok warunkowy wykonywany w efekcie ich porównania prowadzi wprost do "nielubianej" przez nas sekwencji rozkazów wyswietlajacych komunikat o bledzie !

Spróbujmy zatem wymusic poleceniem "R FL Z" zmiane reakcji programu na podany przez nas SN.

I to jest juz to ! Kolejne wywolanie programu nie udostepnia juz mozliwosci rejestracji, zas program wydaje sie byc pozbawiony manifestowanych dotad restrykcji!

Kilka eksperymentow prowadzi do wniosku iz program "zapamietuje" fakt "poprawnej" rejestracji w Rejestrach !

Wystarczy obecnosc wpisu:

[HKEY_CURRENT_USER\Software\Xara\X3D3\Install]
"Key"=dword:fc611acb

by wszystko bylo OK natomiast jego brak lub zmiana wartosci powoduje przywrócenie mozliwosci rejestracji z wszelkimi wynikajacymi z tego faktu konsekwencjami.

Dwa dni pózniej:

Juz po napisaniu tego tekstu i wyslaniu go na liste dyskusyjna CrackPL jeden z jej uczestników - Jo Joro - (thnx!) zauwazyl, ze jego "Key" mial inna wartosc !!!

Postanowilem to sprawdzic !

Okazalo sie, ze XARA 3D, jeszcze przed przystapieniem do do pobierania naszego SN juz "wie" ukrywawajac ten fakt w wartosci rejestru EBP, jaka wartosc bedzie mial "Key" jesli, oczywiscie, podamy poprawny SN (lub wymusimy na programie jego akceptacje!).

Postapilem zatem tak:

1) po dojsciu programu do miejsca w którym poprzednio zmienilem wartosc flagi Z nacisnalem F12 i znalazlem sie "u wyjscia" z procedury wprowadzania i kontroli SN. Postawilem BPX na "wejsciu" do niej, pozwolilem programowi "toczyc" sie dalej i podjalem kolejna próbe rejestracji. Tym razem jednak, kiedy SI zatrzymal sie na wejsciu do procedury posluzylem sie klawiszem F8 i dalej uzywajac F10 obserwowalem zmiany wartosci rejestru EBP oraz realizujacy sie kod programu (wiem, od tego mozna dostac zeza, ale trudno: "Per aspera ad astra" !).

Okazalo sie, ze program wywoluje tutaj funkcje API operujace na rejestrach WIN-dy !

Otwiera klucze, pobiera ich wartosci, zamyka je, realizuje jakies swoje funkcje itp.

Poniewaz jednak parametry wywolan tych funkcji (czytaj: nazwy otwieranych kluczy rejestru) przekazywane byly w nieczytelny dla mnie sposób, postanowilem uzyc wyspecjalizowanych narzedzi !

Pozwolilem programowi "leciec", obejrzalem sobie kolejny raz informacje o blednie podanym kodzie (sprawdzilem jednak, jeszcze w SI, uzywajac polecenia TASK, ze XARA 3D jest widziany przez system jako "zadanie" o nazwie "X3D").

Uruchomilem program Regmonit. Jego zadaniem jest przechwytywac wszystkie odwolania do rejestrów realizowane przez system na polecenie innych programów. Posiada on takze opcje filtrowania tych odwolan. Po uzyciu filtra "X3D" (nazwa zadania XARA !) wybralem kolejny raz polecenie rejestracji. Okazalo sie, ze X3D wywoluje kilkakrotmie rejestry w celu pobrania pewnych informacji ! Jak latwo zgadnac informacje dotyczyly bezposrednio naszego komputera i wykorzystywane byly przez program do modyfikacji wartosci rejestru EBP zapamietywanej pózniej jako "znacznik" poprawnej rejestracji ! Kolejne próby udowodnily, ze wszystkie te wartosci sa pobierane z rejestrów i na ich podstawie podejmowana jest przez program, po dodatkowej "obróbce" decyzja o tym czy zostal juz wczesniej zarejestrowany czy tez nie !

Dopiero taki "komplet" informacji daje programowi podstawy do wydania werdyktu !

Kontrolowane wartosci to:

------- Cut here -------------
REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion]
"RegisteredOwner"="tato@iname.com"
"RegisteredOrganization"="CrackPL"
"FirstInstallDateTime"=hex:00,00,00,00

[HKEY_CURRENT_USER\Software\Xara\X3D3\Install]
"Key"=dword:3DB2CE3F
------- Cut here -------------

Jakiekolwiek odstepstwo od podanych tu danych zpowoduje wygenoerownie nowego "Key", porównanie go z tym istniejacy w rejestrze i, na tej podstawie, wydanie werdyktu !

Wszelkie uwagi prosze kierowac do autora tekstu:

tato@iname.com

21 stycznia 1999 r. godz. 01_30