Jak zmienic haslo w programie EXE?

0

Opisze problem. mam program skompilowany na *.exe
Po uruchomieniu programu nalezy podac haslo. Przykladowo podaje haslo: volvo i program wchodzi do aplikacji glownej.
teraz wchodze w opcje i zmieniam haslo dostepu. haslo nalezy zmienic w programie *.exe.

Istnieje drugie rozwiazanie: mam aplikacje *.exe z haslem i drugi program ktory mi zmienia to haslo.

Ma ktos jakis pomysl jak to zrobic. Tylko nie piszcie: uzyj plikow ini albo rejestru. ?

0

może skorzystać z zasobów? Lub możesz na końcu pliku dopisać to hasło, a potem tylko zmieniać te ostatnie bajty.

0

To za proste do roszyfrowania te bajty. a masz jakies konkretne rozwiazanie ? ktos juz zrobil moze cos takiego?

0

no ale taki sposob nie oznacza ze haslo nie moze byc szyfrowane, prawda?

0

ale czy jak zmienie dlugosc hasla to czy sie exec nie wykrzaczy >? hmm?

0

Ja nie wiem, to nie mój pomysł, no ale mozna sie zastanowic:

  1. jezeli haslo dasz w zasobach, to ten problem znika pod warunkiem ze dasz poprawny kod podmieniający zasoby, co tez niedawno bylo na forum (ktos podmieniał ikonę, kto inny dal dokladny opis struktury zasobow)

<font color="blue">( http://4programmers.net/Forum/viewtopic.html?id=43045 )</span>

  1. Jezeli haslo dasz na koncu pliku to ze zmienna dlugoscia mozesz sobie radzic w taki sposob ze absolutnie ostatni bajt to bedzie dlugosc hasla, wtedy odczytujesz te x bajtów wstecz
0

nie mialem okzaji sie bawic plikami exe i potrzebny mi zapewne wszystkim by sie przydal jakis kodzik , ktory by zobrazowal te punkty ikari

0

To byla czysta teoria, ja tez nigdy tego nie robilem... Zapytaj CyberKida :-/ Sorki

0

CyberKid masz jakis pomysl. msle ze czas teorie urzeczywistnic to by moglo byc dobre haslo zmieniane w execu. hmmm mam juz plan ale jak zwykle zawsze musi sie cos sp....lic.

0

Ja myślę, że to niemożliwe zmienić trochę bajtów w uruchomionym execu. Czyli program nie może zmieniać sam siebie. Musiałby byś jakiś drugi program, który to robi. ale skoro chcecie zapisać hasło do execa, to czemu nie po prostu do osobnego pliku? Poziom bezpieczeństwa się nie zmniejszy, a będzie to dużo łatwiejsze.

0

musi sie dac. w osobnym pliku nie moze byc wlasnie bo:
Jesli plik nie istnieje to albo haslo bedzie musialo byc<font color="white"> standardowe</span><font color="red"> ort! </span>
albo bez hasla.
I to dyskfalifikuje. Chyba sie nie poddacie nie raz kazdy o tym myslal moze wspolnie sie jakos uda ???

to moze na poczatek jak zrobic to drugim programem?>??

0

Jeśli ci zależy na 'niełamliwości' takiego hasła to może warto jednak przemyśleć zapis w rejestrze lub jakimś pliku w taki sposób: tworzysz wpis (ciąg) kilkudziesięciu/kilkuset losowych liter/cyfr/znaczków czy co tam chcesz, a twoje hasło 'rozczłonkowane' na pojedyncze litery wstawiasz w ten ciąg, każdą literę na stałej pozycji, np. pierwszą literę hasła jako 20 literę ciągu, drugą jako 36 etc. Program składając hasło za każdym razem wczytuje litery z określonych raz na zawsze pozycji i nie trzeba nic modyfikować w exe'xu, a przy dużej długości losowego ciągu praktycznie nie sposób wpaść jak to hasło jest tam zapisywane ;)
A jak pliku nie ma, to niech się program nie uruchamia: ten co grzebał będzie miał nauczkę ;)

0

WIDMO, ściągnij sobie żródło prosiaka - tam jest konfigurator servera, i on nadpisuje zmienną z hasłe, nazwą, portem... w drugim programie - szukaj, a znajdziesz

EOF

0

hłe hłe hłe, thenkles... poszukaj pliku exemod.pas na experts-exchange. jednak jakoś się da i to działa na XP jak i na 98 i kilku innych systemach

0

Ja zrobiem coś takiego, co prawda w Borland C++, ale to NIE MA znaczenia. Mogę poszukać.

Zadeklarowałem zmienąą static dość długą aby się nie powtórzyła (wziąłęm 8 bajtów), w Delphi to by było Const.

Gdy była zmiana, to po prostu otworzyłem EXE-ka binarnie znalazłem ten string i podmieniłem, przy okazji mieszając losowo inne zmienne static występujące po niej, aby nie było łatwo wykryć.

Oczywiście działa po ponownym uruchomieniu programu.

Działa o klientów do dziś.

0

hłe hłe hłe, thenkles... poszukaj pliku exemod.pas na experts-exchange. jednak jakoś się da i to działa na XP jak i na 98 i kilku innych systemach

Nie wiem czy czytałeś źródło ExeMod.pas:

<font color="blue">This unit enables you to make a delphi application that can
alter its own exe file on disk... this appears to happen
at runtime but actually the switch quickly takes place after
a shutdown of the running app during which a copy of the exe
deletes the old version and replaces it with a new version.
</span>

Czyli wcale nie zamienia podczas pracy, ale podczas restartu pliku!

0

Siemano :) obczailem pare zrodel. Wiec zmienic dane w pliku exe sie da ale plik musi byc zamkniety ewentualnie przy zmianie hasla trzeba:

  1. skopiowac plik z naszym programem
  2. zmienic w nim bajty
  3. odpalic go i z nowootwartego pliku wysylany jest roizkaz do zamkniecia aktualnego programu co oczywiscie mozna podac w opisie przy zmianie hasla ze program zostanie zresetowany anyway.
    Nie jest to takie trodne ale ....patrz OPIS
0
  1. skopiowac plik z naszym programem
  2. zmienic w nim bajty
  3. odpalic go i z nowootwartego pliku wysylany jest roizkaz do zamkniecia

A co z nazwą pliku "kopii" programu ?? Będzie musiała być inna niż oryginał i ze zmianą też będzie problem.

A może do zasobów progsa dodać małego exeka, który będzie wyładowywany w tym samym katalogu, następnie będzie zamykał progsa, modyfikował go i uruchamiał ponownie. A program przy starcie będzie sprawdzał czy ten programik jest i go usuwał. Hasło możnaby przesłać jako parametr w np. ShellExecute().

0

Co do bezpieczeństwa hasła. Można zastosować [code]hasła jednostronne[/code] - możliwe do złamania tylko metodą brute-force, nawet znajomość kodu źródłowego nic nie daje, nie możliwe jest odwrócenie algorytmu kodującego. Taki typ haseł stosuje się w systemach linuxowych.

0

to moze jakis przykllad takiego algoprytmu . Prosimy kazda wskazowka sie przyda

0

Też proponuję hasła jednostronne, bo nie ma potrzeby ukrywania ich. Rozszyfrowanie ich jest zwykle logicznie niemożliwe. Ostatnio zrobiłem algorytm szyfrowania jednostronnego oparty na xorowaniu. Co prawda wynik jest o połowę krótszy, niż oryginał, ale podczas xorowania przez odwrotność łańcucha, od połowy wyniku się zaczyna lustrzane odbicie, więc nie ma sensu go przechowywać w całości. A na pytanie, czemu trzeba łańcuch odwrócić - to, mam nadzieję, nie muszę odpowiadać....

Oto potrzebne funkcje:

Dwie do konwersji ASCII na indeksy 0-63 (0-9, A-Z, a-z), ostatnia - szyfrowanie właściwe.

function ASCIIToAlphanum(const Value: string): string;
var
  I: Integer;
begin
  SetLength(Result,Length(Value));
  for I:=1 to Length(Value) do
    case Value[I] of
      '0'..'9':Result[i]:=Char(Byte(Value[I])-48);
      'A'..'Z':Result[i]:=Char(Byte(Value[I])-55);
      'a'..'z':Result[i]:=Char(Byte(Value[I])-61);
      else Result[i]:=Value[I];
    end;
end;

function AlphanumToASCII(const Value: string): string;
var
  I: Integer;
begin
  SetLength(Result,Length(Value));
  for I:=1 to Length(Value) do
    case Byte(Value[I]) of
      0..9:  Result[i]:=Char(Byte(Value[I])+48);
      10..35:Result[i]:=Char(Byte(Value[I])+55);
      36..63:Result[i]:=Char(Byte(Value[I])+61);
      else Result[i]:=Value[I];
    end;
end;

function PassXor(const Value: string): string;
var
  Temp: string;
  I: Integer;
begin
  Temp:=Value;
  if (Length(Temp) mod 2)<>0 then Temp:=Temp+#0;
  SetLength(Result,Length(Temp));
  for I:=1 to Length(Temp) do
  begin
    Result[I]:=Char(Byte(Temp[I]) xor Byte(Temp[Length(Temp)-I+1]));
  end;
  Temp:=Result;
  SetLength(Result,Length(Temp) div 2);
  Result:=Copy(Temp,1,Length(Temp) div 2);
end;

Użycie:

ShowMessage(AlphanumToASCII(PassXor(ASCIIToAlphanum('Te2kSt7zasZ35yFroW1anEgo62HasLa6'))))

Ta przeplatanka liter różnej wielkości i cyfr daje wynik "RCNOuc5xMSjoXzl7" - za Chiny Ludowe nie wyciągniesz z tego oryginału.

0

Zapewne nie wszyscy zrozumieja te funkcje i nie oznacza to ze trzeba sie smiac. Mam kilka prostych pytan. Wlasciwie pytania sa zakrecone ale odpowiedzi pewnie proste.

  1. jesli uzyje:
    ShowMessage(AlphanumToASCII(PassXor(ASCIIToAlphanu('Pilot'))))
    to wyswietli mi jakies krzaki ? np 'Yt5rse'
    i ten ciag to bedzie moje haslo?
  2. jesli pytanie 1 jest prawdziwe to tworze program ktory pobierze haslo:
    to haslo zapisze sobie w REJESTRZE systemu pod jakims kluczem
    i jesli ja ustawie haslo wpisujac 'Pilot' to w rejestrze zapisze sie
    jako 'Yt5rse'
  3. jesli teraz odpale program i on zapyta o haslo to ja wpisze
    'Pilot' on przerobi te nazwe na 'Yt5rse'
porowna

z wpisem do rejestru i jesli sie zgodzi to wlaczy jakas
czynnosc anywa
4. jesli program zapisze haslo do rejestru to tak:
a) mam system W9x robie kopie rejestru:
b) odpalam program i ustalam haslo
c) robie kopie pliku rejestru
d) porownuje pliki rejestru
e) wychwytuje roznice i odnajduje pod jakim kluczem jest
zakodowane haslo
f) u innej osoby ktora uzywa hasla odnajduje ten sam klucz i znam
zakodowane haslo
g) wpisanie takiego hasla nic nam nie da gdyz program bedzie je
xorowal, ale metoda ksorowania pozostaje ta sama
5. Czy metoda prob i bledow nie da sie uzyskac podobnego hasla znalezionego w kluczu juz po zaszyfrowaniu?

0

Ad 1. tak a dokaldniej zakodowane haslo
Ad 2. prawdopodobnie tak jesli tak ustawisz
Ad 3. tak, jesli zakodujesz "pilot" i efekt bedzie ten sam
Ad 4. e) nie tak latwo jest je wychwycic, i bedzie ich troche, chyba ze zrobisz to bezposrednio "od razu" gdyz wiele programow zapisuje swoje ustawienia, np. liste ostatnio otwartych plikow, ktora czasem moze byc zakodowana
f) nie, hasla nie znasz, znasz tylko zakodowane haslo, jesli to znajdziesz musisz je odkodowac :)
g) mozna np xorowac 3 razy, albo wrzucic jeszcze jakis bajerek (np losowa 2 litere w wpisane haslo)
Ad 5. Sprobuj metoda prob i bledow znalezc w ten sposob haslo (recznie? :)) do np 10 znakowego haslo :) A jesli jeszcze cos dorzucisz (Ad4.g)) to bedzie to prawie niemozliwe, chyba ze zrobito twoj algorytm (przerobic go na brute force? :))

Pozdrawiam

0

A jesli haslo ustawie w programie to jest jakas metoda by je odnalezc?
pytanie

  1. Ile jest metod?
  2. jakie?
0

metod zawsze jest sporo (kilka) na zlamanie kazdego zabezpieczenia (nie ma takiego ktory dobry haker nie zlamie, chyba ze to w/w i np z moja domieszka), mozna uzyc programow hakerskich, nie opamietam nazw, ale np taki co rozbija w asm, albo na hexy :)

// do postu nizej, nie kazdy ma internet (sa tacy) albo maja modemy

0

A gdyby pobierac czesc klucza z internetu i laczyc to byloby trudniej. Tylko ze internet ogranicza mozliwosci programu i pewnie masz racje na wszystko jest sposob. Mozna zastosowac duzo algorytmow tak by hacker sie przedzej znudzil niz mu sie chcialo myslec nad dekompilacja jak np. PGP

0

Dokładna instrukcja obsługi tych funkcji:

Przy zakładaniu hasła użytkownik je wpisuje do pola TEdit o nazwie 'ePasswd'. Gdy potwierdzi, program ew. sprawdza czy hasło poprawnie wpisano dwa razy, po czym otwiera klucz w rejestrze (spokojnie może to być klucz programu w HKLM\Software, nie musi być jakiś ukryty czy trudny do znalezienia) i zapisuje hasło w taki sposób:

Reg.WriteString('Password',AlphanumToASCII(PassXor(ASCIIToAlphanu(ePaswd.Text))));

Gdy użytkownik się loguje, wykonywany jest następujący kod:

var
  Pwd1, Pwd2: string;
  Reg: TRegistry;
begin
  {tutaj utworzenie obiektu TRegistry i otwarcie klucza}
  Pwd1:=Reg.ReadString('Password');
  Pwd2:=AlphanumToASCII(PassXor(ASCIIToAlphanu(ePaswd.Text)));
  if Pwd1<>Pwd2 then ShowMessage('Hasło nieprawidłowe');
end;

I to wystarczy, wersji zaszyfrowanej nie trzeba nigdzie ukrywać - można ją nawet opublikować, nikomu nic to nie da.

0

To fantastyczne:) ta opcja jest rewelacyjna krotki zwiezly kod + oczywoiscie wczesniejsze funkcje. To z pewnoscia zniechecie zwyklych a`la hakerow /crakerow :)

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