Cel		: WaveSurround 2.0 Demo
Opis		: Plug-In do Winampa pozwalajcy uzyska
		  efekt surround
Gdzie znale	: EnterCD1 z listopada 1999
URL		: http://www.wavearts.com
Ograniczenia	: Nagscreen podczas adowania plugina, po
		  4 godzinach suchania muzyki plugin wyczy si
		  automatycznie
Toolz		: HexWorkshop,Hiew,W32dsm

NAGSCREEN
1.Uruchamiamy Winampa, naciskamy CTRL-P, z listy dostpnych pluginw wybieramy
WaveSurround, pojawia si nag, spisujemy text z okna dialogowego(Demonstration Version)
Gdy zaczynaem nauk amania zabezpiecze przeczytaem w helpie do Oscara jak sprawi
aby programy w C,C++ nie wywietlay nagscreenw,cay trick polega na tym aby w pliku
EXE(DLL) danego programu znale tekst(najczciej w postaci UNICODE tzn.kada litera zapisana
jest w postaci sowa a nie bajtu, umoliwia to stosowanie o wiele wicej rozszerzonych
znakw takich jak np ,, chiskich liter itp. ni jest to moliwe w postaci bajtu, a propos
wszystkie texty w programach napisanych w Visual Basicu s zapisywane wanie w tym
formacie)z okienka owego nagscreena,np.w HexWorkshopie uywajc opcji UNICODE.Gdy
zanjdziemy ju interesujcy nas text naley w jego pobliu poszuka sekwencji
bajtw FF FF FF FF 82 lub rzadziej FF FF 82 gdy co takiego znajdziemy te 82 zmieniamy
na 90 lub 7E zapisujemy tak zmieniony plik i jeeli bdziemy mieli szczscie nag ju si
nie pojawi!Postpujemy tak w przypadku WaveSurround, otwieramy z pomoc HexWorkshopa
plik dsp_wa3d.dll, naciskamy ALF-F3(szukaj), potem zaznaczany opcje UNICODE i wpisujemy
Demonstration Version (wystarczy fragment), klikamy find efekt:

000508B0 00 00 57 00 61 00 76 00 65 00 20 00 41 00 72 00 ..W.a.v.e. .A.r. Text z paska tytuowego
000508C0 74 00 73 00 2C 00 20 00 49 00 6E 00 63 00 2E 00 t.s.,. .I.n.c... w UNICODE
000508D0 20 00 57 00 61 00 76 00 65 00 53 00 75 00 72 00  .W.a.v.e.S.u.r.
000508E0 72 00 6F 00 75 00 6E 00 64 00 20 00 50 00 6C 00 r.o.u.n.d. .P.l.
000508F0 75 00 67 00 69 00 6E 00 00 00 08 00 4D 00 53 00 u.g.i.n.....M.S.
00050900 20 00 53 00 61 00 6E 00 73 00 20 00 53 00 65 00  .S.a.n.s. .S.e.
00050910 72 00 69 00 66 00 00 00 01 00 01 50 00 00 00 00 r.i.f......P....
00050920 43 00 6B 00 32 00 0E 00 01 00 FF FF 80 00 4F 00 C.k.2.........O.
00050930 4B 00 00 00 00 00 00 00 01 12 02 50 00 00 00 00 K..........P....
00050940 06 00 05 00 AD 00 0C 00>FF FF FF FF 82<00 44 00 ..............D. sekwencja FF FF FF FF 82
00050950 65 00 6D 00 6F 00 6E 00 73 00 74 00 72 00 61 00 e.m.o.n.s.t.r.a. "Demonstration Version"
00050960 74 00 69 00 6F 00 6E 00 20 00 56 00 65 00 72 00 t.i.o.n. .V.e.r. w UNICODE
00050970 73 00 69 00 6F 00 6E 00 00 00 00 00 00 00 02 50 s.i.o.n........P
00050980 00 00 00 00 06 00 18 00 AD 00 20 00 FF FF FF FF .......... ..... sekwencja FF FF FF FF 82
00050990 82 00 54 00 68 00 69 00 73 00 20 00 76 00 65 00 ..T.h.i.s. .v.e.
000509A0 72 00 73 00 69 00 6F 00 6E 00 20 00 6F 00 66 00 r.s.i.o.n. .o.f.
000509B0 20 00 74 00 68 00 65 00 20 00 70 00 6C 00 75 00  .t.h.e. .p.l.u.
000509C0 67 00 69 00 6E 00 20 00 69 00 73 00 20 00 61 00 g.i.n. .i.s. .a.
000509D0 20 00 64 00 65 00 6D 00 6F 00 6E 00 73 00 74 00  .d.e.m.o.n.s.t.

Widzimy, e nad oraz pod textem Demontration Version znajduje si FF FF 82, ale dla nas
liczy si tylko sekwencja nad textem,pod 5094C jest liczba 82h, zmieniamy j na 90h
(naley zmieni tryb na overwrite), potem CTRL-S(zapis).Uruchamiamy ponownie Winampa
z ustawionym pluginem Wavesurround wow nie ma nagscreena, ok jedno z gowy.

