Category: RCE Tools

Xin đừng hỏi tôi như thế nữa!

“Anh ơi, cái này nó như thế này, giờ em phải làm gì tiếp?”
“Anh ơi, như thế này là sao vậy ạ?”
“Anh ơi, em muốn…, vậy em cần làm gì?”
“Anh ơi….”

Trời ạ, đừng hỏi tôi những câu như vậy nữa, có được không?

Mỗi ngày tôi nhận được 1 lượng không phải ít, cũng không phải nhiều những câu hỏi như thế này. Và tôi nói thật là, chúng khiến tôi phải ngán ngẩm, thực sự tôi rất nản. Các bạn trẻ, các bạn lặp đi lặp lại nhữngcâu hỏi kiểu như thế, các bạn không thấy chán à?

Các bạn nghĩ hỏi nhiều là chứng tỏ sự ham học hỏi à? Đối với những câu hỏi như trên, tôi chẳng thấy gì gọi là tinh thần học hỏi cả, chỉ thấy một sự thụ động và lười biếng, ngại khó ngại khổ mà thôi.

Tại sao?

Đọc bài viết này trước: http://www.hvaonline.net/hvaonline/posts/list/10525.hva . Khi nào bạn đọc xong, thì quay lại đọc tiếp bài viết này.

Bạn đọc xong rồi thì bạn đã rút ra điều gì chưa? Mấu chốt vấn đề nó nằm ở đấy đấy.

Bài viết mà tôi dẫn link phía trên, là bài viết rất kinh điển, và tôi nghĩ rằng tất cả mọi người cần phải đọc nó. Vậy bạn đọc rồi, bạn đã biết mình đang gặp ván đề gì chưa, và tại sao tôi phát khùng lên vì những câu hỏi đó chưa?

Thứ nhất, đặt những câu hỏi kiểu như thế chỉ khiến khả năng tư duy của mình bị kém đi. Hỏi những câu như thế, rồi được một người nào đó trợ giúp, trả lời hộ. Thế thì đáp án là đáp án của người ta, bạn không có gì ngoài cái kết quả đạt được trước mắt, mà bản thân không có một cái gì gọi là “tích lũy trải nghiệm”. Đúng, cái sự học muôn đời phải có chính là sự trải nghiệm, chỉ có chăm chăm tìm kiếm kết quả mà không tự mình trải nghiệm, tự mình tìm tòi, tự mình tích lũy, thì cuối cùng cũng chỉ có được mớ kiến thức của người ta thảy lại tận mồm, không phải của mình. Việc nghiên cứu giống như là một cuộc phiêu lưu vậy, thế nên, đừng quan trọng đích đến, hãy chú ý vào việc tìm kiếm cho mình những trải nghiệm trong suốt chuyến đi, điều đó mới thực sự là giá trị. Chứ nếu như bây giờ, bạn hỏi, tôi đưa cho bạn kết quả, và bạn sẽ chỉ biết là trong trường hợp đó thì phải làm như thế, và kết quả nó ra như vậy. Nếu như gặp phải trường hợp khác thì sao? Tôi biết rồi, bạn sẽ lại hỏi tôi, hoặc người nào khác. Cứ như thế mãi, trong tay bạn có được cái gì? Chẳng có gì đâu, thật sự đấy.

Thứ hai, đặt những câu hỏi kiểu như thế chỉ chứng tỏ rằng bạn không biết khả năng của bạn đang ở mức nào, dẫn đến việc không đánh giá đúng sự việc. Tại sao? Bạn nghĩ mình còn quá “gà”, quá thiếu kinh nghiệm, điều đó đúng, nhưng không thể dựa vào đó để bao biện cho việc lười tìm hiểu được. Và những người đưa cho bạn đáp án, bạn sẽ nghĩ người ta giỏi hơn bạn, và bạn sẽ có đôi lần mơ ước mình được trở nên giỏi như họ, phải vậy không? Thật lòng, tôi khuyên bạn đừng nghĩ theo phương diện đó, có ước mơ là tốt, có ngưỡng mộ là tốt, nhưng ở trong trường hợp này nó không phù hợp. Với cá nhân tôi, trước đây và bây giờ đây tôi luôn luôn tự học, tự nghiên cứu, khi nhìn thấy một người giải quyết được vấn đề nào đó mà tôi không làm được, tôi nghĩ rằng những vấn đề đó thực ra rất đỗi bình thường, họ giải quyết được, tôi không giải quyết được, đơn giản không phải họ giỏi hơn tôi, mà là tôi ngu hơn họ. Tôi biết mình ngu, nên càng phải phấn đấu hơn nữa để trở thành những người “bình thường” như họ. Và từ đó tôi có động lực và mong muốn được tự giải quyết vấn đề.

