เข้ารหัสและถอดรหัส Shellcode ด้วย XOR

Mar 06 2023
บทนำ ยินดีต้อนรับสู่บทความใหม่ของฉันในวันนี้ฉันจะแสดงให้คุณเห็นว่าฉันสร้างสองฟังก์ชันเพื่อเข้ารหัสและถอดรหัส Shellcode ด้วย XOR ได้อย่างไร ฟังก์ชันทั้งสองนี้สร้างขึ้นด้วย C++ และเข้าใจง่ายมาก มาเริ่มกันเลย

การแนะนำ

ยินดีต้อนรับสู่บทความใหม่ของฉันในวันนี้ฉันจะแสดงให้คุณเห็นว่าฉันสร้างสองฟังก์ชันเพื่อเข้ารหัสและถอดรหัส Shellcode ด้วย XOR ได้อย่างไร

ฟังก์ชันทั้งสองนี้สร้างขึ้นด้วย C++ และเข้าใจง่ายมาก มาเริ่มกันเลย

XOR คืออะไร?

การเข้ารหัส XOR เป็นการดำเนินการระดับบิตชนิดหนึ่งที่ใช้กันทั่วไปในการเข้ารหัสเพื่อเข้ารหัสข้อมูล มันทำงานโดยการรวมข้อความธรรมดาเข้ากับรหัสลับโดยใช้ตัวดำเนินการ XOR (พิเศษหรือ) ผลลัพธ์ของการดำเนินการนี้คือข้อความไซเฟอร์เท็กซ์ที่สามารถถอดรหัสได้โดยการรวมเข้ากับคีย์ดั้งเดิมโดยใช้การดำเนินการ XOR เดียวกันเท่านั้น ความปลอดภัยของการเข้ารหัส XOR นั้นขึ้นอยู่กับข้อเท็จจริงที่ว่าการดำเนินการ XOR นั้นสามารถย้อนกลับได้ และเป็นการยากมากที่จะระบุคีย์ดั้งเดิมจากไซเฟอร์เท็กซ์เพียงอย่างเดียว

เหตุใดจึงใช้เข้ารหัสเชลล์โค้ด

การเข้ารหัส XOR มักใช้เพื่อเข้ารหัสเชลล์โค้ดเนื่องจากเป็นการดำเนินการที่ง่ายและรวดเร็วซึ่งสามารถใช้เพื่อปิดบังเนื้อหาของโค้ดได้ การดำเนินการ XOR ใช้ค่าไบนารีสองค่าและสร้างผลลัพธ์ที่เป็น 1 หากอินพุตตัวใดตัวหนึ่งเป็น 1 และมิฉะนั้นจะเป็น 0 เมื่อใช้การเข้ารหัส XOR เพื่อเข้ารหัสเชลล์โค้ด คีย์จะถูกเลือกและใช้เพื่อ XOR แต่ละไบต์ของเชลล์โค้ด ในการถอดรหัสเชลล์โค้ด คีย์เดิมจะถูกใช้เพื่อ XOR แต่ละไบต์อีกครั้ง ซึ่งจะย้อนกลับการเข้ารหัสและกู้คืนเชลล์โค้ดดั้งเดิม

การใช้การเข้ารหัส XOR เพื่อซ่อนเนื้อหาของเชลล์โค้ดสามารถช่วยหลีกเลี่ยงการตรวจจับโดยซอฟต์แวร์ความปลอดภัย เนื่องจากเชลล์โค้ดที่เข้ารหัสจะมีรูปแบบบิตที่แตกต่างจากเชลล์โค้ดดั้งเดิม และอาจไม่ตรงกับลายเซ็นที่รู้จักสำหรับโค้ดที่เป็นอันตราย อย่างไรก็ตาม การเข้ารหัส XOR อาจถูกทำลายได้ง่ายหากทราบคีย์ ดังนั้นจึงมักใช้ร่วมกับวิธีอื่นๆ เช่น การทำให้งงงวย เพื่อทำให้วิศวกรรมย้อนกลับยากขึ้น

รหัส

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

ฟังก์ชันXOR_encrypt(unsigned char key)ทำการเข้ารหัส XOR โดยpayloadใช้คีย์อินพุตและเอาต์พุตผลลัพธ์ในรูปแบบเลขฐานสิบหก

ป.ป.ช

มาลองรหัส:

ก่อนอื่นฉันสร้าง shellcode เพื่อป๊อปอัปการคำนวณ

ตอนนี้ฉันใส่ที่นี่ใน. cppรหัส:

มันใช้อ็อบเจกต์เพราะโค้ดนี้จริง ๆ แล้วเป็นออบเจกต์จากไลบรารีการพัฒนามัลแวร์ของฉัน แต่ฟังก์ชันเหมือนกัน ฉันใส่ลิงก์ของไลบรารีนี้ไว้ที่นี่:

มาดำเนินการ:

ส่วนแรกแสดง shellcode จริงแล้วเข้ารหัสในส่วนที่สอง

ข้อสรุป

นี่คือหัวข้อนี้ ฉันหวังว่าคุณจะชอบและใช้เพื่อพัฒนาสคริปต์มัลแวร์ของคุณ

หากคุณชอบเนื้อหาของฉันและต้องการช่วยฉันพัฒนาโปรเจกต์นี้ไปอีกระดับ คุณสามารถสมัครเป็นสมาชิกได้โดยการบริจาคการสมัครสมาชิกรายเดือน การสนับสนุนของคุณจะช่วยให้ฉันสร้างเนื้อหาคุณภาพสูงต่อไปได้ ขอบคุณสำหรับความเอื้ออาทรของคุณ!

หากคุณไม่สามารถบริจาคได้ในเวลานี้ ก็ไม่มีปัญหาแต่อย่างใด! การสนับสนุนของคุณในการแบ่งปันโครงการของฉันและเผยแพร่คำชื่นชมอย่างมาก ฉันจะสร้างและแบ่งปันผลงานของฉันต่อไปโดยไม่คำนึง และฉันรู้สึกขอบคุณสำหรับกำลังใจและความสนใจของคุณ

ขอบคุณที่อ่านสิ่งนี้ :)

S12