Zachowaj swój ### kod Bezpieczny od ### wstecz ### inżynierów Jak szef: 5 kroków

Zachowaj swój ### kod Bezpieczny od ### wstecz ### inżynierów Jak szef: 5 kroków

Spisu treści:

Anonim

W tym samouczku pokażemy kilka podstawowych technik używanych do ochrony kodu przed inżynierią wsteczną.

UWAGA: NINIEJSZY TUTORIAL NIE ZAPEWNIA PEŁNEJ OCHRONY PRZED INŻYNIERIĄ ODWROTNĄ, ALE POMAGA SOBIE DLA POCZĄTKUJĄCYCH

Motywy:

1- Czy wdrożyłeś algorytm i obawiasz się, że ktoś ukradnie twój kod?

2- Czy chcesz utrudnić tym, którzy chcą pójść na kompromis z ramami lub narzędziem?

3-masz komercyjne produkty oparte na arduino lub AVR i chcesz zachować kod źródłowy w tajemnicy?

4- czy jesteś twórcą złośliwego oprogramowania dla początkujących? (Mam nadzieję, że nie jesteś)

5- może nie jesteś jednym z powyższych, ale po prostu chcesz zawstydzić swoich znajomych nowymi sztuczkami, których się nauczysz.

ten samouczek ma być przeznaczony dla użytkowników Linuksa. Wkrótce stworzę kolejny instruktaż dla użytkowników systemu Windows;), a link będzie tutaj.

Muszę zaznaczyć, że użyję prostego przykładu na świecie, aby zilustrować te techniki. Ale można go użyć w bardziej złożonych przykładach.

Kieszonkowe dzieci:

Krok 1: Wymagania

będziesz potrzebować:

1- linuksowy komputer z systemem Linux. te same techniki można zastosować dla dowolnej architektury (x64, arm, …..) z zainstalowanym gcc

2- jakiś skompilowany język jako C, C ++ lub inny język skompilowany bezpośrednio do języka maszynowego (java nie będzie działać, C # nie będzie działać)

3- bardzo podstawowa znajomość języka asemblerowego. (To nie jest konieczne, ale pomoże dużo).

Krok 2: Podstawowa idea

omówimy techniki, których użyjemy do zepsucia rzeczy:

1-ukryj wszystkie teksty

2- wstaw trochę śmieci w środku kodu

3- usuń wszystkie symbole

Krok 3: Szyfrowanie tekstu

przechowywanie tekstów w kodzie tak, jak jest, ułatwia inżynierom odwrotnym ustalenie, od czego zacząć. i mogą łatwo łatwo manipulować tym tekstem lub próbować odtworzyć kod w pobliżu tych ciągów

pierwsze zdjęcie to widok heksadecymalny dla tego kodu

#zawierać

int main ()

{

printf („Hello, world n”);

}

złośliwy użytkownik i wkopać się w plik wykonywalny za pomocą dowolnego edytora szesnastkowego i zmienić tekst hello world na cokolwiek innego

więc musimy zaszyfrować tekst za pomocą kilku podstawowych funkcji

Napisałem ten prosty kod, aby ukryć cześć świata

#zawierać

#define dec (x) x + 5

int main ()

{printf ("% c% c% c% c% c% c% c% c% c% c% c% c", dec (99), dec (96), dec (103), dec (103), dec (106), dec (27), dec (114), dec (106), dec (109), dec (103), dec (95), dec (5));

}

ten kod wydaje się paskudny, ale bardzo pomaga wszystko, co robi, i weź każdy numer i dodaj 5 do niego, a następnie wydrukuj go jako znak.

sprawia, że ​​łańcuch jest ukryty głęboko w pliku binarnym i cel ten został osiągnięty

wszystkie łańcuchy są ukryte przynajmniej w widoku heksadecymalnym: D

możesz sprawdzić każdy program samodzielnie:

1- umieścić każdy kod w pliku o nazwie hello1.c i hello2.c

2- od twojego typu termianal:

stwórz hello1

stwórz hello2

3- aby uruchomić te kody (sprawdź funkcjonalność) wpisz „./hello1”, a następnie „./hello2”

4- ostatnim krokiem jest wyświetlenie zrzutu heksadecymalnego tych plików wykonywalnych przez „xxd hello1” i „xxd hello2”

Krok 4: Dodaj trochę bajtów śmieci

naszym następnym krokiem jest dodanie nonsensów do pliku zespołu naszego hello world, abyśmy mogli ukryć każdy aspekt naszego kodu.

najpierw musimy wygenerować plik.s naszego kodu "gcc hello.c -S -masm = intel"

następnie otwórz plik hello.s i wyszukaj main (aby wykonać ten krok, musisz przeczytać zestawienie i zrozumieć przepływ programu, aby upewnić się, że nie złamiesz kodu)

w dowolnej linii wewnątrz main (jak powiedziałem, upewnij się, że nie zmieniasz przepływu programu) wpisz „jmp name”

możesz napisać dowolną nazwę, zgodnie z regułami identyfikatora, a następnie w następnym wierszu wpisać „nazwa:”

gdzie nazwa jest tą samą nazwą, której używałeś wcześniej, między „nazwą jmp” a „nazwą:” możesz napisać trochę śmieci (należy zacząć od „.byte 0x” niż 1 bajtowy numer szesnastkowy)

spowoduje to zmianę niektórych użytych instrukcji, ale zostanie wykonana poprawnie: D

teraz do zbudowania tego typu kodu zespołu (gcc hello.s -o hello)

i upewnij się, że wszystko jest w porządku

Krok 5: Usuń wszystkie symbole

po zakończeniu wszystkich poprzednich technik jest jeszcze jeden krok do zrobienia, zastępując symbole i nazwy z kodu prostym dobrym sposobem jest po prostu polecenie strip

spróbuj uruchomić pasek witaj

po tym kroku wszystkie nazwy, takie jak „main” i „home” oraz „name” zostaną usunięte, co utrudni śledzenie napisanego kodu

To wszyscy ludzie.

prosimy o przekazanie nam adresu bitcoins, aby pomóc nam w zapewnieniu wysokiej jakości materiałów instruktażowych

17Ta5BnfJdCtXXmv9rJu3SSfMEPF2g7kpF