Trang 1 Decrypt các MSIL methods một cách thủ công (Tài liệu viết bởi ubbelol cho http://rtn-team.cc) Người dịch: Levis Nickaster (http://ltops9.wordpress.com ). Đây là bài dịch MIỄN PHÍ, nhằm phục vụ mục đích nghiên cứu và chia sẻ kiến thức. Khi copy và đăng tải ở bất kì đâu cần ghi rõ nguồn để tôn trọng tác giả cũng như tôn trọng người dịch, cảm ơn. Đề xuất, đóng góp để bản dịch tốt hơn, hay gửi email cho tôi: levintaeyeon[at]live[dot]com. Trong bài viết này tôi sẽ trình bày với các bạn phương pháp sử dụng Windbg để decrypt hầu hết các MSIL method đã bị encrypt (bởi các trình obfuscator/protector). Công cụ sử dụng trong bài viết: - .NET Reflector - Windbg File để thực hành: http://www.multiupload.nl/DM4X60SQ8N (hiện tại link đã bị die, tác giả chưa update, cho nên bài viết này chỉ mang tính chất tham khảo, cách thực hiện đối với các file khác cũng tương tự) Nếu bạn thấy thích những bài viết như thế này, hãy ghé thăm blog của tôi, nơi mà tôi sẽ cố gắng đăng thêm nhiều bài viết mới : http://ubbecode.wordpress.com Lời giới thiệu Nếu bạn không rành về cách thức hoạt động của JIT compiler trong việc vận hành của CLR Runtime, bạn nên đọc bài viết sau: http://geekswithblogs.net/ilich/archive/2013/07/09/.net-compilation-part-1.- just-in-time-compiler.aspx hoặc một bài vài viết khác trên mạng về vấn đề này để hiểu được những gì cơ bản nhất. Lí do tôi gọi phương pháp này là chung nhất bởi vì tất cả các chương trình .NET được biên dịch thành mã IL đều cần phải biên dịch thêm thành mã máy lúc chương trình đó khởi chạy.. Công việc này được thực hiện bởi mscorjit.dll (.NET 3.5 trở xuống) hoặc clrjit(.NET 4.0 trở lên). 2 dll này đều có một hàm tên là “CompileMethod” để thực hiện việc biên dịch này. Về cơ bản thì các đoạn mã IL sẽ được truyền vào CompileMethod, và ở đây các đoạn mã máy được tạo ra. Điều này có nghĩa là, nếu một obfuscator hay protector nào đó có thể encrypt hoàn toàn IL code của 1 method, thì code vẫn sẽ được truyền vào trong CompileMethod dưới dạng một buffer của IL code một cách rõ ràng (các code bị obfuscated thì vẫn tồn tại, nên hiểu rõ khái niệm encrypt và obfuscate để tránh nhầm lẫn). Chúng ta có thể lợi dụng CompileMethod để dump code gốc (chưa bị encrypt). Một số obfuscator như Agile.NET sử dụng kĩ thuật “code vitualization”, có nghĩa là code sẽ được chuyển thành một dạng bytecode được tùy biến lại, chỉ dành cho obfuscator đó xử lý và vận hành, chứ không còn phải đi qua JIT compiler nữa. cho nên phương pháp tôi nêu ra trong bài viết này sẽ trở nên vô dụng. Tuy nhiên, nếu bạn có hứng thú với việc decrypt dạng bytecode tùy biến này (như Agile.NET đã làm), bạn nên tìm hiểu về de4dot.
11
Embed
Decrypt các MSIL methods một cách thử công - Bài dịch
Decrypt các MSIL methods một cách thủ công Tác giả: ubbelol (http://ubbecode.wordpress.com) Người dịch: Levis Nickaster (http://ltops9.wordpress.com
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Trang 1
Decrypt các MSIL methods một cách thủ công
(Tài liệu viết bởi ubbelol cho http://rtn-team.cc)
Người dịch: Levis Nickaster (http://ltops9.wordpress.com ).
Đây là bài dịch MIỄN PHÍ, nhằm phục vụ mục đích nghiên cứu và chia sẻ kiến thức. Khi copy và đăng tải ở bất kì đâu cần ghi
rõ nguồn để tôn trọng tác giả cũng như tôn trọng người dịch, cảm ơn. Đề xuất, đóng góp để bản dịch tốt hơn, hay gửi
email cho tôi: levintaeyeon[at]live[dot]com.
Trong bài viết này tôi sẽ trình bày với các bạn phương pháp sử dụng Windbg để decrypt hầu hết các MSIL
method đã bị encrypt (bởi các trình obfuscator/protector).
Công cụ sử dụng trong bài viết:
- .NET Reflector
- Windbg
File để thực hành: http://www.multiupload.nl/DM4X60SQ8N (hiện tại link đã bị die, tác giả chưa update, cho
nên bài viết này chỉ mang tính chất tham khảo, cách thực hiện đối với các file khác cũng tương tự)
Nếu bạn thấy thích những bài viết như thế này, hãy ghé thăm blog của tôi, nơi mà tôi sẽ cố gắng đăng thêm
nhiều bài viết mới : http://ubbecode.wordpress.com
Lời giới thiệu
Nếu bạn không rành về cách thức hoạt động của JIT compiler trong việc vận hành của CLR Runtime, bạn nên