Cel	:FileSplit 2.2
Opis	:Program sluzy do dzielenia plikow na kilka mniejszych czesci
Gdzie	:Chip z konca wrzesnia
URL	:http://www.partridgesoft.com
Toolz	:SoftIce,W32dsm

1.Program wywietla nagscreen podczas jego uruchamiania oraz posiada
limit 30 dni ewaluacji.FileSplita mona zarejestrowa wpisujac kod
tyle tylko ,ze sam proces sprawdznia czy serial jest poprawny, przez
program jest troszke 'zamieszany'.Mozna natomiast w bardzo latwy
sposob pozbyc sie nagscreena oraz limitu czasowego, a wiec zaczynamy
2.Wywolanie nagscreena ktory ukazuje sie nam po uruchomieniu programu
mozna przechwycic ustawiajac pulapke w SoftIce na DialogBoxParamA,co
robimy.Nastepnie uruchamiamy program, SoftIce zatrzymal wykonywanie
kodu programu na wywolaniu DialogBoxParamA naciskamy F11 przez co
wychodzimy z SoftIca, widzimy nasz nagscreen, naciskamy na OK i znowu
jestesmy w kodzie programu, tyle tylko, ze tym razem widzimy adres
gdzie nastapilo wywolanie DialogBoxParamA.Spisujemy ten adres(402A98h)
Gasimy pulapke, wychodzimy z Sica nastepnie uruchamiamy W32dsm i
ladujemy do niego FSplit.exe.Po deasemblacji idzimy pod adres gdzie
nastapilo wywolanie DialogBoxParamA.Widzimy kod:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00402A58(C)	<--stad nastapil skok
|
:00402A85 8B0D60BE4100            mov ecx, dword ptr [0041BE60]
:00402A8B 68804E4000              push 00404E80
:00402A90 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"ABOUTBOX"
                                  |
:00402A92 6818894100              push 00418918
:00402A97 51                      push ecx

* Reference To: USER32.DialogBoxParamA, Ord:008Eh
                                  |
:00402A98 FF1594E54100            Call dword ptr [0041E594] <--tu nastapilo wywolanie nagscreena

widzimy, ze do kodu odpowiedzialnego za wyswietleni naga nastapil skok
spod adresu 402A58h.A wiec idziemy pod ten adres:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00402A35(C)
|
:00402A3B 8B4C2414                mov ecx, dword ptr [esp+14]
:00402A3F 8D54241C                lea edx, dword ptr [esp+1C]
:00402A43 52                      push edx
:00402A44 894C2424                mov dword ptr [esp+24], ecx
:00402A48 E8F33F0000              call 00406A40
:00402A4D 8B442428                mov eax, dword ptr [esp+28]
:00402A51 83C404                  add esp, 00000004
:00402A54 3BC5                    cmp eax, ebp
:00402A56 6A00                    push 00000000
:00402A58 752B                    jne 00402A85 <--stad nastapil skok
:00402A5A A160BE4100              mov eax, dword ptr [0041BE60]
:00402A5F 6860574000              push 00405760
:00402A64 6A00                    push 00000000

* Possible Reference to Dialog: DialogID_0073 
                                  |
:00402A66 6A73                    push 00000073
:00402A68 50                      push eax

* Reference To: USER32.DialogBoxParamA, Ord:008Eh
                                  |
:00402A69 FF1594E54100            Call dword ptr [0041E594] <--nag z textem, ze czas nam sie skonczyl
:00402A6F 3D00050000              cmp eax, 00000500
:00402A74 7428                    je 00402A9E

jezeli usuniemy skok warunkowy spod 402A58 i zapuscimy program, za kazdym
razem pojawi sie nam nag z info ze 30 dni ewaluacji juz minely i dalej
program prosi o rejestracje a jezeli tego nie zrobimy konczy swoje dzialanie
Przwijamy wiec kod do gory i sprawdzamy czy nie ma po drodze jakis
skokow warunkowych:

:00402A30 837C242C1E              cmp dword ptr [esp+2C], 0000001E
:00402A35 7E04                    jle 00402A3B
:00402A37 896C2424                mov dword ptr [esp+24], ebp

pod 402A30 nastepuje porownanie dword ptr[esp+2C] z 1Eh i jeeli ta wartosc
jest mniejsza badz rowna(Jump if Less or Equal jle) 1E nastepuje skok
pod okreslony adres.1Eh to w postaci dziesietnej 30,hmm mowi ci to cos.Bo
mnie to wyglada na sprawdzenie ktory dzien juz uzywamy programu.Dobrze ale co
z tego?Ano to ,ze znalezlismy idealne miejsce na spatchowanie programu.
Ale zaraz jezeli spatchujemy samo sprawdznie czasu nagscreen i tak zostanie
wyswietlony.Jak zrobic zeby za jednym zamachem pozbyc sie naga i limitu czasowego?
Wrocmy do wczesnieszych fragmentow kodu.Co sie dzieje po wyswitleniu pierwszego
nagscreena(nie tego ze czas nam minal) i nacisnieciu OK?Program leci dalej
i wyswietlane jest okno glownego programu

* Reference To: USER32.DialogBoxParamA, Ord:008Eh
                                  |
:00402A98 FF1594E54100            Call dword ptr [0041E594] <--1nag

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00402976(C), :00402A74(C)
|
:00402A9E 53                      push ebx	<--program jest dalej wykonywany
:00402A9F E8BC000000              call 00402B60
:00402AA4 83C404                  add esp, 00000004
:00402AA7 85C0                    test eax, eax
:00402AA9 750D                    jne 00402AB8

Spatchowanie polegac bedzie na zastapieniu sprawdzenia czasu skokiem do lokacji
402A9E gdzie dalej jest wykonywany program.A wiec pod 402A30 nalezy np. w hiew
wstawic jmp 402A9E, po tej malej zmianie uruchamiamy program i co, tym razem bez nagsceena
oraz bez ograniczenia czasowego


bart


