Cel	:FullDisk v3.6
Opis	:Program suy do przedstawiania objtoci poszczeglnych
	 katalogw,plikw na wykresach
Gdzie	:CHIP z koca wrzenia(ju go nie mam a numeru nie pamitam)
Toolz	:Soft Ic3,W32dsm

1.FullDisk w wersji niezarejestrowanej, gdy wychodzimy z programu
wywietla nagscreen.Program umoliwia zarejestrowanie, wic wchodzimy
do menu FullDisk potem Register
2.Wpisujemy jak zwykle swoje ulubione dane, zanim klikniemy OK
wchodzimy do SoftIca i zakadamy puapk na GetWindowTextA, wychodzimy
z SI klikamy na OK
3.Sice zatrzyma prac programu an wywoaniu GetWindowTextA, ciskamy
jeszcze raz F5(2 okna edycyjne) potem F11.Spjrzmy gdzie jestemy
wewntrz jakiej procedury w bibliotece MFC42.DLL(uywana w programach
napisanych w C++).Mona si bawi w F12, zakadanie puapki na
MessageBoxA ktry pojawia si gdy podamy niepoprawny numer seryjny,
ale szybciej dojdziemy do skutku zapuszczajc W32dsm.
4.adujemy plik FullDisk.exe do W32dsm, gdy proces deasemblacji
(nienawidz uywa tego sowa ;)dobiegnie koca szukamy w STRING REF
textu z okienka MessageBoxA ktre pojawia si gdy podamy zy s/n

Name / Code mis-match. Try again.

jest
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00406410(C), :0040642A(C) <--std nastpiy skoki
|
:00406496 6A00                    push 00000000
:00406498 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"Name / Code mis-match. Try again."
                                  |
:0040649A 68C4474100              push 004147C4

* Reference To: MFC42.Ordinal:04B0, Ord:04B0h
                                  |
:0040649F E88C730000              Call 0040D830

w W32dsm klikamy na Goto Code Loc i wpisujemy 00406410

:00406409 E852060000              call 00406A60
:0040640E 85C0                    test eax, eax
:00406410 0F8580000000            jne 00406496 <--std nastpi skok
:00406416 8D4DEC                  lea ecx, dword ptr [ebp-14]

pod ebp-14 znajduje si adres naszego cigu zapisany w postaci DWORD(DOUBLE
WORD-PODWJNE SOWO)jeeli w SoftIce napiszemy d ebp-14 zobaczymy w oknie
z danymi(data window) w postacji hex zapisan liczbe 

30 44 66 00

naley to czyta w odwrotnej kolejnoci tzn.

00 66 44 30 =664430

gdyby byo np.

34 59 3A 4C

czytamy to

4C 3A 59 34

jeeli teraz w SI napiszemy d 664430 zobaczymy nasz wprowadzony kod


:00406419 51                      push ecx
:0040641A 8D5588                  lea edx, dword ptr [ebp-78] <--adres dword poprawnego seriala
:0040641D 52                      push edx			 ,chyba nie trzeba dodawa co z tym zrobi
:0040641E E85D060000              call 00406A80 <--sprawdzenie czy seriale si zgadzaj
:00406423 25FF000000              and eax, 000000FF
:00406428 85C0                    test eax, eax
:0040642A 746A                    je 00406496 <--std rwnie nastpi skok do bad boy
:0040642C E8EFD7FFFF              call 00403C20
:00406431 894584                  mov dword ptr [ebp-7C], eax
:00406434 8D4DF0                  lea ecx, dword ptr [ebp-10]
:00406437 E834D7FFFF              call 00403B70
:0040643C 50                      push eax

* Possible StringData Ref from Data Obj ->"Name"
                                  |
:0040643D 6888474100              push 00414788

* Possible StringData Ref from Data Obj ->"User"
                                  |
:00406442 6890474100              push 00414790
:00406447 8B4584                  mov eax, dword ptr [ebp-7C]
:0040644A 8B88C4000000            mov ecx, dword ptr [eax+000000C4]
:00406450 E81B1A0000              call 00407E70
:00406455 8D4DEC                  lea ecx, dword ptr [ebp-14] <--adres naszego seriala zaaduj do ecx
:00406458 E813D7FFFF              call 00403B70			 serial jest potem zapisywany do rejestru 
:0040645D 50                      push eax

* Possible StringData Ref from Data Obj ->"Code"
                                  |