Tôi luôn tự hỏi mình với mỗi vấn đề tôi gặp phải, và không biết hướng giải quyết “Nếu những người “bình thường” kia là mình, thì họ sẽ giải quyết vấn đề này thế nào? Tại sao họ lại làm như vậy?”. Tin tôi đi, bạn hãy thử phương pháp này trong 1 thời gian, bạn sẽ biết tôi nói đúng hay sai. Hãy tự tìm ra hướng đi của mình, dù đúng hay sai, thì đó là hướng đi của bạn tự tìm ra, tự trải nghiệm, nó thực sự tốt hơn là đồ ăn sẵn. Đến một ngày nào đó, bạn sẽ trở thành 1 người “bình thường” như bao người khác.

Về kinh nghiệm của bản thân tôi, tôi chỉ thực sự tự học, trong khoảng hơn 3 năm trở lại đây. Trong suốt ba năm dấy, tôi chưa bao giờ đặt câu hỏi cho người khác, trên tất cả các forum hay các group mà tôi tham gia. Tôi chỉ hỏi chính bản thân tôi, và Google. Cái cách tôi học hỏi từ những người “bình thường” khác, là tôi tham gia cùng họ để thảo luận về các vấn đề, tôi đưa ra ý tưởng của tôi, và họ nếu thấy tôi sai, hoặc thiếu sót, họ sẽ chỉnh sửa và bổ sung cho tôi ngay lập tức. Có nghĩa là, tôi hoàn toàn không hỏi họ, không nhờ vả họ giúp tôi, tôi thảo luận với họ 1 cách bình đẳng, và từ đó tôi rút ra được những kinh nghiệm cho riêng mình, tự bổ sung những gì tôi còn thiếu và sửa chữa những gì tôi sai sót. Những người “bình thường”, họ rất chịu khó chia sẻ và thảo luận với bạn, nếu như bạn cho họ thấy bạn có quan điểm riêng, có sự tìm tòi nghiên cứu của riêng bạn. Đừng sợ mất thời gian, mà hãy sợ rằng mình không đủ kiên nhẫn để mà tìm hiểu, thế thôi.

Chút cảm nghĩ trong mấy ngày cuối tuần, và hi vọng rằng nó giúp ích cho ai đó…

Debugging .NET Application with DnSpy

This small video is small video to test the debugging feature of dnSpy (which is created by 0xd4d as a modification + improvement of free open-source .NET Decompiler ILSpy). More information of dnSpy can be found here:
https://github.com/0xd4d/dnSpy

The debugger is source-level debugger, means that you can directly debug decompiled code, not assembly-level, and it’s really cool feature

Only a small video, nothing special, feel free to watch it:

 

Personally i think it’s the best .NET Decompiler at the moment. So come and discover it power.

 

Regards,

Levis

Radare – A Modern Reverse Engineering Framework

Radare is name of a Reverse Engineering Framework with full-featured tools, libraries which aims to create a completely reverse engineering environment for Reversers at any platform. I saw many members of MMD research group was using stuffs in this framework. and they’re really powerful. I think that in future, radare will be the most commonly used toolkit in Reverse Engineering.

Homepage: http://www.radare.org/

