Zawsze możesz pokombinować tak jak pokazuje w moim tutorialu o reversowaniu WinRipper na YouTube. Jednak to że program będzie w Delphi nie ma znaczenia. Jeżeli jest portable to używa pewnie jakiegoś sandboksa, a to też trzeba rozpakować. Co nie zrobi się od ręki. Do tego należy dodać fakt, że nawet posługując się technikami inżynierii wstecznej i dodając wymafane funkcje API do importów oraz dorabiając odwołania w kodzie może zabraknąć możłiwości zmieszczenia się z nowymi opcodami. Strasznie dużo rzeźbienia ogólnie by z tym było raczej. Najprościej skontaktować się z autorem i poprosić Go o modyfikację kodu programu tak by zmiany były "po Twojemu". Jeżeli jesteś w stanie za to płacić to nawet przy oporze autora do zmian w ten sposób byś go najpewniej zmotywował do roboty.
EDIT: zrobiłem rekonesans. Sprawa jest banalna. Wystarczy rozpakować głowny exek UPX'em, co udaje się bez problemów, dodać sobie jakąś własną dllkę. A w tej dllce można bez problemów w dowolnym języku - oczywiście mi najłatwiej w Delphi - dodać kod z Hookami na funkcje WinAPI do obsługi Rejestru Windows. Tylko, że zamiast tworzenia kluczy rejestru lub ich odczytów zrobić wszystko oparte o INI.
Natomiast co do kontaktu z autorem, nie wiem czy to będzie faktycznie takie "hop siup". Stronę swoją ma, ale nie rozwijał tego programu chyba od dość dawna. Ale zawsze można spróbować się zkontaktować. Co do dodawania dllki to robisz to najlepiej jakimś PE edytorem, chocby tak jak widać na moim filmiku, o którym wspominam na początku. Zagadnienie o jakim musisz poczytać to dll spoofnig.
Tylko tutaj nie ma co mozolnie robić na przykład fakeowej dllki version.dll
(bo ta ma akurat najmniej eksportów do przekierowania na oryginalną dllkę w przypadku tego programu). Tylko dodać własną dllkę z jakimś jednym eksportem może być nawet takie coś. Robiłem w ten sposób dodatkowe features jak minimalizacja środkowym klikiem DOSBoxa czy SCUMVM. I bez problemów chodzi.
library thecompany;
uses
Windows,
Messages;
{...}
procedure TheCompanyRulez; stdcall;
begin
end;
exports
TheCompanyRulez;
var
TheadId : Cardinal;
begin
CreateThread(nil, 0, @MainThreadProc, nil, 0, TheadId);
end.
I w tym wątku robisz co potrzeba. A dodajesz sam export jak tutaj na thecompany.dll
i funkcję o nazwie TheCompanyRulez
. Dllkę wrzucasz do katalogu z programem i tyle. Jak to mawiają niektórzy wulgarnie. Proste jak je...dzenie ;P
EDIT #2: zobacz sobie dołączone pliki do tego posta. W archiwum for_krynio_thecompany_dll.rar
jest prosta dllka. Która została wrzucona i dodana jako export do archiwum z programem i jest w for_krynio_mwsnap.rar
. Po zamknięciu programu jeżeli utworzony został pomyślnie plik .\reg_log.txt
słychać krótki Beep. I w tym pliku masz powtarzające się sekcje z rejestru.
W archiwum z kodem thecomompany.dll
pisanym i kompilowanym pod Delphi 7 , w pliku windows.txt
masz cały moduł windows.pas
z pod Delphi 7 Enterprise. Przyda się w procesie dodawania innych funkcji API. Wylistujesz je sobie pod HIEW lub jakimś PE Editorem, polecam ten sam, który używam w swoim filmiku o reversowaniu WinRippera.
Ważne, zmodyfikowany MWSnap.exe
jest już z importem do thecompany.dll
i tej funkcji API także bez thecompany.dll
się nie uruchomi. No to tyle bo się rozpisałem, za co przepraszam i te co chwilowe edycje. Połowe roboty masz już odwaloną. Teraz tylko wystarczy pohookować pozostałe funkcje operujące na rejestrze (będą to w tym przypadku raczej te z Ex
w nazwie) i zrobić zapis oraz odczyt wszystkiego do pliku INI o wybranej przez Ciebie nazwie z tego samego katalogu co exek głowny. Powodzenia.