Modyfikacja programu *.exe portable

0

Witam serdecznie.

Potrzebuję nieco zmodyfikować malutki „jedno plikowy” program MWSnap.exe wersja portable, który napisany jest raczej w Delphi.
Modyfikacja ma polegać na zmianie miejsca zapisu ustawień / konfiguracji programu z rejestru windows [HKEY_CURRENT_USER\Software\MirWoj\MWSnap] jak jest obecnie do pliku *.ini który będzie w tym samym katalogu co program.
Program do ściągnięcia tutaj http://www.mirekw.com/winfreeware/files/MWSnap300.zip

Proszę o pomoc, zapłacę rozsądną cenę, do dogadania.
Pozdrawia Krynio

0

Ale że tak bez kodu źródłowego? Pomarzyć możesz :P

3

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.

0

Ale po co hokować, kodować itp. Jeśli chodzi nam o zrobienie pełnego programu typu portable, aby wszystko było zapisywane na pendrive, to o wiele szybciej będzie (zwłaszcza jeśli chodzi tylko o jedną gałąź w rejestrze) skorzystać z gotowego rozwiązania jakim jest http://portableapps.com/apps/development/portableapps.com_launcher skonfigurowanie launchera pod 1 gałąź rejestru to 5 minut roboty bez kodowania.

Sam nie raz robiłem swoje wersje portable narzędzi które są mi potrzebne do pracy i to działa.

0

No dobrze, ale autor chce zmienić działanie programu. Chyba bez angażowania dodatkowego środowiska jak zrozumiałem. Często środowiska Portable będą nam "śmiecić" w %(LOCAL)APPDATA%. Tutaj chodziło o zmodyfiowanie programu. Raz będzie miał zapisane z uprawnieniami INI i program to będzie traktował jako własne. Tego bez takich modyfikacji lub samego exeka bez kodu źródłowego nie da się zrobić. Póki co pytający zaproponował zlecenie. Ale niestety za stawkę nieadekwatną do włożonej przy tym pracy. Czekam na odpowiedź. Gdyż jeśli nie przyjmie On mojej oferty, to będzie sam dalej kombinował, jak jest mu wygodniej :/

0

W takim razie o wiele lepiej by było moim zdaniem napisać do autora. Dla niego to będzie po pierwsze o wiele prostsze, po drugie szybsze i pewniejsze. Ale ogólnie takie coś jest wykonalne. Pytanie tylko czy warto...

1 użytkowników online, w tym zalogowanych: 0, gości: 1