:0040645E 6898474100              push 00414798

* Possible StringData Ref from Data Obj ->"User"
                                  |
:00406463 68A0474100              push 004147A0
:00406468 8B4D84                  mov ecx, dword ptr [ebp-7C]
:0040646B 8B89C4000000            mov ecx, dword ptr [ecx+000000C4]
:00406471 E8FA190000              call 00407E70
:00406476 8B957CFFFFFF            mov edx, dword ptr [ebp+FFFFFF7C]
:0040647C C782A401000001000000    mov dword ptr [ebx+000001A4], 00000001
:00406486 6A00                    push 00000000
:00406488 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"Thank you for registering!"
                                  |
:0040648A 68A8474100              push 004147A8

* Reference To: MFC42.Ordinal:04B0, Ord:04B0h
                                  |
:0040648F E89C730000              Call 0040D830
:00406494 EB0E                    jmp 004064A4

jeeli dokadnie przesledzimy kod pod 0040641E dojdziemy do

:00403BE0 55                      push ebp
:00403BE1 8BEC                    mov ebp, esp
:00403BE3 8B450C                  mov eax, dword ptr [ebp+0C]
:00403BE6 50                      push eax
:00403BE7 8B4D08                  mov ecx, dword ptr [ebp+08]
:00403BEA 51                      push ecx

* Reference To: MSVCRT._mbscmp, Ord:0159h <--(Memory)Byte String Compare
                                  |
:00403BEB FF1544F64000            Call dword ptr [0040F644]
:00403BF1 83C408                  add esp, 00000008
:00403BF4 5D                      pop ebp
:00403BF5 C3                      ret

5.Zabawa
Program mona spatchowa na wiele sposobw ale jednym z moich
ulubionych jest patchowanie w pamici(omijamy w ten sposb problemy z sum CRC
w niektrych programach) ktrego uyjemy , eby prgogram "myla" e wprowadzilimy
poprawny serial a nastpnie zapisa do rejestru poprawny serial.Przeledmy kod:
...
:00406416 8D4DEC                  lea ecx, dword ptr [ebp-14] <--do ecx wskanik adresu naszego seriala
:00406419 51                      push ecx <--na sztos ;)
:0040641A 8D5588                  lea edx, dword ptr [ebp-78] <--wskanik adresu poprawnego seriala
:0040641D 52                      push edx <--na stos
:0040641E E85D060000              call 00406A80 <--sprawdzenie czy seriale si zgadzaj
...

jeeli przyjrzymy si dokadnie powyszemu kodowi(i sprawdzimy to pod SoftIcem) dostrzeemy, e
pod adresem 406418 wystarczy zmieni bajt 0ECh na 88h, eby ecx wskazywao [ebp-78] tak jak jest
to pod 40641C a [ebp-78] wskazuje adres gdzie przechowywany jest poprawny serial, wic funkcja
pod 40641E bdzie porwnywaa poprawny serial z poprawnym, wskutek czego nie wywietli nam si
MsgBox o niepoprawnym serialu.Ok ale co dzieje si z naszym serialem:

:00406455 8D4DEC                  lea ecx, dword ptr [ebp-14] <--adres naszego seriala zaaduj do ecx
:00406458 E813D7FFFF              call 00403B70			 serial jest potem zapisywany do rejestru
...
adres w pamici naszego wprowadzonego seriala jest zapamitywany i uywany do zapisania
naszego wprowadzonego seriala(nie tego poprawnego wygenerowanego przez program!)
do rejestru,hmm ale my chcemy aby do rejestru zapisywany by ten poprawny a nie
nasz belejaki.Wic sprawdmy czy zmiana bajtu tym razem spod 406455 ECh na 88h
(to co robilimy powyej) da efekt.Sprawdzamy to pod SoftIcem zmieniajc bajt ECh na 88h
tak aby ecx wskazywao na adres gdzie jest zapisany poprawny serial([ebp-78])
ledzimy zmieniony program,wow dziaa pod adresem 406416 do ecx adowane jest to samo co
do edx, a pod 406455 do ecx adowany jest wskanik adresu gdzie przechowany jest
serial wygenerowany przez program, ktry nastpnie jest zapisywany do rejestu.Cao
tej roboty mona zleci loaderowi lub trainerowi jak tam kto woli.rdo w pliku mempach.zip
z tym tutem(versja pod masma)

bart
EOF
