Cel  : notepad.exe (wiecie co to jest ;)
Tools: SI,W32dsm,edytor hex

 Odwiedziem ostatnio kumpla, ktry ma zainstalowanego NT-ka i
zauwayem,e notatnik z NT, pliki ktre maj rozmiar wikszy od
64kb wysya od razu do wordpada bez wywietlania zapytania tak jak to
jest w win95 & 98.Postanowiem wic "naprawi" notatnik z shita95.
Do dziea:
1.Wchodzimy do SI i ustawiamy puapk na MessageBoxA
2.Uruchamiamy notepada i otwieramy jaki duy plik(>64kb)
3.SI zatrzymuje dziaanie progsa na wywoaniu funkcji MsgBox,
naciskamy F11 i spisujemy adres skd nastpio wywoanie funkcji MsgBox

402D69 <--dla leniwych

4.Gasimy puapki w SI.Uruchamiamy W32dsm i adujemy notepada
5.Po dekompilacji klikamy na GOTO-->CODE LOCATION i wpisujemy wczeniej
spisany adres wywoania MsgBoxa

* Reference To: KERNEL32.GetStartupInfoA, Ord:0124h
                                  |
:00402D4F FF1558734000     Call dword ptr [00407358]

* Possible Reference to String Resource ID=00036: "&f"
                                  |
:00402D55 6A24             push 00000024
:00402D57 8B7508           mov esi, dword ptr [ebp+08]
:00402D5A 6A00             push 00000000
:00402D5C FF35B0604000     push dword ptr [004060B0]
:00402D62 56               push esi

* Reference To: USER32.MessageBoxA, Ord:0176h
                                  |
:00402D63 FF1530744000     Call dword ptr [00407430]<--nasz MSGBOX
:00402D69 83F806           cmp eax, 00000006<--czy nacisne TAK
:00402D6C 0F85A9000000     jne 00402E1B<--jeeli nie to zakocz proces

Poniej kod odpowiedzialny za uruchamianie wordpada

:00402D72 6804010000        push 00000104
:00402D77 8D85B8FEFFFF      lea eax, dword ptr [ebp+FFFFFEB8]
:00402D7D 50                push eax
...
4.Szukanie miejsca skd nastpi skok wywoania MSGBOXA nie dao
rezultatw(nie chciao mi si gboko kopac ;), wic naleaoby zmieni program tak aby tu przed wywoaniem
MSGBOXA by skok do lokacji za skokiem warunkowym pod adresem 402D6C tak aby
odrazu uruchamia sie wordpad.
Dobrym miejscem do wstawienia skoku jest kod przed wywoaniem msgboxa
gdzie zapamietywane sa parametry wywoania(ktre nie bd konieczne)

:00402D55 6A24             push 00000024 <--miejsce patchowania

5.Klikamy na 402D55 i z paska statusu w W32dsm odczytujemy offset.
Zapisujemy go 2155h.Klikamy na 402D77,adres gdzie ma nastpi skok, odczytujemy
offset 2172h.

6.Uruchamiamy hiew,adujemy do niego notepada.Zmieniamy tryb na decode
(F4),naciskamy F5 i wpisujemy offset 2155h.Widzimy kod
 00002155: 6A24                         push      024<--tu jestemy
 00002157: 8B7508                       mov       esi,[ebp][00008]
 0000215A: 6A00                         push      000
7.Naciskamy F3(edit) potem F2(cudowny wynalazek ;) i wpisujemy

 jmps 2172           

Te s na kocu jmp oznacza jmp short lokacja, czyli krtki skok w zakresie od 
-127 do 128 bajtw od bierzacej lokacji.
Po zmianach kod powinien wyglda tak

00002155: EB1B                         jmps      000002172   -------- (1)
00002157: 8B7508                       mov       esi,[ebp][00008]
...
8.Naciskamy ENTER potem F9 aby zapisa zmiany.Wychodzimy z hiew(F10)
9.Uruchamiamy ponownie zmieniony notatnik,adujemy plik np.user.dat i co?
Tym razem jest on automatycznie wysyany do wordpada.
10.Poniej patch w paskalu (szkoda asm dla takiej drobnostki)
=================================================================
program patch;
uses crt;

const	adr=$2155;
	val:array[0..1] of byte=($EB,$1B);
	fname='notepad.exe';
var	ffile:file;

begin
	writeln('--------------------------------------------------------');
	writeln('Program  :Notatnik                                      ');
	writeln('Dzialanie:Usuwa zapytanie czy otworzyc plik w wordpadzie');
	writeln('          podczas otwierania plikow >64kb               ');
	writeln('-------------------------------------------------[bart]-');

	assign(ffile,fname);
	{$I-}reset(ffile,1);{$I+}
	if IOresult<>0 then
	 begin
	 writeln('Nie znaleziono pliku '+fname+'!');
	 halt;
	 end;
	seek(ffile,adr);
	blockwrite(ffile,val,SizeOf(val));
	writeln('Program poprawiono ;)');
end.

11.To by byo na tyle.Cze!