Anstoss und die verwirrende Registry

Heute geht es kurz um Anstoss 3. Ich hab einfach Anstoss 3 auf einen USB Stick kopiert und wollte es dann auf einen anderen Rechner spielen. Als ich Anstoss gestartet habe, kam mir gleich die Fehlermeldung "Achtung!!! ANSTOSS 3 ist nicht korrekt installiert worden!" entgegen. Also habe ich mir Gedacht, schaust mal schnell in die Executable rein und suchst, warum der Fehler auftritt. Ich habe mir schon gedacht das Anstoss auf die Registry zugreift und deshalb habe ich speziell in OllyDbg nach Registry-Befehlen gesucht.

Also in OllyDbg nach allen intermodularen Calls gesucht und da Anstoss nur einmal auf die Registry zugreift, ist schnell folgende Stelle gefunden:

CPU Disasm
Address   Hex dump          Command                                  Comments
0040DE36  |.  50            PUSH EAX                                 ; /pResult => OFFSET LOCAL.1
0040DE37  |.  68 19000200   PUSH 20019                               ; |DesiredAccess = KEY_READ
0040DE3C  |.  6A 00         PUSH 0                                   ; |Reserved = 0
0040DE3E  |.  8B4D 14       MOV ECX,DWORD PTR SS:[ARG.4]             ; |
0040DE41  |.  51            PUSH ECX                                 ; |SubKey => [ARG.4]
0040DE42  |.  8B55 10       MOV EDX,DWORD PTR SS:[ARG.3]             ; |
0040DE45  |.  52            PUSH EDX                                 ; |hKey => [ARG.3]
0040DE46  |.  FF15 08D08000 CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKey ; \ADVAPI32.RegOpenKeyExA
0040DE4C  |.  8945 F8       MOV DWORD PTR SS:[LOCAL.2],EAX
0040DE4F  |.  837D F8 00    CMP DWORD PTR SS:[LOCAL.2],0
0040DE53  |.  75 6B         JNE SHORT 0040DEC0
0040DE55  |.  B8 01000000   MOV EAX,1
0040DE5A  |.  85C0          TEST EAX,EAX
0040DE5C  |.  74 02         JE SHORT 0040DE60                        ;Registry Key erfolgreich eingelesen
0040DE5E  |.  EB 0D         JMP SHORT 0040DE6D                       ;Registry Key nicht gefunden
0040DE60  |>  68 CC6B8700   PUSH OFFSET 00876BCC                     ; /Format = "Key was successfully retrieved from the registry --> "
0040DE65  |.  E8 164FFFFF   CALL 00402D80                            ; \anstoss3.00402D80
0040DE6A  |.  83C4 04       ADD ESP,4
0040DE6D  |>  8B4D 0C       MOV ECX,DWORD PTR SS:[ARG.2]
0040DE70  |.  894D F4       MOV DWORD PTR SS:[LOCAL.3],ECX
0040DE73  |.  8D55 F4       LEA EDX,[LOCAL.3]

Der Key wird ausgelesen und Anstoss sucht speziell nach den Registry-Key „HKEY_LOCAL_MACHINE/SOFTWARE/ASCARON/ANSTOSS 3/1.00“ und in diesem Schlüssel wird versucht, den Wert „InstalledTo“ auszulesen. In diesem Schlüsselwert sollte dann der Installationspfad drin stehen. Also wird schnell der Registry Schlüssel angelegt und mit dem entsprechenden Wert gefüttert. Also Habe ich Anstoss 3 noch einmal gestartet und ich bekam wieder die Fehlermeldung. Jetzt war ich erstmal verwirrt und ich wusste nicht genau woran es lag. Nachdem ich in der Registry ein wenig rumgescrollt habe, viel mir der Schlüssel „HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/“ in den Schoß und dann fiel mir die Lösung ein. Wenn man bei Windows auf einen 64 Bit Betriebssystem arbeitet, hat die Registry diesen zusätzlichen Knoten, in denen alle 32 Bit Anwendungen zugreifen. Nach meiner Meinung etwas konfus, aber M$ hat wohl seine Gründe dafür.
Nachdem ich in folgenden Schlüssel angelegt habe, hat es dann funktioniert und Anstoss 3 war wieder installiert: „HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/ASCARON/ANSTOSS 3/1.00“ mit dem Schlüssel und Wert "InstalledTo" = "C:\\ANSTOSS 3".

Fazit

Also wenn man ein wenig rumcrackt muss man unterscheiden zwischen 32 und 64 bit Systemen und wenn dann unser Programm auf die Registry zugreift ist in 32 Bit alles Normal und in 64 bit OS werden die 32 bit Anwendungen auf den Schlüssel „HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node“ umgeleitet, was ein wenig konfus ist.
Also bis zum nächsten Mal,

Greetz TheVamp

2 thoughts on “Anstoss und die verwirrende Registry

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.