[...] Inni z kolei chcieliby napisać pseudo kompilator, który by generował plik EXE (skompilowany wcześniej w jakimś znanym nam języku programowania) z dodanym do tego pliku EXE jakimś kodem. Tak działają różne programy konwertujące np. pliki MP3 do plików EXE które mają za zadanie odtwarzać muzykę. Pewnym problemem jest właśnie podmiana zasobu w dowolnym pliku wykonywalnym [...]

Data dodania: 2007-04-14

Wyświetleń: 11783

Przedrukowań: 0

Głosy dodatnie: 0

Głosy ujemne: 0

WIEDZA

0 Ocena

Licencja: Creative Commons

W swojej książce Vademecum Hakera. Edycja plików binarnych dość dokładnie opisałem program Resource Hacker. Program ten potrafi edytować zasoby w pliku EXE (np. można podmieniać ikony, bitmapy, napisy itp.). Niektórzy chcieliby napisać własny program podobny do programu Resource Hacker. Inni z kolei chcieliby napisać pseudo kompilator, który by generował plik EXE (skompilowany wcześniej w jakimś znanym nam języku programowania) z dodanym do tego pliku EXE jakimś kodem. Tak działają różne programy konwertujące np. pliki MP3 do plików EXE które mają za zadanie odtwarzać muzykę. Pewnym problemem jest właśnie podmiana zasobu w dowolnym pliku wykonywalnym.

Sam dość długo poszukiwałem rozwiązania tego problemu. A problem jest ciekawy gdyż windowsy z linii NT (tj. XP/200x/NT) posiadają w pliku kernel32.dll odpowiednie funkcje API które wykonują czarną robotę. Natomiast windowsy z linii 9x (95/98/ME) posiadają uboższą wersję pliku kernel32.dll bez owych funkcji API. Na stronie microsoftu znalazłem bibliotekę unicows.dll która zawiera owe funkcje API, ale nie działa ona pod windowsami z lini NT. Dlatego należy stworzyć dla identyczne programy różniące się jedynie deklaracjami funkcji API dla dwóch różnych rodzajów systemów operacyjnych windows. W załączonym programie skorzystałem z kompilacji warunkowej (zmieniając jedną stałą jest tworzony plik dla odpowiedniej wersji systemu operacyjnego). Oczywiście należałoby w owym programie dać jakiś mechanizm kontroli który sprawdzałby czy pod windowsem XP nie został odpalony program w wersji dla Windowsa 9x, ale nie chciałem zaciemniać kodu.

Pobierz przykładowy program napisany w Microsoft Visual Basic 6.0 (120 KB)

W archiwum są dwa programy. Pierwszy (EdytowanyPlik.exe) ma za zadanie wyświetlić zasób o numerze 101 który jest w tym pliku (w programie Resource Hacker znajdziesz ten zasób w gałęzi CUSTOM). Drugi program (EdytorZasobow.exe) prosi użytkownika i wpisanie jakiegoś tekstu i ten tekst wkompilowuje w plik EdytowanyPlik.exe.
Licencja: Creative Commons