Jak napisać program, który edytuje zasoby w jakimś pliku EXE?
Autor: Damian Daszkiewicz
[...] 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 [...]
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.
Autorem artykułu jest Damian Daszkiewicz Licencjonowane artykuły dostarcza Artelis.pl.
Brak komentarzy:
Prześlij komentarz