Jak w WinAPI dynamicznie utworzyć jak najmniejszego exe'ka
Chodzi ci o napisanie programu w WinAPI, żeby był mały? No to polecam mały przykład Adama wprowadzający w temat (dział Download) i WindowsSDK.
Nie. Dokładnie to chodzi mi o to że mój prog ma tworzyc dynamicznie exeka w którym chcialbym zapisywac rózne dane. Dlatego ten exek utworzony powinien byc dość mały.
Przejrzyj sobie to:
http://4programmers.net/view.php?id=37
Poszukaj też w kodach źródłowych, a na pewno kilka znajdziesz.
Stworzyc samemu exe'ca, ktory bylby zgodny z PE - obecny stosowany przez Windows format pliku dla dll i exe, no to stary porywasz sie na bardzo trudna rzecz (z motyka na ksiezyc niemalze :-8 ).
Chodzi o to ze musisz znac format PE, a to juz samo w sobie mimo ze na neciku dobrze opisane jest TRUDNE.
Ale qwa o czym ja pisze - to jest niewykonalane zeby samemu zrobic exe'ca !!
Jesli chcesz cos przechowywac to zrob np plik temporary i tam wrzucaj smieci - exe'ca ktory bylby exee'ciem na pewno nie zrobisz, jeszcze pol biedy z sekcjami poczatkowymi ale sekcja kodu ?!
Mimo wszystko byloby latwiej gdybys rozwinal na jaka cholere ci akurat exec ??
OK spoko poniosło mnie troche ! Chodzi o to, że chcę w jak najbezpieczniejszy sposób przechować hasełko do proga, a że nie moge (chyba że nie potrafie) dokleic tekstu do tegoż exeka w runtimie więc może jakieś inne racjonalne propsy jak bym mógł to przechować?
To absolutnie nie jest niemożliwe!! :-D
Przecież jak kompilator tworzy exe? Tworz go od 0 przecież... Jest też całę mnóstwo patchy modyfikujących execki. Wystarczy że:
- Dodasz do zasobow wlasnego proga inny prog ktory wypakujesz na dysk gdy bedziesz chciał zmodyfikować orginalnego execka.
- Uruchomisz wypakowany program z odpowienimi parametrami, które będą określać jakie zmiany chcesz dokonać w głównym execku.
- Wypakowany program zamknie podstawowa aplikacje.
- Na wzór innych programów patchy zmodyfikuje execka wedle parametrow z ktorymi zostal uruchomiony.
- Uruchomi podstawowa aplikacje.
- Albo usunie sie samoczynnie, albo zostanie usuniety przez podstawowa aplikacje.
Tutaj oczywiscie najwiekszym problemem jest stworzenie programu patchujacego :-) Co dla poczatkujacego programisty jest niemal niemozliwe. I oczywiscie ponadto klania sie znajomosc asma... :>
Ahaaaa.... O to chodzi.... No to nie trzeba żadnych execów, tylko zahashowane hasło. Wpisz w google "MD5 +Delphi", poszukaj w wynikach modułu do szyfrowania MD5.
Jak użytkownik podaje hasło po raz pierwszy, potraktuj je algorytmem i zapisz do pliku wynik. Gdy podaje je później, szyfruj to, co wprowadził i porównuj z zaszyfrowaną wersją z pliku - jeśli są takie same, to znaczy, że hasła też są identyczne. Takiego zaszyfrowanego hasła nigdzie nie musisz ukrywać, możesz nawet wstawić je do pliku o nazwie "TU_SA_HASLA.txt" - nikomu nic nie da wersja zaszyfrowana, MD5 to algorytm jednostronny, niemożliwy do odwrócenia.
my_nick: sposób też nie do końca dobry :). Co będzie, kiedy sobie napiszę program do kodowania md5, po czym zakoduję nowe hasło i wrzucę hash do tegoż pliku? :)
A czy można jakoś bezpiecznie do resourca wcisnąć hasło??
Wcisnij hasha do resourca... mozesz tez go czyms zaszyfrowac. Lub uzyj jako hasha jakis wyraz uzyty w programie.
Hasło musi być możliwe do zmiany podczas gdy prog jest odpalony.
Jak do resa dodać tekst ???
Dodajesz przez TResourceStream a następnie wystarczy zabezpieczyć zasoby tak aby przy edycji wyglądały jak uszkodzone. Gdzieś w FAQ to było.
Nie o to mi chodzilo. Wykorzystaj to z md5, tylko hasha do niego zapisz w programie, moze to byc np zwykla stala.
Lub jesli chcesz cos jeszce bardziej nie do zlamania to mozesz po kazdym uruchomieniu programu zmieniac hasha i jego nr zapisac tez w jakims pliku. Sposobow jest bardzo duzo...
jesli podasz stala w programie to nie zmienisz juz hasla, poza tym mozna to odczytac z exe'ka.
a nie mozesz zaszyfrowac zaszyfrowanego hasla? :)
To absolutnie nie jest niemożliwe!! :-D
...
Tutaj oczywiscie najwiekszym problemem jest stworzenie programu patchujacego :-) ...
Eh tu nie mowa o modyfikowaniu istniejacego exe'ca co akurat nie jest trudne, ale o stworzeniu od podstaw nowego - a tego nie zrobisz juz zadnym patchem, no chyba ze skopiujeszz jednego exe'ca czesc do drugiego ale to juz inna bajka.
eh, tworzysz w programie TStringList i w nim dodajesz jakies stale. Obok programu bedzie zaszyfrowany plik z haslem i jeszce jeden (zaszyfrowany, ale tu juz mozesz jakis wlasny "algorytm" napisac, ktory twoj program bedzie potrafil rozszyfrowac) z numerem aktualnego hasha.
Gdy odpalasz, program rozszyfrowuje plik z nr i wyciaga ze TStringList[NUMER] hasha, ktorego uzywa do porownania z haslem. Jezeli haslo jest prawidlowe zmien NUMER np o 1 i na nowo zaszyfruj plik z haslem oraz zapisz nowy NUMER.
Mysle, ze takie zabezpieczenie powinno ci calkowicie wystarczyc.
Tak swoja droga to niepowinienes pytac sie, jak zabezpieczyc program, w miejscach publicznych :/
DOBRA! Napiszę sobie funkcję kodującą i zapiszę do resoursa w jakiś niekonwencjonalny sposób!
Dzięki wszystkim za porady!