Month: June 2014

“Reverse Engineering for Beginner” book

Hello all mates,

This book is a new (and great) book made by Dennis Yurichev, contains more than 600 pages to show you, from basic to advanced, and suitable for all people who is researching about Reverse engineering, no matter who you are, rookie or professor. And this book is “rolling release”, means that the author is working hard on it to make the book become more completed. The book was created using LaTex, and all the project is hosted on GitHub: https://github.com/dennis714/RE-for-beginners. Here you can find the newly updated part also the source code, always available for free. All credits go to the author: Dennis Yurichev, and if you find it interesting or useful for you, please support him by donating money

“Reverse Engineering for Beginners” free book

Topics discussed: x86, ARM.

Topics touched: Oracle RDBMS, Itanium, copy-protection dongles, LD_PRELOAD,
stack overflow, ELF, win32 PE file format, x86-64, critical sections, syscalls,
TLS, position-independent code (PIC), profile-guided optimization, C++ STL, OpenMP, win32 SEH.

DOWNLOAD

Compiled versions are:
(English) DOWNLOAD LINK
DOWNLOAD LINK ENGLISH (for e-book readers)
(Russian) DOWNLOAD LINK
DOWNLOAD LINK (for e-book readers)

Enjoy and best Regards,
Levis

Những công cụ cần thiết cho quá trình Reverse Engineering .NET (Phần 4)

Lời ngỏ:

Gần đây có một số bạn  chia sẻ các bài viết của tôi trên các forum, facebook, website,… Tôi cảm thấy rất vinh dự về điều đó. Có bạn share mà không nói trước với tôi, có bạn xin phép tôi trước rồi mới share. Đối với tôi thì việc xin phép hay không xin phép cũng không có gì đáng quan trọng cả bởi vì được chia sẻ với người khác là niềm vui và vinh hạnh của tôi. và các bạn share bài của tôi cũng có nghĩa là các bạn thấy những bài viết của tôi có giá trị. Cảm ơn các bạn nhiều lắm. Các bạn có thể share thoải mãi, tuy nhiên xin các bạn đề tên tôi ơ phần tác giả bài viết (hay credits), như thế là đủ rồi, khỏi xin phép này nọ cũng được. Tôi đã gặp một vài bạn share bài viết của tôi mà không ghi rõ nguồn, diều này khiến tôi không hài lòng cho lắm. Bởi vì không chi riêng bài viết của tôi, bất cứ tài liệu nào khi được chia sẻ cũng đều cần phải ghi rõ nguồn tác giả, đó là điều tối thiểu khi post bài chia sẻ. Vậy nên, xin các bạn rút kinh nghiệm, không chỉ với riêng bài viết của tôi, mà tất cả các bài viết, tài liệu khác nữa. Cảm ơn 🙂

 

Phần 4

Thế là đã xong phần về các công cụ Decompiler/Disassembler/Utilities, tôi sẽ tiếp tục với phần về các Deobfuscator/Unpacker/Detector

1. De4dot

Thông tin và download: https://github.com/0xd4d/de4dot

 

De4dot là một công cụ miễn phí mã nguồn mở, có chức năng tự động thực hiện deobfuscate cho hầu hết các obfuscator phổ biến trên thế giới. Công cụ này rất dễ sử dụng, phù hợp với cả newbie lần người có nhiều kinh nghiệm, và mạng lại kết quả “trên cả tuyệt vời”. Đây là công cụ bạn CẦN PHẢI CÓ trong bộ đồ nghề của mình để giúp cho công việc Reverse Engineering trở nên dễ dàng hơn. Tất nhiên bạn vẫn có thể deobfuscate thủ công, nhưng việc này mất nhiều thời gian và đòi hỏi bạn có một đống kiến thức rất lớn về .NET cũng như debugging, thế nên với một công cụ giúp bạn tự động làm mọi thứ như thế này, tôi đánh giá nó thật sự rất tốt. Bạn là người mới? Chỉ việc kéo thả. Bạn là người có nhiều kinh nghiệm? Có hàng tá option cho bạn tha hồ sử dụng, đối với mỗi loại obfuscator. Và thêm nữa, đây là một ứng dụng mã nguồn mở, cho nên bạn có thể tải mã nguồn của nó về, đọc, hiểu, cải tiến code và biên dịch để nó hoạt động theo ý bạn. Bạn có thể làm bất cứ điều gì, quá tuyệt phải không?

