ฉันได้ศึกษาเนื้อหาที่เกี่ยวข้องกับ DotNet เมื่อเร็วๆ นี้ และ sscli เป็นสิ่งที่ดีจริงๆ :P
ระหว่างเรียนฉันก็สังเคราะห์ความรู้และทำเครื่องมือเล็กๆ นี้ขึ้นมา
หลักการป้องกันคล้ายกับรีโมทจีนและ maxtocode โปรแกรมที่เข้ารหัสจะต้องมีไลบรารีรันไทม์มาพร้อมกับเมื่อมีการเผยแพร่
อย่างไรก็ตาม ไลบรารีรันไทม์ที่รวมมานั้นต่างจากทั้งสองตรงที่ไม่ใช่ dll ดั้งเดิม แต่เป็นแอสเซมบลีไฮบริด C++/CLI
เครื่องมือนี้เป็นรูปเป็นร่างและเฟรมเวิร์กเคอร์เนลโดยรวมเสร็จสมบูรณ์แล้ว ใช้เพื่อเข้ารหัสตัวอย่างและทำงานได้ตามปกติ
บางแง่มุมก็เกิน maxtocode ด้วยซ้ำ
1. ไม่ต้องอาศัยโปรแกรม ildasm และ ilasm ของ Microsoft
ทั้งการถอดชิ้นส่วน IL และการประกอบ IL นั้นถูกนำไปใช้โดยทางโปรแกรม
แอสเซมบลีที่มีโค้ดเนทิฟสามารถเข้ารหัสได้
2. เครื่องมือต่อต้านการคอมไพล์ ไม่สามารถดูแอสเซมบลีที่เข้ารหัส maxtocode ได้โดยตรงด้วยตัวสะท้อนแสง แต่หลังจากรันโปรแกรมแล้ว ให้ใช้ pedumper และหลังจากการดัมพ์ คุณสามารถใช้ Reflectotr เพื่อดูโครงสร้างได้ แน่นอนว่าคุณยังไม่เห็นโค้ด
แอสเซมบลีที่เข้ารหัสโดย dnguard นั้นดีกว่าที่ฉันคาดไว้ ไม่สามารถดูแอสเซมบลีที่เข้ารหัสด้วยตัวสะท้อนแสงได้ และแอสเซมบลีที่ทิ้งไม่สามารถดูได้ด้วยปลั๊กอินตัวสะท้อนแสง
ฉันรู้สึกว่าตัวสะท้อนแสงยังอ่อนแออยู่เล็กน้อย ซอฟต์แวร์ที่คล้ายกัน Disa# และ Xenocode fox สามารถเปิดและดูชุดประกอบที่เข้ารหัส maxtocode และ dnguard ได้โดยตรง
ด้วยเหตุนี้ ฉันพยายามเพิ่มโครงสร้างที่สับสนให้กับแอสเซมบลีที่เข้ารหัส dnguard ซึ่งมีผล กล่าวคือ เมื่อดูโครงสร้างใน Disa# และ fox จะทำให้เกิดความสับสน นั่นคือฟังก์ชันของคลาส A อาจปรากฏขึ้น ในคลาส B เอฟเฟกต์ไม่ค่อยดีนัก แต่ละคลาสมีฟังก์ชันเพียงไม่กี่อย่างเท่านั้นที่จะทำให้เกิดปัญหา
3. คุณสมบัติใหม่ของ Anti .Net 2.0 นั้นไม่แข็งแกร่งนัก ความแรงนั้นคล้ายกับของ maxtocode 3.13 (เวอร์ชันภายใน) ฉันได้ยินมาว่า maxtocode เปิดตัวแล้ว 3.14 ฉันไม่รู้ว่ามีการปรับปรุงความแข็งแกร่งหรือไม่ (Looking ที่ตอบกลับในบล็อกของ Jason ดูเหมือนว่าจะเหมือนกับ 3.13) Max 3.12 สามารถใช้ได้โดยการแพตช์เพียงไม่กี่ไบต์ และการสะท้อนสามารถใช้งานได้ไม่มากนัก และจำนวนไบต์ที่ต้องแพตช์ยังน้อยกว่า 3.12 ด้วยซ้ำ
ขณะนี้มีวิธีแก้ปัญหาที่ดีกว่าในเรื่องนี้ ซึ่งสามารถเพิ่มความเข้มข้นได้อย่างมากโดยไม่กระทบต่อประสิทธิภาพ แต่ไม่สามารถป้องกันการทิ้งขยะได้อย่างสมบูรณ์
นอกจากนี้ยังมีโซลูชันป้องกันการทิ้งที่ค่อนข้างสมบูรณ์แบบ ซึ่งจำเป็นต้องใช้ร่วมกับเทคโนโลยีการป้องกันอื่น
เราไม่ได้วางแผนที่จะหารือในเชิงลึกเกี่ยวกับเรื่องนี้ หลังจากเชลล์การเข้ารหัส DNGuard เสร็จสมบูรณ์ เราจะเริ่มเทคโนโลยีการป้องกันอื่นและรวมการป้องกันทั้งสองเข้าด้วยกันในที่สุด
4. ใช้ ildasm และ ilasm เพื่อคืนค่าชุดประกอบหลังจาก Anti dump นอกเหนือจากคุณสมบัติป้องกันการดัมพ์ใหม่ของ anti .net 2.0 แล้ว DNGuard ยังเพิ่ม anti-dump ซึ่งเป็น dumper ที่ผมสร้างไว้ในช่วงแรกๆ นอกจากนี้ คุณลักษณะของแอสเซมบลีไฮบริด C++/CLI ยังใช้เพื่อป้องกัน ildasm หลังจากดัมพ์ อย่างไรก็ตาม สิ่งนี้ไม่แข็งแรงมากนัก และสามารถซ่อมแซมการประกอบขนาดเล็กเพื่อใช้การประกอบ IL ได้อย่างง่ายดาย
ยังมีงานที่ต้องทำอีกมาก อัลกอริธึมการเข้ารหัสยังไม่ได้ผล และการป้องกันไลบรารีรันไทม์เองก็ยังไม่ได้ดำเนินการ ฉันพบว่าคุณสามารถค้นหาเครื่องมือป้องกันสำเร็จรูปสำหรับ DLL ดั้งเดิมได้ เช่น thmida ซึ่งดีมาก ไลบรารีรันไทม์ของ maxtocode ใช้เชลล์นี้ แต่ฉันไม่เคยพบวิธีที่ดีสำหรับ C++/CLI DLLs . ดูเหมือนว่าเราสามารถเพิ่มชั้นการป้องกันได้ด้วยตนเองเท่านั้น และเราได้เริ่มทดสอบแล้ว ตอนนี้เรากำลังจะเพิ่มเชลล์การเข้ารหัสแบบง่าย หลังจากเสร็จสิ้น เราจะสาธิต DNGuard ให้กับมัน
หลังจากที่ DNGuard เข้ารหัสชุดประกอบแล้ว ให้ใช้ตัวสะท้อนแสงเพื่อดู:
ใช้ตัวสะท้อนแสงเพื่อดูดัมพ์แอสเซมบลีที่เข้ารหัส DNGuard:
แอสเซมบลีที่เข้ารหัสโดย Maxtocode นั้นถูกดูด้วยตัวสะท้อนแสง:
หลังจากทิ้งชุดประกอบที่เข้ารหัส Maxtocode แล้ว ให้ดูด้วยตัวสะท้อนแสง: