Program do szyfrowania relokacji - może się komuś przyda

1

Z serii "zrób to <prawie> sam": Szyfrator relokacji plików PE DLL.

Jak kiedyś prosił @Patryk27 , wysyłam wam ograniczony ale pełen szyfrator relokacji do plików DLL wraz z loaderem.
Features:

  • Bardzo zagmatwany kod.
  • Szyfruje relokacje jako klucza używając kodu loadera
  • Dodaje sekcję która rozszyfrowuje i stosuje relokacje
  • Powinno wspierać większość dllek - bez gwarancji.

Kod nie wygląda najlepiej dzięki paru tygodniom przeróbek i nieużywania mojego nowego pomysłu czyli pseudo wskaźników do operacji na pliku.

Do zbudowania potrzeba:

  • FPC/Lazarus for windows żeby zbudować główną aplikację
  • Nasm żeby zbudować loader.

Wszelkie narzekanie na kod jest jak najbardziej uzasadnione i mile widziane. Nie mniej mam nadzieję że komuś się przyda jako podstawa do jego kodu.

Jak się operatorom chce to mogą przenieść do działu do którego według nich to bardziej pasuje (włączając Kosz).

Dołnlołd (pliki binarne nie włączone - nie rozpowszechniam malware): relocmake.zip

0

Ok, pierwszy błąd.

if nthead.FileHeader.NumberOfSections>250 then raise exception.Create('This file have over 250 sections, aborting loading');

Tam powinno być has, a nie have.

0
Rev napisał(a):

Ok, pierwszy błąd.

if nthead.FileHeader.NumberOfSections>250 then raise exception.Create('This file have over 250 sections, aborting loading');

Tam powinno być has, a nie have.

Nie będę wrzucać nowego pliku póki nie będzie jakiegoś poważnego błędu, ale thx. Mistrzem nie jestem z ang. ni pol. więc mogą być błędy, zwłaszcza w errorach czysto wewnętrznych.
Błędem koniecznie bym tego nie nazwał, raczej błędnym komunikatem błędu (który wpływu na działanie programu nie ma). Anyłej, fenks 4 fiks.

P.S. Wiem też że jest jeden błąd który powoduje że program może działać niepoprawnie na niektórych plikach bo nie trzyma się dokładnie jednej ze specyfikacji, nie mniej jest przed tym fix który obchodzi problem. Jak ktoś znajdzie to brawa dla niego.

0

A ja jestem newbie i chętnie sie dowiem, chociaz w skrocie, co to jest te: 'Szyfrator relokacji plików PE DLL' i do czego to ?

0
nmewbies napisał(a):

A ja jestem newbie i chętnie sie dowiem, chociaz w skrocie, co to jest te: 'Szyfrator relokacji plików PE DLL' i do czego to ?

Polecę stronę www.google.pl
Znajdziesz tam wszystko od kursów podstaw po tworzenie właśnie takich rzeczy a nawet więcej. Też z niej korzystałem przy tworzeniu tego i mogę polecić!

0
assign(f,s);

Nie jest to przypadkiem przestarzała funkcja?

0
Patryk27 napisał(a):
assign(f,s);

Nie jest to przypadkiem przestarzała funkcja?

To zależy co uważasz za przestarzałą. Ten starodawny system plików mi pasuje, dlatemu go używam zamiast FileStrimów itd. chociaż można by przerobić łatwo. Po prostu w moich początkach taką metodę widziałem i się przyzwyczaiłem...
No chyba że chodzi ci o AssignFile który jest wrapperem na Assign i istnieje żeby nie wywoływać TForm.Assign w LCL. W takim wypadku z całą pewnością nie jest przestarzały, bo po co używać wrappera.

0

No chyba że chodzi ci o AssignFile który jest wrapperem na Assign i istnieje żeby nie wywoływać TForm.Assign w LCL

Mój błąd - sam się przyzwyczaiłem do pisania AssignFile (ponieważ Assign odnosiło się do formy), a zapomniałem, że w aplikacjach konsolowych itp. obie funkcje to to samo.