Tính năng chính:
– Inline methods. Some obfuscators move small parts of a method to another static method and calls it.
– Decrypt strings statically or dynamically
– Decrypt other constants. Some obfuscators can also encrypt other constants, such as all integers, all doubles, etc.
– Decrypt methods statically or dynamically
– Remove proxy methods. Many obfuscators replace most/all call instructions with a call to a delegate. This delegate in turn calls the real method.
– Rename symbols. Even though most symbols can’t be restored, it will rename them to human readable strings. Sometimes, some of the original names can be restored, though.
– Devirtualize virtualized code
– Decrypt resources. Many obfuscators have an option to encrypt .NET resources.
– Decrypt embedded files. Many obfuscators have an option to embed and possibly encrypt/compress other assemblies.
– Remove tamper detection code
– Remove anti-debug code
– Control flow deobfuscation. Many obfuscators modify the IL code so it looks like spaghetti code making it very difficult to understand the code.
– Restore class fields. Some obfuscators can move fields from one class to some other obfuscator created class.
– Convert a PE exe to a .NET exe. Some obfuscators wrap a .NET assembly inside a Win32 PE so a .NET decompiler can’t read the file.
– Removes most/all junk classes added by the obfuscator.
– Fixes some peverify errors. Many of the obfuscators are buggy and create unverifiable code by mistake.
– Restore the types of method parameters and fields
Các obfuscator/packer mà chương trình hỗ trợ:
– Agile.NET (aka CliSecure)
– Babel.NET
– CodeFort
– CodeVeil
– CodeWall
– CryptoObfuscator
– DeepSea Obfuscator
– Dotfuscator
– .NET Reactor
– Eazfuscator.NET
– Goliath.NET
– ILProtector
– MaxtoCode
– MPRESS
– Rummage
– Skater.NET
– SmartAssembly
– Spices.Net
– Xenocode

de4dot

Thật không quá khi nói de4dot là nỗi ác mộng của các nhà phát triển obfuscator. Có một vài nhà phát triển luôn theo dõi de4dot, mỗi khi de4dot cập nhật lên phiên bản mới là họ lại lẳng lặng nghiên cứu và update luôn cho obfuscator của họ để tránh khỏi de4dot.

2. DotnetDumper/ MegaDumper

Thông tin và download : Tuts4you forum (http://forum.tuts4you.com)

Phương pháp cơ bản và phổ biến nhất để unpack/deobfuscate các chương trình .NET là dump code/file từ memory. MegaDumper (tên cũ là DotnetDumper) là một công cụ viết bởi CodeCracker của nhóm SND nhằm mục đích để thực hiện công việc đó. Công cụ này cũng có mã nguồn mở, tuy nhiên mã nguồn này không public như de4dot mà được share trên các trang RE nổi tiếng như tuts4you, Bl@ckStorm,… Lí do tôi đánh giá cao công cụ này bởi vì nó có chức năng anti-anti-dump rất tốt, vượt qua được hầu hết các cơ chế antidump đã biết, và thêm nữa là công cụ này cũng rât nhẹ và dễ sử dụng, hiệu quả và độ tùy biến cũng khá cao.

 

MegaDumper

3. JitDumper

Thông tin và download: Bl@ckStorm Forum( http://board.b-at-s.info)

Cũng là dumper, nhưng cách hoạt động của JitDumper khác nhiều so với MegaDumper tôi đã nói ở trên.

MegaDumper thực hiện dump file trong khi file đó đang chạy (execution time), còn JitDumper, theo tôi tìm hiểu thì sẽ dump code ngay trước khi JIT Compiler tiến hành chuyển code IL thành mã máy. Điều này thực sự hữu ích với các obfuscator áp dụng phương pháp encrypt code và chỉ decrypt ra khi chương trình chạy. MegaDumper khi dump sẽ chỉ dump được chương trình với code vẫn bị encrypt, còn JitDumper sẽ dump được chương trình với code đã được decrypt (bởi vì code được decrypt trước, sau đó JITCompiler mới chuyển code được decrypt này thành mã máy, như thế thì chương trình mới có thể chạy được).

JitDumper

Điệm hạn chế của JitDumper là hiện tại thì nó hơi bị “quá hạn” (cũ). Tuy nhiên chương trình vẫn hoạt động hết sức hiệu quả. Chương trình này do yck1509 (nghe giang hồ đồn thổi là năm nay mới 19 tuổi :D)

 

4. Simple MSIL Decryptor

Thông tin và download: Tuts4you forum (http://forum.tuts4you.com)

Một công cụ khác được viết bởi CodeCracker, tính năng tượng tự JitDumper và có thêm nhiều tính năng mở rộng khác. Tôi chưa dùng nhiều công cụ này nên cũng chưa hiểu rõ lắm về cách hoạt động của nó. Công cụ này bạn có thể down mã nguồn trong forum tuts4you để về nghiên cứu và phát triển thêm theo ý mình.

Simple MSIL Decryptor

 

(còn tiếp)

Các phần trước

Những công cụ cần thiết cho quá trình Reverse Engineering .NET (Phần 3)

Những công cụ cần thiết cho quá trình Reverse Engineering .NET (Phần 2)

Những công cụ cần thiết cho quá trình Reverse Engineering .NET (Phần 1)