LIMIT CZASOWY
2.Nie mam czasu czeka 4 godziny(jak kto chce to moe ;) aby sprawdzi czy plugin si
wyczy wic aduj dsp_wa3d.dll do W32dsm.Potem szukam w string ref textu ktry mwi
co o tym, e czas suchania muzyczki z uyciem pluginu nam si skoczy znajduj co
takiego:

:10001C1A E808240000              call 10004027
:10001C1F D905A8560110            fld dword ptr [100156A8]
:10001C25 D81D08100110            fcomp dword ptr [10011008]
:10001C2B DFE0                    fstsw ax
:10001C2D F6C401                  test ah, 01
:10001C30 7514                    jne 10001C46
:10001C32 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"Wave Art, Inc. WaveSurround"
                                  |
:10001C34 6874210110              push 10012174

* Possible StringData Ref from Data Obj ->"The time limit for the evaluation "
                                        ->"version has expired.  Please contact "
                                        ->"Wave Arts, Inc. to purchase a "
                                        ->"registered version of the WaveSurround "
                                        ->"Plugin for only $9.95!"
                                  |
:10001C39 6890210110              push 10012190
:10001C3E 6A00                    push 00000000

* Reference To: USER32.MessageBoxA, Ord:0195h
                                  |
:10001C40 FF15A8930110            Call dword ptr [100193A8]

Z powyszego fragmentu kodu wnioskuj(oraz po chwili w SoftIce,gdy kod
ten wykonywany jest przy starcie pluginu oraz prawdopodobnie po 4 godzinach),
e wanie taki text pojawi si gdy upynie 4 godziny z uyciem pluginu.Pod
10001C30 znajduje si skok warunkowy, ktry jest wykonywany gdy jeszcze nie
miny 4 godziny, naley tak go wic zmieni aby zawsze nastpowa skok

orgina:
75 14	jne 10001C46
patch:
EB 14	jmp 10001C46

po tych zmianach plugin nie powinien si wycza po 4 godzinach pracy,ale
jeeli nie mam racji to pisz na wojcikb@192.168.1.1
W string ref znale mona te ciekawy text

* Possible StringData Ref from Data Obj ->"EVALUATION EXPIRED"
                                  |
:10003040 687C230110              push 1001237C
:10003045 8B55B4                  mov edx, dword ptr [ebp-4C]
:10003048 52                      push edx

* Reference To: USER32.DrawTextA, Ord:00AAh
                                  |
:10003049 FF1518940110            Call dword ptr [10019418]
...
:1000309A 52                      push edx
:1000309B 6AFF                    push FFFFFFFF

* Possible StringData Ref from Data Obj ->"Effect is turned OFF."
                                  |
:1000309D 6890230110              push 10012390
:100030A2 8B45B4                  mov eax, dword ptr [ebp-4C]
:100030A5 50                      push eax

* Reference To: USER32.DrawTextA, Ord:00AAh
                                  |
:100030A6 FF1518940110            Call dword ptr [10019418]

sprawdzmy co jest wczeniej przed kodem odpowiedzialnym za wywietlenie tego
textu:

* Reference To: USER32.DrawTextA, Ord:00AAh
                                  |
:10002FD9 FF1518940110            Call dword ptr [10019418]
:10002FDF D905A8560110            fld dword ptr [100156A8]
:10002FE5 D81D08100110            fcomp dword ptr [10011008]
:10002FEB DFE0                    fstsw ax
:10002FED F6C401                  test ah, 01
:10002FF0 0F85BB000000            jne 100030B1
...

musimy sprawid aby nigdy nam si text EVALUATION EXPIRED nie pojawi.Mamy wic do
dyspozycji

:10002FED F6C401		test ah, 01
:10002FF0 0F85BB000000		jne 100030B1

a co si stanie gdy umiecimy taki fragment kodu

:10002FED 3BC0			cmp eax,eax
:10002FEF 90			nop
:10002FF0 0F84BB000000		je 100030B1

cmp eax,eax ustawi nam flage zerow
nop dla rwnoci bajtw
je skok jeeli flaga zerowa ustawiona,czyli po cmp eax,eax flaga bdzie zawsze ustawiona
wic zawsze nastpi skok.Dla celw testowych zamiast nop-a mona wstawi int 3(rwnie 1
bajt 0CCh) i sprawdzi czy w ah jest 1(test ah,1) jeeli nie ma jedynki to w orginalnej
wersji(nie spatchowanej) nastpi obejcie kodu odpowiedzialnego za wywietlenie textu
EXPIRED, inaczej efekt surround zostanie wyczony.

Po wszystkich zmianach, uruchamiamy ponownie plugina i moemy cieszy sie efektem
surround.

bart


