Szyfruj i odszyfruj Shellcode za pomocą XOR
Wstęp
Witaj w moim nowym artykule, dzisiaj pokażę ci, jak tworzę dwie funkcje do szyfrowania i deszyfrowania kodu powłoki za pomocą XOR.
Te dwie funkcje są tworzone w C++ i są bardzo łatwe do zrozumienia, zacznijmy.
Co to jest XOR?
Szyfrowanie XOR to rodzaj operacji bitowej, która jest powszechnie stosowana w kryptografii do szyfrowania danych. Działa poprzez połączenie wiadomości w postaci zwykłego tekstu z tajnym kluczem za pomocą operatora XOR (exclusive or). Wynikiem tej operacji jest wiadomość zaszyfrowana, którą można odszyfrować jedynie poprzez połączenie jej z oryginalnym kluczem przy użyciu tej samej operacji XOR. Bezpieczeństwo szyfrowania XOR opiera się na fakcie, że operacja XOR jest odwracalna i bardzo trudno jest określić oryginalny klucz na podstawie samego zaszyfrowanego tekstu.
Dlaczego jest używany do szyfrowania kodu powłoki?
Szyfrowanie XOR jest często używane do szyfrowania kodu powłoki, ponieważ jest to prosta i szybka operacja, której można użyć do ukrycia zawartości kodu. Operacja XOR przyjmuje dwie wartości binarne i daje wynik 1, jeśli dokładnie jedno z wejść ma wartość 1, a 0 w przeciwnym razie. Gdy szyfrowanie XOR jest używane do szyfrowania kodu powłoki, wybierany jest klucz i używany do XOR każdego bajtu kodu powłoki. Aby odszyfrować kod powłoki, ten sam klucz jest używany do ponownego XOR każdego bajtu, co odwraca szyfrowanie i przywraca oryginalny kod powłoki.
Korzystanie z szyfrowania XOR w celu ukrycia zawartości kodu powłoki może pomóc w uniknięciu wykrycia przez oprogramowanie zabezpieczające, ponieważ zaszyfrowany kod powłoki będzie miał inny wzór bitów niż oryginalny kod powłoki i może nie pasować do znanych sygnatur złośliwego kodu. Jednak szyfrowanie XOR można łatwo złamać, jeśli klucz jest znany, dlatego często jest używane w połączeniu z innymi metodami, takimi jak zaciemnianie, aby utrudnić inżynierię wsteczną.
Kod
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
void XOR_decrypt(unsigned char key) {
for (int i = 0; i < len; i++) {
payload[i] = payload[i] ^ key;
cout << "\\x" << hex << setfill('0') << setw(2) << (int)payload[i];
}
cout << endl;
}
void XOR_encrypt(unsigned char key){
for(int i = 0; i < len; i++){
payload[i] ^= key;
}
for(int i = 0; i < len; i++){
cout << "\\x" << hex << (int)payload[i];
}
cout << endl;
}
Funkcja XOR_encrypt(unsigned char key)wykonuje szyfrowanie XOR przy użyciu payloadklucza wejściowego i wyprowadza wynik w formacie szesnastkowym.
POC
Spróbujmy kodu:
Najpierw tworzę kod powłoki, aby wyświetlić okno calc.
Teraz umieszczam tutaj w .cpp kod:
Używa obiektu, ponieważ ten kod w rzeczywistości jest obiektem z mojej biblioteki programistycznej złośliwego oprogramowania, ale funkcje są takie same, tutaj umieszczam link do tej biblioteki:
wykonajmy:
Pierwszy pokazuje rzeczywisty kod powłoki, a następnie szyfruje wewnątrz w drugiej części.
Wnioski
Mam nadzieję, że te tematy Ci się spodobają i wykorzystasz je do opracowania skryptów złośliwego oprogramowania.
Jeśli podobają Ci się moje treści i chciałbyś pomóc mi przenieść ten projekt na wyższy poziom, możesz zostać członkiem, przekazując miesięczną subskrypcję. Twoje wsparcie pomoże mi nadal tworzyć wysokiej jakości treści. Dziękuję za Twoją hojność!
Jeśli w tej chwili przekazanie darowizny nie jest dla Ciebie możliwe, nie ma problemu! Twoje wsparcie w udostępnianiu mojego projektu i rozpowszechnianiu informacji jest bardzo mile widziane. Będę nadal tworzyć i udostępniać swoje prace niezależnie od tego i jestem wdzięczny za zachętę i zainteresowanie.
Dzięki, że to przeczytałeś :)
S12.

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