0

Do zbudowania potrzeba:

  • FPC/Lazarus for windows żeby zbudować główną aplikację
  • Nasm żeby zbudować loader.
    ...
    Dołnlołd (pliki binarne nie włączone - nie rozpowszechniam malware)
  1. Chciałoby się komuś to skompilować jednak i wrzucić? Pobawiłbym się z tym, a w tym celu będę musiał pobrać jakiś kompilator do tego - dla kogoś kto siedzi w tym dziale to pewnie minuta.
    Jeśli nikomu się jednak nie chce to trudno, sam się pobawię :/

Jak się operatorom chce to mogą przenieść do działu do którego według nich to bardziej pasuje (włączając Kosz).

  1. W zasadzie trafiłem na ten temat przez przypadek, myślę że nie wszyscy interesujący się taką tematyką siedzą w Delphi/Pascal - jeśli można, bardziej pasuje na przykład do Ocen/Recenzji (ten dział się powinien raczej nazywać 'Własne projekty'...).
1

Program skompilowany do project1.exe (dołączony NASM w wersji 2.10rc8).
loader.asm skompilowany do oczywiście loader ;)

0
  1. Chciałoby się komuś to skompilować jednak i wrzucić? Pobawiłbym się z tym, a w tym celu będę musiał pobrać jakiś kompilator do tego - dla kogoś kto siedzi w tym dziale to pewnie minuta.
    Jeśli nikomu się jednak nie chce to trudno, sam się pobawię :/

No w końcu "Zrób to <prawie> sam".

  1. W zasadzie trafiłem na ten temat przez przypadek, myślę że nie wszyscy interesujący się taką tematyką siedzą w Delphi/Pascal - jeśli można, bardziej pasuje na przykład do Ocen/Recenzji (ten dział się powinien raczej nazywać 'Własne projekty'...).

Też tak się zastanawiałem czy nie tam dać, ale ktoś teraz przeniósł. Aha... Ty :D

Patryk27 napisał(a):

Program skompilowany do project1.exe (dołączony NASM w wersji 2.10rc8).
loader.asm skompilowany do oczywiście loader ;)

Ale wy leniwi :P .

Pobranie Lazarusa to góra 2 minuty

A instalacja? U mnie się instaluje zawsze strasznie długo bo dużo małych plików :P . Ale FPC będzie wystarczyć.

Ah, btw. Szyfrowanie będzie działać tylko jeżeli relokacje są na początku sekcji i znajdują się w jednej sekcji. Kolejna wada używania WhereAddrBelong które w nowych projektach zastąpiłem pseudowskaźnikami. I hope you enjoy anyway.

0

Tak btw - "procedure WritelnColor(s:ansistring;color:byte);". Czy przypadkiem String to nie jest domyślnie AnsiString?

Mam uraz od kiedy okazało się że nie i często piszę ansistring (oj długia historia). Ale to zależy, żeby string=ansistring trzeba mieć przełącznik {$H+}, który Lazarus domyślnie ustawia, ale w FPC niekoniecznie. Kiedyś było domyślnie H- teraz nie wiem. Musisz poszukać w dokumentacji.

0
Jonas Maebe napisał(a)

Ansistring is only the default in Delphi mode. The reason is that string=ansistring in Delphi.

Przed chwilą znalazłem (http://bugs.freepascal.org/view.php?id=22575).

Oraz z dokumentacji:

http://www.freepascal.org/docs-html/prog/progsu23.html napisał(a)

By default, the use of ansistrings is off, corresponding to {$H-}. The system unit is compiled without ansistrings, all its functions accept shortstring arguments. The same is true for all RTL units, except the sysutils unit, which is compiled with ansistrings.

However, the {$MODE} statement influences the default value of {$H}: a {$MODE DELPHI} directive implies a {$H+} statement, all other modes switch it off. As a result, you should always put {$H+} after a mode directive. This behaviour has changed, in older Free Pascal versions this was not so.

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