Features:
Multi-architecture and multi-platform
GNU/Linux, Android, *BSD, OSX, iPhoneOS, Windows{32,64} and Solaris
i8080, 8051, x86{16,32,64}, avr, arc{4,compact}, arm{thumb,neon,aarch64}, c55x+, dalvik, ebc, gb, java, sparc, mips, nios2, powerpc, whitespace, brainfuck, malbolge, z80, psosvm, m68k, msil, sh, snes, gb, dcpu16, csr, arc
pe{32,64}, te, [fat]mach0{32,64}, elf{32,64}, bios/uefi, dex and java classes
Highly scriptable
Vala, Go, Python, Guile, Ruby, Perl, Lua, Java, JavaScript, sh, ..
batch mode and native plugins with full internal API access
native scripting based in mnemonic commands and macros
Hexadecimal editor
64bit offset support with virtual addressing and section maps
Assemble and disassemble from/to many architectures
colorizes opcodes, bytes and debug register changes
print data in various formats (int, float, disasm, timestamp, ..)
search multiple patterns or keywords with binary mask support
checksumming and data analysis of byte blocks
IO is wrapped
support Files, disks, processes and streams
virtual addressing with sections and multiple file mapping
handles gdb:// and rap:// remote protocols

Filesystems support

allows to mount ext2, vfat, ntfs, and many others
support partition types (gpt, msdos, ..)
Debugger support
gdb remote and brainfuck debugger support
software and hardware breakpoints
tracing and logging facilities
Diffing between two functions or binaries
graphviz friendly code analysis graphs
colorize nodes and edges
Code analysis at opcode, basicblock, function levels
embedded simple virtual machine to emulate code
keep track of code and data references
function calls and syscall decompilation
function description, comments and library signatures
And more…

Download:
Binaries (compiled package) download link:
Binary packages for various platform download page (No ads)
Source code:
Source Code download section (No ads)
Documentations:
Documentation from official website(No ads)
Screenshot radare2 (r2 disassembler) running on Linux:

Linux Patching Helper – Source Code download

Hello all mates,

This is my small tool coded in Free Pascal/Lazarus for Linux Platform, that i’ve made a demonstration video before, you can view it here. I planned to make it public long time ago, but due to some issues in code makes it become non-stable. Nothing special, just some dummy lines of code, and now i fixed (a bit) about memory consumption when displaying the result in memobox. Changed from TMemo to TSynMemo and added a timer to avoid the delay. Take a look at this screenshot:

Click on the picture  to view full image

I captured that picture on my Arch KDE desktop, and the project was built using Qt (Created by Lazarus-qt version0. In order to make it working properly, we MUST HAVE binutils installed (which contains objdump – the most important tool)

The source code is a archive of whole my Lazarus Project. Just download the archive, extract and open project in Lazarus, and then compile it. It’s ready to use :). And if you don’t know how to use, just watch my demonstration video (link above).

Link download:

DOWNLOAD LINK MEGA.CO.NZ (ADF.LY ENABLED) (sorry about ads)

Update: Source code now available at github you can grab the source with bash commands;

 cd ~/
git clone git://github.com/levisre/linux_patching_helper.git

Enjoy and best regards,

Levis

Reter Decompiler – Yet another .NET Decompiler

This is an old decompiler, but great one, created by yck1509 (aka Ki, author of Confuser and ConfuserEx). This one was released in couple of years before, and i was lost the download link. But right now i can find a working link to download, so I posted it here. The most interesting features of this decompiler comes from the ability to display all the metadata streams in main window and it has a built-in hex editor. Moreover, it can displays MSIL opcode directly in decompile window (if you use IL mode). Look the picture below:

And the author said:

Features:
-Decompile…
-Browse
-Search
-Token, RVA
-Analyzer-Renaming
-Bookmark

Link download:

DOWNLOAD MEGA.CO.NZ LINK

de4dotShell – Integrate de4dot to Context Menu

Just a basic application, nothing special here

The idea is simple. This small tool adds an entry named “de4dotShell” to context menus of .exe and dll files. From there you can interact with de4dot easily. It also has textboxes to input specific parameters to control de4dot’s works as you want.

To use it, first copy the de4dotShell.exe to de4dot’s root folder (which contains de4dot.exe), and then run de4dotShell.exe, check the box “Register Shell Extension” and voila!

Thanks for Yashar Mahmoudnia for his great idea about de4dotUI. Let make this de4dotShell as a modification of de4dotUI, so nothing special, feel free to use it and all credits go to Yashar Mahmoudnia.

Any bug reports are welcome

de4dotShell

Requires .NET 2.0 and a working de4dot

Download:

DOWNLOAD MEGA.CO.NZ LINK

 

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)