Babylon (Build 20.14)
oder
100 Tage Limit in einem Freeware Programm?
Einleitung
Na Leute, da haben wir ja mal wieder ein schoenes Freeware-Tool gefunden. Wer Babylon noch nicht kennt, hat wirklich was verpasst. Das Programm ist einfach genial. Es uebersetzt englische Vokabeln ins Deutsche (bzw. in irgendeine andere Sprache, je nachdem welches Sprachmodul ihr euch runtergeladen habt.) und das ganze per Point und Click. (Wie es sich fuer einen Windows-User gehoert :)
Das ganze hat nur einen kleinen Haken. Nach genau 100 Tagen laeuft Babylon nicht mehr und will geupdated werden. Naja, ich hab aber keinen Bock meine Software staendig zu aktualisieren, bzw. soll es auch Leute geben die noch kein Internet haben und sich deshalb nicht staendig neue Updates aus dem Netz ziehen koennen.
Deshalb geht es in diesem Tutorial darum, das 100 Tage Limit zu entfernen. Also los gehts...
Benoetigte Tools
Babylon Translator (Build 20.14)
Babylon Homepage
W32DASM - Disassembler
Softice 2.3 - Debugger
HexWorkshop oder einen anderen Hexeditor
Diverse Vorkenntnisse im Reverse Engineering.
Die Suche - oder wo werden die uebrigen Tage ueberprueft?
Erstmal stellen wir unsere Systemzeit um 1 Jahr vor, damit wir das 100 Tage Limit ueberschreiten.
Wenn wir jetzt Babylon starten kommt eine Dialogbox, die uns sagt das unsere Babylon Version erloschen ist. So ein Mist auch... Genau das wollen wir ja vermeiden.
Disassemblieren wir die Babylon.exe erstmal mit W32DASM um zu sehen in welche Funktion wir uns einklinken.
Mhh, sieht noch nicht so toll aus.
Muss wohl 'ne andere Strategie her...
Ok, dann jagen wir eben mal die CAPTLIB.DLL duch den W32DASM...
Da finden wir unter den exportierten Funktionen folgendes:
+++++++++++++++++++ EXPORTED FUNCTIONS ++++++++++++++++++
Number of Exported Functions = 0015 (decimal)
Addr:00402215 Ord: 1 (0001h) Name: OpenBabylonDLL
Addr:0040249A Ord: 2 (0002h) Name: OpenFilesForEnglishDictionaries
Addr:00402898 Ord: 3 (0003h) Name: CloseFilesForEnglishDictionaries
Addr:004034C4 Ord: 4 (0004h) Name: GetEnglishMakors
Addr:00404D3B Ord: 5 (0005h) Name: GetExactEnglishBitui
Addr:0040382E Ord: 6 (0006h) Name: GetEnglishWordTranslationFromPtr
Addr:004040D4 Ord: 7 (0007h) Name: EnglishBituim
Addr:00405221 Ord: 8 (0008h) Name: FindInCommonMistakes
Addr:004056DF Ord: 9 (0009h) Name: FixRightHalfOfWord
Addr:00405A93 Ord: 10 (000Ah) Name: Init
Addr:00405AB4 Ord: 11 (000Bh) Name: DLLSetHookOption
Addr:00405D14 Ord: 12 (000Ch) Name: MyHookProc
Addr:004101B8 Ord: 13 (000Dh) Name: __DebuggerHookData
Addr:004069AC Ord: 14 (000Eh) Name: __lockDebuggerData(void)
Addr:004069D4 Ord: 15 (000Fh) Name: __unlockDebuggerData(void)
OpenBabylonDLL - Das hoert sich schonmal gut an...
Versuchen wir mal hier reinzuspringen.
1.) Softice-Loader starten
2.) Babylon.exe in den Loader laden.
3.) CTRL-D um in Softice zu gelangen.
4.) BPX OpenBabylonDLL
5.) Und Babylon.exe ausfuehren.
BANG! Schon sind wir in der OpenBabylonDLL Funktion
Backtrace mit F12 und wir kommen zu folgendem Code:
:004019B1 68CC244400 push 004424CC
:004019B6 FF1570254400 call dword ptr [00442570]
:004019BC 8BD8 mov ebx, eax
:004019BE 3B1DCC244400 cmp ebx, dword ptr [004424CC]
:004019C4 7407 je 004019CD
:004019C6 33C0 xor eax, eax
:004019C8 A3CC244400 mov dword ptr [004424CC], eax
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004019C4(C)
|
:004019CD 833DCC24440000 cmp dword ptr [004424CC], 00000000
:004019D4 0F9FC2 setg dl
:004019D7 83E201 and edx, 00000001
:004019DA 8915C8244400 mov dword ptr [004424C8], edx
:004019E0 C705B820440001000000 mov dword ptr [004420B8], 00000001
:004019EA 33C9 xor ecx, ecx
:004019EC 890DBC204400 mov dword ptr [004420BC], ecx
:004019F2 E86B090000 call 00402362
:004019F7 FF75FC push [ebp-04]
:004019FA E8C2090000 call 004023C1
:004019FF 59 pop ecx
:00401A00 833DC020440000 cmp dword ptr [004420C0], 00000000
:00401A07 752A jne 00401A33
:00401A09 6A0B push 0000000B
Sieht so aus, als ob da irgendwas an der Adresse 004424CC geprueft wird bevor es weitergeht.
Ich hab das natuerlich schon im Vorraus fuer euch ueberprueft und verrate euch schonmal, das in dieser Adresse die verbleibenden Tage gespeichert werden.
Hier jetzt die Erklaerung zur Ueberpruefungsroutine:
:004019B1 68CC244400 push 004424CC ; Irgendwas auf den Stack
:004019B6 FF1570254400 call dword ptr [00442570] ; OpenBabylonDLL Funktion aufrufen
:004019BC 8BD8 mov ebx, eax ; Uebrige Tage von EAX nach EDX
:004019BE 3B1DCC244400 cmp ebx, dword ptr [004424CC] ; Steht in EBX dasselbe wie in 4424CC?
:004019C4 7407 je 004019CD ; JA --> Dann Sprung...
:004019C6 33C0 xor eax, eax ; EAX loeschen
:004019C8 A3CC244400 mov dword ptr [004424CC], eax ; EAX in Adr. 4424CC speichern
:004019CD 833DCC24440000 cmp dword ptr [004424CC], 00000000 ; Haben wir noch einen Tag?
Wir brauchen jetzt also nur noch dafuer zu sorgen, das Babylon denkt wir haetten immer 100 Tage uebrig.
Also Taschenrechner raus und erstmal 100 in Hex umrechnen. Ok... Ergibt 64h.
Jetzt schreiben wir die Funktion so um das es uns immer 100 Tage an die Adresse 4424CC schreibt wenn wir Babylon starten. Gesagt, getan...
:004019B1 68CC244400 push 004424CC ; Irgendwas auf den Stack
:004019B6 FF1570254400 call dword ptr [00442570] ; OpenBabylonDLL Funktion aufrufen
:004019BC C705CC24440064000000 mov dword ptr [004424CC], 00000064 ; 100 an Adresse 4424CC schreiben
:004019C6 90 nop ; Den Rest ausnoppen,
:004019C7 90 nop ; damit wir keine Probleme
:004019C8 90 nop ; mit dem Stack bekommen!
:004019C9 90 nop
:004019CA 90 nop
:004019CB 90 nop
:004019CC 90 nop
:004019CD 833DCC24440000 cmp dword ptr [004424CC], 00000000
So, lassen wir das Programm mal weiterlaufen um zu sehen obs auch klappt so wie wir uns das vorstellen.
(Dazu druecken wir in Softice die Taste F5 fuer alle die es noch nicht wussten :)
Voila... Es funktioniert. Babylon laeuft wieder. Schauen wir mal unter HILFE / UEBER BABYLON nach wieviel Tage wir noch haben... 100 Jiphee... Es funktioniert wirklich.
Jetzt muessen wir den Patch nur noch permanent machen. Und das erklaere ich euch im naechsten Kapitel... (Jetzt muss ich mir aber erstmal noch 'ne schoene heisse Tasse Kaffee machen. Ohne gehts einfach nicht. :)
Jetzt wird gepatcht!
Schreiben wir uns erstmal die Hex-Bytes der Opcodes (Assembler-Syntax!) auf:
Original-Code:
:004019BC 8BD8 mov ebx, eax ; Uebrige Tage von EAX nach EDX
:004019BE 3B1DCC244400 cmp ebx, dword ptr [004424CC] ; Steht in EBX dasselbe wie in 4424CC?
:004019C4 7407 je 004019CD ; JA --> Dann Sprung...
:004019C6 33C0 xor eax, eax ; EAX loeschen
Gepatchter Code:
:004019BC C705CC24440064000000 mov dword ptr [004424CC], 00000064 ; 100 an Adresse 4424CC schreiben
:004019C6 90 nop ; Den Rest ausnoppen,
:004019C7 90 nop ; damit wir keine Probleme
:004019C8 90 nop ; mit dem Stack bekommen!
:004019C9 90 nop
:004019CA 90 nop
:004019CB 90 nop
:004019CC 90 nop
Wir muessen also noch folgender Hex-Byte-Kombination suchen:
8BD83B1DCC2444007407
und sie durch
C705CC2444006400000090909090909090
ersetzen!
Schreiten wir zur Tat,starten wir unseren Hex-Editor und laden Babylon.exe rein!
Wenn die Suche erfolgreich ist, sollten wir folgendes sehen:
00000FB0 0068 CC24 4400 FF15 7025 4400 8BD8 3B1D
00000FC0 CC24 4400 7407 33C0 A3CC 2444 0083 3DCC
Und wenn wir fertig sind sollte das Ganze so aussehen:
00000FB0 0068 CC24 4400 FF15 7025 4400 C705 CC24
00000FC0 4400 6400 0000 9090 9090 9090 9083 3DCC
Speichern wir das File unter einem neuen Namen und wenn wir alles richtig gemacht haben funktioniert es genauso wie wir uns das gedacht haben. Von jetzt an haben wir immer 100 Tage und unsere Babylon-Version laeuft NIE ab... So muss das sein :)
Wie man ein Program schreibt, das solche Patches automatisch durchfuehrt, erklaere ich vielleicht mal in einem anderen Tutorial!
Schlusswort
Dieses Tutorial ist natuerlich nur zu Informationszwecken gedacht. Bitte verwendet dieses Tutorial niemals zu illegalen Zwecken!
Greetings fly out to:
Compiler-Torsten, Micha Fix, alle Leutz aus der ehemaligen Atari-Szene (Animal Mine, Synergy, Aura, The Lost Boys, Germs und wie sie alle hiessen), alle Leutz die jemals mit mir im Grinder Projekt gearbeitet haben (Cyberpunk, Scraper, Kermit, Masterboy, Sir Bit usw. Hoffentlich hab ich da jetzt niemanden vergessen...) natuerlich auch alle Amiga-Freax da es wohl die treuesten Computerfreax sind, die es gibt, Twister-Klaus, Peter, Roland, Andi, Moritz, Puffi, ID-Software fuer Doom/Quake, Pantera, Black Sabbath, Judas Priest, Sick of it all und alle anderen die sich angesprochen fuehlen....
In diesem Sinne: Party on dudez!
Euer Sledge Hammer / Grinder
(c) by Sledge Hammer of Grinder 1999 - Use only for legal purposes!