Mã hóa và giải mã Shellcode bằng XOR

Mar 06 2023
Giới thiệu Chào mừng bạn đến với bài viết mới của tôi, hôm nay tôi sẽ chỉ cho bạn cách tôi tạo hai chức năng Mã hóa và Giải mã Shellcode bằng XOR. Hai hàm này được tạo bằng C++ và rất dễ hiểu, bắt đầu thôi.

Giới thiệu

Chào mừng bạn đến với bài viết mới của tôi, hôm nay tôi sẽ chỉ cho bạn cách tạo hai chức năng Mã hóa và Giải mã Shellcode bằng XOR.

Hai hàm này được tạo bằng C++ và rất dễ hiểu, bắt đầu thôi.

XOR là gì?

Mã hóa XOR là một loại hoạt động theo bit thường được sử dụng trong mật mã để mã hóa dữ liệu. Nó hoạt động bằng cách kết hợp một tin nhắn văn bản gốc với một khóa bí mật bằng cách sử dụng toán tử XOR (độc quyền hoặc). Kết quả của thao tác này là một thông báo bản mã chỉ có thể được giải mã bằng cách kết hợp nó với khóa ban đầu bằng cùng một thao tác XOR. Tính bảo mật của mã hóa XOR dựa trên thực tế là hoạt động XOR có thể đảo ngược và rất khó xác định khóa gốc chỉ từ bản mã.

Tại sao được sử dụng để mã hóa shellcode?

Mã hóa XOR thường được sử dụng để mã hóa shellcode vì đây là một thao tác đơn giản và nhanh chóng, có thể được sử dụng để che khuất nội dung của mã. Hoạt động XOR nhận hai giá trị nhị phân và tạo ra kết quả là 1 nếu chính xác một trong các đầu vào là 1 và 0 nếu ngược lại. Khi mã hóa XOR được sử dụng để mã hóa shellcode, một khóa được chọn và sử dụng để XOR từng byte của shellcode. Để giải mã shellcode, cùng một khóa được sử dụng để XOR từng byte một lần nữa, thao tác này sẽ đảo ngược quá trình mã hóa và khôi phục shellcode ban đầu.

Sử dụng mã hóa XOR để ẩn nội dung của shellcode có thể giúp tránh bị phần mềm bảo mật phát hiện, vì shellcode được mã hóa sẽ có mẫu bit khác với shellcode ban đầu và có thể không khớp với các chữ ký đã biết đối với mã độc. Tuy nhiên, mã hóa XOR có thể dễ dàng bị phá vỡ nếu khóa được biết, do đó, nó thường được sử dụng cùng với các phương pháp khác, chẳng hạn như che giấu, để làm cho kỹ thuật đảo ngược trở nên khó khăn hơn.

Mã số

#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;
        }

Hàm XOR_encrypt(unsigned char key)thực hiện mã hóa XOR khi payloadsử dụng khóa đầu vào và xuất kết quả ở định dạng thập lục phân.

POC

Hãy thử mã:

Đầu tiên tôi tạo shellcode để bật lên calc.

Bây giờ tôi đặt ở đây trong .cpp mã:

Nó đang sử dụng đối tượng vì mã này trên thực tế là một đối tượng từ thư viện phát triển phần mềm độc hại của tôi, nhưng các chức năng đều giống nhau, ở đây tôi đặt liên kết của thư viện này:

Hãy thực hiện:

Phần đầu tiên hiển thị mã shell thực tế và sau đó mã hóa bên trong phần thứ hai.

kết luận

Đây là những chủ đề này, tôi hy vọng bạn thích nó và sử dụng nó để phát triển các tập lệnh phần mềm độc hại của mình.

Nếu bạn thích nội dung của tôi và muốn giúp tôi đưa dự án này lên một tầm cao mới, bạn có thể trở thành thành viên bằng cách quyên góp đăng ký hàng tháng. Sự hỗ trợ của bạn sẽ giúp tôi tiếp tục tạo nội dung chất lượng cao. Cám ơn vì sự hào phóng của bạn!

Nếu bạn không thể quyên góp vào lúc này, không có vấn đề gì cả! Sự hỗ trợ của bạn trong việc chia sẻ dự án của tôi và truyền bá thông tin được đánh giá rất cao. Tôi sẽ tiếp tục sáng tạo và chia sẻ công việc của mình bất kể điều gì, và tôi rất biết ơn sự khuyến khích và quan tâm của bạn.

Cảm ơn đã đọc cái này :)

S12.