ฉันได้ศึกษาเรื่องการทำให้สับสนของชื่อ และเพิ่งได้อ่านบางอย่างเกี่ยวกับการเข้ารหัสสตริง
มีฟังก์ชันการป้องกันการเข้ารหัสสตริงในการป้องกันการสร้างความสับสนและเชลล์การเข้ารหัส
โดยทั่วไปแล้ว การเข้ารหัสสตริงสามารถแบ่งออกเป็นสองประเภท:
ประเภทแรกคือเทคโนโลยีการเข้ารหัสสตริงในการป้องกันความสับสน คุณสมบัติหลักคือการปรับเปลี่ยนเส้นทางการเรียกใช้โค้ด
การเข้ารหัสสตริงที่ใช้โดยเครื่องมือป้องกันความสับสนส่วนใหญ่จัดอยู่ในหมวดหมู่นี้
ประเภทที่สองคือเทคโนโลยีการเข้ารหัสสตริงในเชลล์การเข้ารหัส วิธีนี้จะเข้ารหัสสตริงในข้อมูลเมตาโดยตรงโดยไม่ต้องแก้ไขรหัส IL
หมวดหมู่นี้แสดงโดย remotesoft และ maxtocode
มาดูหมวดหมู่แรกกันก่อน การใช้งานการเข้ารหัสมีดังนี้
ก่อนการเข้ารหัส:
MessageBox.Show("Hellow World!");
หลังจากการเข้ารหัส:
MessageBox.Show(Helper.Decode("A34579dfbbeyu346563345/=="));
พูดง่ายๆ ก็คือ การใช้สตริงโดยตรงจะเปลี่ยนไปเป็นการใช้สตริงทางอ้อม
ที่นี่ ซอฟต์แวร์ป้องกันเข้ารหัสสตริง "Hellow World!" และรับผลลัพธ์ "A34579dfbbeyu346563345/=="
Helper.Decode เป็นฟังก์ชันถอดรหัสที่ได้รับจากซอฟต์แวร์ป้องกัน ซึ่งจะกู้คืน "A34579dfbbeyu346563345/==" เป็น "Hellow World!"
เนื่องจากเป็นการป้องกันความสับสน เราจึงสามารถวิเคราะห์และรับรหัสถอดรหัสได้ จากนั้นใช้โค้ดของฟังก์ชันนี้โดยตรงเพื่อเขียนเครื่องมือขนาดเล็กเพื่อกู้คืนสตริงที่เข้ารหัสทั้งหมดในแอสเซมบลี สร้างตารางการติดต่อแบบสตริง เพื่ออำนวยความสะดวกในการอ่านและแก้ไขโค้ด
หากคุณเจาะลึกลงไปอีก คุณสามารถคืนค่าสตริงให้เป็นแอสเซมบลีดั้งเดิมได้โดยอัตโนมัติ
ลองดูรหัส IL ของตัวอย่างข้างต้น
ก่อนการเข้ารหัส:
ldstr "สวัสดีชาวโลก!"
โทร MessageBox.Show(string)
หลังจากการเข้ารหัส:
ldstr "A34579dfbbeyu346563345/=="
เรียกสตริง Helper.Decode (สตริง)
การโทร MessageBox.Show(string)
นั้นง่ายมาก เรารู้รหัสถอดรหัสแล้วและสามารถถอดรหัสสตริงได้แล้ว ได้รับตารางสตริงที่สอดคล้องกัน
เปลี่ยน
ldstr โดยตรง "A34579dfbbeyu346563345/=="
เรียกสตริง Helper.Decode (สตริง)
แทนที่ด้วย
ldstr "Hellow World
" เพียงเขียนเครื่องมือเล็กๆ ที่ใช้นิพจน์ทั่วไปในการค้นหาและแทนที่
การป้องกันการเข้ารหัสสตริงประเภทที่สอง:
การใช้งานคือการเข้ารหัสสตรีมสตริงโดยตรงในข้อมูลเมตา
การป้องกันประเภทนี้มีข้อบกพร่อง หลังจากรันโปรแกรมแล้ว สตรีมสตริงในข้อมูลเมตาจะถูกถอดรหัสและกู้คืนในหน่วยความจำโดยสมบูรณ์ ในบทความก่อนหน้านี้ ฉันได้แนะนำการถ่ายโอนข้อมูลเมตา ฉันจะไม่ทำซ้ำที่นี่
สำหรับการป้องกันการเข้ารหัสสตริงชนิดแรก มีรูปแบบอื่นๆ ตัวอย่างเช่น ฟังก์ชัน Helper.Decode อาจเป็นฟังก์ชันดั้งเดิมได้
หรือจะผสมกับกระบวนการ