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:

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.




Please, please help her

This topic is not about Technical, but about Real life. So, please take some minute to read it. Thanks a lot!

This is a campaign created by one of my best friends, asking for donation to help his younger sister.

My sister is 14 years old. She has been undergoing dialysis from 2.5 years for 3 times a week. Her both kidneys are damage. Her condition is very critical. Due to undergoing dialysis, she is becoming too weak. I have started this campaign, that I can help her for kidney transplantation. She really wants to go to school, to study and to eat whatever she wants to. But due to dialysis, she cannot do any of such things. She has to take more than 15 tablets per day. Her condition is becoming more and more serious with each passing day. I have a dream that I will give her a new life! I want the help of all of you to make this campaign a great success. I will never forget this donation. She really need your help. Even a small donation from many people can help me to continue the treatment and will enable me to proceed for the transplantation process. Because I believe that when small drops of water combine, they become a river.

I would like to thank all the brothers and sisters from all around the world who have helped in making the previous campaign successful. I hope you all will help me as well.

My sister is 14 years old. She has been undergoing dialysis from 2.5 years for 3 times a week. Her both kidneys are damage. Her condition is very critical. Due to undergoing dialysis, she is becoming too weak. I have started this campaign, that I can help her for kidney transplantation.

She really wants to go to school, to study and to eat whatever she wants to. But due to dialysis, she cannot do any of such things. She has to take more than 15 tablets per day. Her condition is becoming more and more serious with each passing day. I have a dream that I will give her a new life!

I want the help of all of you to make this campaign a great success. I will never forget this donation. She really need your help.

Even a small donation from many people can help me to continue the treatment and will enable me to proceed for the transplantation process. Because I believe that when small drops of water combine, they become a river.

So, all donation are welcome. Please help him  to save his sister. You can start donating by click on the link below:

And Please share this post to other people also, this would be very helpul to make this campaign become success.

Thanks and best regards,


Some little things that i think Windows should has

I started to use PC, for (at least) 10 years around, and the first OS is always, Windows (from XP to Win 7, Win8). From gaming to entertaining, it works quite well, and for production, at the first time, it works well, too. But after i switched to Linux, i found that Linux has some cool built-in features that Windows doesn’t, til now. These features are very very tiny, but they help we work better and faster, a lot. So, what are these features? But let me talk a little bit about my experience. Linux, yes Linux, changed my way to use computer. Eyes-candy effects with Compiz+Emerald, or some superb DE like KDE, Gnome, Cinnamon,… make me feel excited. And Linux not only like that. Spent awhile to playing with theming and customizing my Desktop, and then one day i switched to use ratpoison – the very best WM i have ever seen. “ratpoison”, the purpose is as it, in this WM you don’t need to use mouse to do tasks. All are done by pressing hotkey combinations. Much more faster than moving the pointer around and point-and-click. Then i realized i lost at least 8 years, wasted in this useless point-and-click game without increasing my productivity.

Then, “novice users love mouse, super users love keyboard”.

Let’s think about that, when you’re using PC, your hands are usually at the keyboard. Whenever you want to do some new tasks, what will you do? Release the keyboard, grab the mouse, move it around and click on where you want it to work, release the mouse, grab the keyboard again? Yeah, you wasted you time. Yes, it’s convenient and more user-friendly, but you wasted you time when you move your hand to use the mouse, and move it back again to the keyboard. So, things are more simpler by pressing hotkey, then you will not have to move your hand. This is quickest and most effective way that decrease useless actions you made. The lesser actions you made, the lesser time you lost.

Some users, they’re too lazy enough to not remember any hotkey/shortcut and use mouse a lot. So the main aim of Microsoft when developing Windows is provides an as-much-more-user-friendly-as-possible interface to fit most of “novice users” out there. That’s weird, if one day you’re working hard with all of your power, you will see that, Windows are nothing than a silly crazy baby.

So, how about the thing i want Windows to have, in they next release (Windows 10 or something later on)?

1. Multi-tabbed in Windows Explorer

Windows Explorer is the primary File Manager in Windows, and some novice user don’t notice about it, then even don’t know about its name. Very important in each simple task we do,  But the point is, a lot of windows opened win eat the free screen space, and make user confused when switching among them, it’s really hard to manage at a time. My works are busy enough, and i don’t want to spend any more time to find the Windows i need.

Ugly Taskbar

Gotta sick? While most file manager in Linux have multi-tabbed, it’s easy to navigate and manage. For e.g, Dolphin in KDE, yeah, i love this, a lot, but Windows, since the first time they have the name “Windows”, there is no tab availabe.

Multi tab in DOlphin

Luckily, there is a small (and free) utility available, to bring this cool feature to Windows. It’s Clover (, installed as and extension for Windows Explorer, and it’s really light weight, working like a charm.

Multitab in explorer

Chrome-like tabs, and it’s ease to use with lot of hotkeys availabe. It will groups all the windows into one single Window, and you can navigate to them by using Ctrl+Tab hotkey. To Create new Window, use Ctrl+T, to close a tab, use Ctrl+W. To navigate to specified tab, juse use Ctrl + Tab number, for e.g, Ctrl+1 to tab 1 , Ctr+2 to Tab 2,… and so on. And we just need some default windows hotkeys, F3 to move to the Search bar, F4 to move to location bar, Tab key to move between panel, plus some, you just try to find them out.

The first time, you will not familiar with it, but believe me, you will be quickly satisfied and will work like a machine. Nobody know that what you’re doing on your computer, they just see you typing and screen is blinking amazingly while the jobs are done on-the-fly.

2. System-wide Shortcut key

With some commonly used applications, i need to fire it up quickly every time i need them. So i need to assign hotkey, so whenever i need, i will tap my keyboard, then they should be here for me to use. Linux DEs have an excellent hotkey/shortcut key system, and all the hotkeys are easily to be added/removed. Like this:

Cinnamon Hotkey
Hotkey in KDE

Really really helpful feature. Unfortunately, we don’t have it in Windows, by default. This could be fixed by adding a small utility named WinHotKey ( When it runs, it takes just about ~2MB of your RAM (tested on my system), then we get a full featured hotkey system.

WinHotKey main GUI

This means, i could easily launch IDA every where, by pressing CTRL+WINDOWS+I, or OllyDbg with CTRL+ALT+O, or my favorite Text Editor Sublime, just by CTRL+WINDOWS+S. Just imagine how fast it is, and how much time you will save to speed up works. Yeah, M$, You really really should add this to Windows. Many people will need it, though.

3. Terminal or (at least) a good shell prompting system

This mean that a “command line interface”. In each newer version of Windows, M$ tried to pull cmd (DOS) further from their system. However, cmdline has its own value and will not be replaced easily by GUI (at least, in this time). Powershell in windows, solved the issue, but in a way that i’m not familiar, so i didn’t use it. And i love terminal and shell of Linux a lot, i’m really a big fan. It makes tasks simpler and more flexible. So, one man i know, he showed me this Application: MobaXTerm (cygwin-based) (, there is free personal version to download, but limited some features, you could buy it for the full features and further supports/update). As a novice user, you may find it’s too hard to use or understand, but for me, it’s very powerful. I love the way Linux does, like this, in one window i can manage them all:

Terminator, Yeah, the monster in Linux
MobaXterm make the bit easier to breath

So with MobaXterm plus tmux (install via cygwin), i could get the same thing that fit my needs: MobaXterm is very cool, really is. I even build a small *nix system which work a bit same to the real system (limited, but at least, just enough). And to combination with WinHotKey, i assigned Ctrl+Alt+T to launch it, and i feal like i’m using Linux, comfortable and flexible.

So, the last words is, we should learn to use keyboard hotkey to speed thing up, rather than use mouse. Remember, Ctrl+C is always faster than Right click -> Copy. Have a easier-to-manage and more convenient system, it’s the key to increase the productivity. You can control time, perform lesser actions for a task, it’s enough.

Have fun and good luck,


How to learn Reverse Engineering?

Cứ một vài ngày lại có 1 gã mới xuất hiện ở Tuts4you và hỏi rằng: “Tôi muốn học Reverse Engineering, vậy thì tôi nên bắt đầu từ đâu?”


Có rất nhiều lời khuyên được đưa ra, ví dụ như ở trong bài viết trên Reddit này. Một trong những lời khuyên phổ biến nhất là háy bắt đầu với loạt hướng dẫn của Lena151. Lí do là loạt hướng dẫn này cung cấp được cái nhìn tổng quan về những thao tác phổ biến cần thực hiện, những công cụ phổ biến cung cấp đến sự hài lòng ngay lập tức. Nhưng liệu những bài hướng dẫn đó có thực sự dạy bạn về Reverse Engineering? Tôi không nghĩ như vậy

Tại sao các bài hướng dẫn của Lena151 lại không tốt

Thực tế thì tôi không phải người duy nhất nghĩ như vậy:

Tôi đã nghĩ tại sao việc này lại xảy ra. Về cá nhân tôi, tôi đã bắt đầu học Reverse Engineering bằng cách xem loạt bài hướng dẫn của Lena151. Tôi đã nghĩ rằng chúng thật tuyệt vời chỉ đến khi Daeken nói với tôi rằng đó thật sự là một phương pháp tồi tệ để học Reverse Engineering.

Lúc đầu tôi vẫn không hiểu tại sao (anh ta nói) chúng là không tốt. Loạt bài viết của Lena đã dạy cho tôi để tôi có thể crack phần mềm đầu tiên.

Và đó chính là vấn đề đấy. Bạn chỉ muốn crack phần mềm. Đó là sự thỏa mãn trong thoáng chốc. Nhưng thực tế là bạn đã học được những gì? Chạy một vài công cụ phổ biến, tìm “từ huyệt (bad boy jump” và patch nó? Wow! Bạn thật sự “l33t” (một tính từ châm biếm, kiểu “pro, khủng” khi nói các trẻ trâu) đấy.

Trong thực tế, loạt bài hướng dẫn này đã tạo ra cả một thế hệ những kẻ “muốn làm cracker”, những kẻ chỉ biết sử dụng các công cụ có sẵn, nhưng thực tế thì không biết cách động não (script kiddies). Với mỗi vấn đề gặp phải, họ cần một video hướng dẫn. Chỉ cần một khúc mắc nhỏ thôi họ cũng lập một topic để yêu cầu giúp đỡ.

Đấy mới chỉ là một phần của vấn đề.

Những video hướng dẫn tạo bởi người mới (beginner) thậm chí còn tệ hơn

Albert Einstein đã từng nói:

Tôi càng biết nhiều, thì tôi càng nhận ra rằng càng nhiều thứ tôi không biết.

The more I learn, the more I realize how much I don’t know.

Những người mới, những người xem series của Lena151 không nhận ra điều này. Họ crack được một chương trình đầu tay và họ tự nhận mình là Reverser. Và điều tệ hơn nữa là, họ cố gắng chia sẻ “kiến thức” của họ bằng cách làm vô số những video hướng dẫn “siêu siêu tệ” để cho thế hệ những kẻ “muốn làm cracker” sau xem.

Tôi đã từng xem một video dài 15 phút có tiêu đề “Làm cách nào để Unpack CryptoObfuscator”. Bạn biết nó như thế nào ko? Bạn kéo-và-thả file vào trong de4dot. Chỉ đơn giản như vậy thôi. Vâng, cóngười đã làm một video 15p để dạy bạn làm như thế đấy.

Vậy, cách tiếp cận khác là gì?

Blog ReverseWithme khuyên nên học:

1. x86 Assembly (Giống như hệ thống điện và dây dẫn trong một chiếc ô tô)

2. Cách mà hệ điều hành hoạt động và cách chúng quản lý bộ nhớ (giống như động cơ xe)

3. Quá trình biên dịch từ code C thành Assembly (điều này tương tự như biết cách làm sao để lắp rap một chiếc xe)

4. Chu trình của một mã nhị phân (“The lìfe òf a binary”, khó dịch sát nghĩa) (tương tự như việc hiểu tất cả mọi thứ xảy ra trong chiếc xe từ khi tra khóa vào ổ để khởi động cho đến khi tắt máy).

Tôi cũng không nghĩ đây là hướng đi đúng đắn.

Giống như là bạn học một ngoại ngữ bằng cách đọc một quyển từ điển. Bắt đầu với chữ “a”, và một khi bạn kết thúc chữ “z”, bạn biết tất cả các từ. Có thể. Nhưng bạn sẽ không thể nào đặt được một câu hoàn chỉnh, hay giao tiếp được với một người bản xứ.

Lấy 1 ví dụ: Tôi đã làm Reverse các file .NET trong vòng 10 năm rồi. Tôi đã viết một vài unpackers cho một vài .NET Protectior đơn giản. Và đến giờ tôi vẫn không thể hiểu đưọc IL assembly một cách “thấu đáo” (by heart). Tại sao? Bởi vì tôi không cần phải thế? Dạng biểu diễn dễ nhớ của “branch-if-equal” (rẽ nhánh nếu bằng nhau, một chỉ lệnh IL) là gì? Nó là be, beq, hay bre? Nó lấy 1 hay 2 tham số từ stack ra?. Tôi không biết. Nếu khi nào tôi cần biết, thì chỉ việc tìm kiếm trên Google.

Vâng, để trở thành 1 Reverse tốt, bạn cần phải nắm vững hầu hết những mảng kiến thức đã nêu ở trên. Nhưng bạn không cần phải biết tất cả khi bạn mới bắt đầu tìm hiểu.

Nói tôi biết câu trả lời đi, mẹ kiếp! (Dịch nguyên văn)

À, hãy bắt đầu với loạt hướng dẫn của Lena151. Đúng, tôi nói chúng không tốt, nhưng đó là điều tốt nhất chúng ta có ở đây. Và nếu bạn làm theo một vài lời khuyên thêm dưới dây, bạn sẽ có một khởi đầu khá ổn:\

  • Học cách nghĩ cho bản thân mình. Đây là phần quan trọng nhất. Đừng chỉ mù quáng làm theo những bài hướng dẫn, mà hãy cố gắng để hiểu rằng tại sao lại như vậy, và điều đó xảy ra bằng cách nào.
  • Học cách tìm kiếm. Đa phần các câu hỏi đều đã được trả lời, bạn chỉ cần kiếm câu trả lời mà thôi. Hãy luôn nhớ rằng “Google is your friend”!
  • Tìm hiểu về các công cụ mà bạn có. Bạn không cần phải biết đến từng tùy chọn, và các tính năng của công cụ bạn có. Đa phần người ta chỉ sử dụng khoảng 10% tính năng của Microsoft Excel. Dân chuyên nghiệp thì có thể dùng đến khoảng 20%. Điều này cũng tương tự với các công cụ RE. Nếu bạn có thể sử dụng thuần thục 10% các tính năng của Olly hay IDA, là bạn đã có thể làm rất ổn rồi.
  • Và điều cuối cùng, hay luôn vui vẻ và đam mê! Không có gì hủy diệt năng suất làm việc của bạn nhanh hơn sự nhàm chán. Nếu như vấn đề quá khó, thì hãy bỏ nó đi, thử một vài thứ khác, và quay lại nghiên cứu tiếp vấn đề đó sau.

(Dịch từ bài viết trên blog của kao – Translated from English article at kao’s blog)

[Video] Manual Unpacking Confuser 1.9

Hello mates,

This is a short video i made for a (not so) long time before, but not published (yet). And now i decided to public it for people who want to learn about unpacking Confuser 1.9. I’m not the author of this method, just follow an article made by 0xd4d, so all credits go to him. So feel free to watch and enjoy this video.

A short description about the method used:

– Load file using WinDbg

– Determine which .NET version which is used by target, load the correct SoS extension along side with CLR/MSCORWKS.

– Set breakpoint and run until target file is unpacked/decrypted, and all methods are restored (anti-tamper protection) in memory.

– Dump the memory region

– Use de4dot to clean file

– Patch 3 method (anti-tamper, anti debug, anti-dump) to prevent crash, use CFF + SAE.

– Done


Enjoy and best regards,


“Hãy chuyển ngôn ngữ của chiếc điện thoại bạn đang dùng thành tiếng Anh…”

Xét theo khía cạnh sư phạm hay khoa học gì gì đó, thì tôi không phải là đứa giỏi tiếng Anh. Tôi không có chứng chỉ IELTS, TOEIC, TOELF (chắc là trong lúc này thôi, tương lai tôi có thể sẽ đi thi để lấy một hay một vài cái chứng chỉ đó, nếu như công việc yêu cầu), hồi đi học phổ thông, điểm kiểm tra, điểm thi hay điểm tổng kết của tôi đều chỉ làng nhàng 6,7 điểm cho môn tiếng Anh.

Thế nên bạn hãy hiểu rằng tôi sẽ không dạy bạn phương pháp để học tiếng Anh hiệu quả, để dành điểm cao, hay để lấy được vài cái chứng chỉ nào đó, vì nếu làm như thế sẽ chẳng ai tin, và lại làm cho mấy người có tư duy sư phạm, mô phạm được cớ để lao vào chỉ trích, phê bình. Thế nên, trong bài viết này tôi đứng ngang hàng với các bạn, để tôi kể, kể và kể.

Tôi không biết mục đích của bạn khi học và sử dụng tiếng Anh là gì. Còn tôi, nó là một thứ tất yếu và bắt buộc phải có. Thực ra, lúc đầu tôi ghét tiếng Anh lắm, vì cái quy trình sư phạm ở “xứ thiên đường” khiến cho một con người trần tục như tôi cảm thấy không hào hứng, và thật sự chán ghét thậm tệ. Từ ghét cách giảng dạy làm tôi ghét lây sang cả tiếng Anh. Lúc đó mỗi lần ngồi trong phòng học đối với tôi là 1 thứ cực hình khốn nạn nhất.

Ít ra là tôi cũng có thứ để mà giải khuây, để chạy thoát khỏi những cảm giác tệ hại nhất mà tôi gặp khi ở trong “lớp học xứ thiên đường”.Thú vui đó đã được tôi nói rất nhiều, và hiện đang nằm trong những bài viết của blog này.. RE/security là phần riêng, còn phần chung, theo một chiều rộng hơn, là IT – Công nghệ thông tin. Không biết ai nêu ra cái thể loại “đi tắt đón đầu”, làm nó lây cả vào trong giới đi học lẫn giới tri thức, thành ra nhiều khi trở thành khốn nạn hết mực, nhiều cái mới được dùng nhan nhản ra mà không có nổi một cái tài liệu tiếng Việt, nếu có thì viết theo kiểu “dịch cho có”, người dịch búa xua, bậy bạ hết chỗ nói bởi vì chính người dịch cũng “đi tắt đón đầu”, không hiểu được bản chất nên dịch không sát nghĩa, rời rạc. Thành ra tôi phải đọc tài liệu tiếng Anh.

Căn bản tiếng Anh của tôi cũng có, chứ không phải dốt đặc. Nhưng tiếng Anh chuyên ngành, đọc câu được câu không, và đa phần không hiểu gì. Nhưng lúc đó tôi kệ thôi, đọc một lần không được thì nhai lại 3,4 lần, nhiều khi mình chưa hiểu nghĩa đã thuộc luôn từng chữ của cái câu đó rồi.

Tôi ít khi tra từ điển. Và tôi không thích việc là đọc có vài dòng chữ thôi mà phải lôi nguyên quyển từ điển ra để tra tra, dò dò. Quá vất vả.
Cái gì tôi cũng ghét, vậy tôi phải làm sao?

Và tôi đã nghĩ là: “Mình không thể ép những câu, những chữ này về tiếng Việt được, vậy tại sao mình không chuyển suy nghĩ của mình thành tiếng Anh?“. Đúng, quyển sách thì từ lúc nó viết ra nó đã luôn như vậy rồi, mình không thể biến nó thành quyển sách khác đuợc, thứ duy nhất mình có thể thay đổi được trong lúc này là lối tư duy của mình. Tại sao cứ phải dịch thành tiếng Việt, đó là mình tự làm khó mình rồi. Thế nên tôi tập cho mình cách tư duy bằng tiếng Anh.

Việc tôi làm là đổi ngôn ngữ điện thoại của tôi sang tiếng Anh. Tất cả cái gì có thể đổi được sang tiếng Anh. Như thế là tôi buộc mình phải dùng tiếng Anh mỗi ngày.
Nếu bảo tôi ôm quyển sách bài tập tiếng Anh để ngồi mà làm thì tôi khẳng định tôi sẽ tìm cách đá đít cái người đang nói với tôi câu đó ra khỏi chỗ tôi đang đứng/ngồi. Tôi không thể làm bài tập tiếng Anh kiểu chia động từ, hay phân biệt các thì, trọng ấm, đại từ phó từ mệnh đề…, nhưng cách đọc những từ xuất hiện trên màn hình điện thoại, máy tính, thì tôi đọc được, rất tốt, rất nhanh vì chúng rất trực quan

“Message” trong điện thoại có thể dịch thành “Tin nhắn”, tôi cũng chẳng dịch thành “tin nhắn” để mà nhớ, cứ biết “Message” thế thôi. Thế là từ sau trở đi, hễ cứ nhìn thấy “Message” là hiểu, chứ không cần loay hoay để hiểu xem nó là “tin nhắn” hay “thông điệp”, hay có thể là một “bức thư”?

“Option”, hễ cứ bấm vào đó là mình được chọn những cái mình cần, hoặc những cái mình thích. Thế nên sau này cứ thấy option là biết ngay, khỏi phải dịch thành “lựa chọn” , hay “tùy chọn”

“Category”, cứ bấm vào là thấy một đống thứ được sắp xếp, thế là về sau cứ gặp Category là hiểu, đâu có cần phải dịch ra thành “danh mục”, “chủng loại”, “phân loại” làm gì cho rối rắm chứ?

Vân vân và vân vân…..

Dần dần tôi đọc tài liệu tiếng Anh dễ hơn. Sách tiếng Anh, nhiều cuốn viết hay lắm. Người viết thường là sau khi đưa ra một khái niệm nào đó, người ta sẽ dành một phần khá dài ở phía sau để giải thích. Tôi lấy ví dụ này:

– Sách tiếng Việt: kiều int có kích thước 4 byte, biểu diễn được từ.-xxxx đến xxxx (xxxx là mấy tôi quên mất rồi, chắc chắn là lớn hơn 2 tỉ, youtube mới bị overflow lượt view cho Gang nam xì tai khi nó vượt ngưỡng lưu trữ của int).
Khi đọc xong tôi hỏi: tại sao lại là 2 tỉ hơn, mà lại không phải là số khác? Sách: Im lặng.
– Sách tiếng Anh có thể sẽ viết như sau, tôi nêu lại vắn tắt và có biến tấu cho thêm phần vui nhộn: Int có kích thước 4 byte, có thể lưu được các gía trị từ -xxxx đến xxxx. Bởi vì 1 byte = 8 bit, cứ 4 bit thay đổi gía trị 0 và 1 sẽ có 16 dạng, 2 cái 4 bit là thành 1 byte, mỗi cái 16 dạng => 16*16 =256 dạng biểu diễn => 4 byte, mỗi byte có 256 dạng => 256*256*256*256 = yyyyyyy (khoảng trên 4 tỉ), mà cần biểu diễn số âm nữa nên sẽ dành 1 nửa biểu diễn số âm, 1 nửa biểu diễn số dương, nên ra được cái số xxxxxx phía trên.
Nó viết kĩ như thế nên tôi chỉ còn nước ngồi gật gùi đồng ý và cặm cụi đọc tiếp thôi.

Từ đó trở đi, tôi chỉ đọc tài liệu tiếng Anh mà không động đến bất cứ quyển tài liệu tiếng Việt nào nữa. Khả năng tiếng Anh của tôi cũng từ đó mà tăng lên, vì cũng giống như việc tôi đổi ngôn ngữ điện thoại vậy, dùng lâu thành quen, quen rồi sẽ hiểu.

Việc ép cho tư duy của mình thành tiếng Anh mang lại hiệu quả lớn, và rõ rệt nhất khi tôi quen được những người bạn nước ngoài đầu tiên, và trao đổi với họ qua các ứng dụng instant messaging. Đã “instant” là phải nhanh, nên nếu ngồi vừa dịch vừa viết trả lời thì chắc vài phút mới gửi được một tin nhắn, vậy quá khổ sở. Cũng may cho tôi vì tôi không muốn dịch, và cũng không cần dịch (ít ra là trong trường hợp này), nên việc nói chuyện khá dễ dàng và không bị delay. Càng nói chuyện nhiều thì lại càng quen cái phong cách của họ, và càng hòa nhập hơn. Đó là điều tốt và may mắn cho tôi…

Lúc đầu thì sai tùm lum ngữ pháp, đến giờ cũng vậy. Nhưng mục đích của tôi chỉ là khiến nó (người nuớc ngoài) hiểu mình, và mình hiểu nó đang nói gì là được. Tất nhiên, nó biết tôi không phải người Anh hay mỹ hay Úc, cho nên nó chẳng cười tôi vì tôi viết sai hay viết thiếu, và tôi cũng chẳng phải cố uốn nắn cho đúng để chứng tỏ rằng ta đây cũng “không phải dạng vừa đâu”. Lúc đầu là thế, lâu rồi thì tôi quen hơn với văn phong của các tài liệu tiếng Anh, và cách viết của những người bạn nước ngoài kia. Chứ còn ngữ pháp ư, tôi chẳng biết và cũng chẳng quan tâm. Nỗi ám ảnh ở “lớp học xứ thiên đường” đối với tôi thế là đã quá đủ rồi.

Với những bạn yêu thích IT nói chung và security nói riêng giống tôi, thì chắc chắn tiếng Anh là bắt buộc. Và nếu bạn muốn giảm bớt khó khăn, thì hãy cứ làm theo tôi, “chuyển ngôn ngữ ở máy điện thoại của bạn thành tiếng Anh”, cũng như tư duy của bạn vậy, chuyển nó thành tiếng Anh.

WhiteHat Contest 8 Forensic For100 Writeup – Hello Forensic

Tôi mới bắt đầu tìm hiểu về Forensic (Computer Forensic – Digital Forensic) được khoảng tầm hơn 1 tháng trở lại đây. Trước đây thì tôi chỉ tập trung hết vào RE. Đọc code và debug nhiều cũng oải lắm chứ, nhưng biết sao được, vì đam mê nên cứ làm riết thôi. Mãi sau tôi mới lân la sang vọc vạch 1 chút Forensic này, trước là để thỏa mãn trí tò mò, sau là vì sẽ rất cần thiết cho công việc của tôi trong tương lai (có lẽ là như vậy J ).

Tình cờ bên WhiteHat có tổ chứ WhiteHat Contest 8 để cho các đôi CTF cùng nhau tham dự, thi đấu và giành giải. Cái giải cũng to to, nghe đâu giải nhất được những 20 triệu. Nghe cũng hấp dẫn quá chứ, nhưng tôi tham gia không phải vì giải thưởng, mà là để kiểm tra xem trong thời gian qua mình đã thu lượm được những cái gì. Và rất may là kết quả không đến nỗi tệ, với một forensic newbie như tôi. Thế nên tôi viết cái bài này để đánh dấu lại kết quả đầu tiên tôi gặt hái được. Không là cái gì quá nổi bật, nhưng cũng khiến tôi cảm thấy vui vui J. Newbie mà, cứ làm được là sướng.

Trong bài này tôi sẽ không tập trung vào việc tìm flag một cách nhanh nhất, mà tôi sẽ kéo dài ra để nói về quá trình phân tích, và sẽ cố gắng viết sao cho càng đầy đủ càng tốt, để cho những bạn mới học Forensic như tôi có một cái nhìn dễ dàng hơn về cách mà tôi đã làm. Thế nên, cách làm của tôi sẽ không phải là cách tôi ưu nhất. Tôi gần như làm thủ công mọi bước để có thể moi ra thông tin.

OK, nói thế để rồi, chúng ta sẽ cần một vài thứ sau để thực hiện:

  • 1 Linux Distro: Cái này thì không quan trọng lắm, nhưng tôi hay dùng Linux vì có shell/terminal quá tiện.
  • WireShark: Để xem và phân tích packet
  • Hex Editor: Để làm vài thứ hay ho, các bạn sẽ thấy trong bài viết nay. Ở đây tôi dùng 010 Editor
  • Text Editor: Ghi chép lặt vặt. Nano cũng được

Đề bài cho là 1 file zip, bên trong có 2 file dump1 và dump2 (các bạn có thể tải về tại đây). Như một thói quen, tôi dùng ngay lệnh “file” trong Linux để xem xem 2 file này là gì:, bonus thêm luôn lệnh “ls –l” để kiểm tra thuộc tính file:

[levis@Levis-ARCH tmp]$ file dump1 dump2

dump1: tcpdump capture file (little-endian) - version 2.4, capture length 65535)

dump2: tcpdump capture file (little-endian) - version 2.4, capture length 65535)

[levis@Levis-ARCH tmp]$ ls -l dump1 dump2

-rwxrwxrwx 1 levis levis 3077703 Jan 13 14:47 dump1

-rwxrwxrwx 1 levis levis   1350 Jan 13 14:55 dump2

OK, cả 2 file đều là file packet capture. File dump1 có dung lượng lớn hơn cho nên sẽ phân tích file đó trước. Đổi tên cả 2 file thành dump1.pcap và dump2.pcap. Lại quen tay với RE, tôi lại dùng tiếp lệnh strings để xem trong file dump1.pcap có cái gì đọc được không. Hên xui mà, biết đâu lại có manh mối gì đó. Lệnh: strings dump1.pcap > dump1.txt. Thật may mắn là trong file dump1.txt chứa các string được extract ra từ file djmp1.pcap, tôi tìm thấy dòng này:

Có 1 file secret.txt gì đó nằm trong đống packet được capture. Tên nghe nhạy cảm quá, tôi cần phải tìm xem nó lằm ở packet nào trong đống packet kia. Thê là search trong Wireshark, search string ở các packet bytes. Và tôi tìm được packet này:

ở Packet 2636 là 1 USB Protocol từ thiết bị 3.1 vào host, kích thước packet là 4123 bytes, và ở phần Info ghi là URB_BULK. Đây là Bulk data transfer protocol của USB, URB là viết tắt của USB Request Block (Google với từ khóa (URB Protocol). Bây giờ tôi sẽ save lại packet này ra 1 file mới và tiến hành phân tích tiếp, chỉ riêng packet này thôi. Save lại và mở bằng 1 hex editor, tìm đến đoạn chứa string “secret.txt”. Và tôi phát hiện ra đây là 1 flie zip vì có header PK rất quen thuộc (Wikipeia về Zip File Format). Và tên của file zip này là Vậy tôi cần làm là tìm cách extract file zip này ra. Dựa vào những thông tin tôi đọc được trên wikipedia thì file zip có header là 0x04034B50, như trong hình dưới đây là tại ofset 0x0520. Như vậy là ta đã xác định được phần đầu của file zip, việc còn lại là xác định EOF. Cũng theo trong wikipedia, phàn footer của file zip bắt đầu từ “PK” cuối cùng (0x06054B50) và kéo dài thêm 20 byte nữa để chứa các thông tin cần thiết. Như trong hình này thì EOF sẽ là ở offset 0x060C.

Vậy là ta cần phải copy các byte từ 0x0520 đến 0x060C và save lại 1 file mới, với tên gốc là, như thế này:

Sau đó dùng lệnh unzip để thử unzip ra xem có gì:

[levis@Levis-ARCH tmp]$ unzip


[] secret.txt password:

password incorrect--reenter:

password incorrect--reenter:

skipping: secret.txt             incorrect password

[levis@Levis-ARCH tmp]$

File này có đặt password, tôi thử nhập bừa password vào và bị fail sau 3 lần thử. Bên trong file có 1 file secret.txt rất khả nghi. Vậy làm thế nào để mở được file? Tôi đã thử dùng John the Ripper để crack password, và thực tế là nghĩ rằng việc crack này chỉ là lấy lệ, vì tôi biết trước là sẽ không crack được ngay trong lúc này. Bắt đầu cảm thấy bế tắc, mọi việc đang rất suôn sẻ từ đầu cho đến lúc này, thì lại lòi ra cái việc bắt nhập password. Tôi đã ném bài đó qua một bên, để cho thoải mái đầu óc…

Trên đường từ công ty về nhà, tôi lại nghĩ là còn 1 file mình chưa analysis, là file dump2, vì file size nó quá nhỏ và ít packet, lúc đầu tôi mở trong wireshack thì thấy 1 loạt các packet URB_INTERRUPT, khoảng tầm 2 chục cái packet như thế, mà nhìn thấy chữ INTERRUPT là chán rồi, nên ném nó qua 1 bên để tìm cách kéo file zip ra, và chạy John :v . Mãi đến lúc đó tôi mới nghĩ là có thể password nằm ở đây, trong các byte của hai mươi mấy cái packet kia. Về đến nhà, tôi bật lap rên rồi mở lại file dump2.pcap để cố gắng tìm kiếm xem có cái gì đọc được hay không, nhưng rồi thất vọng vì length của mỗi packet là quá ngắn, chỉ khoảng 35 byte.

Thế rồi tôi tập trung vào tìm hiểu về info của từng packet đó:

Trong Wireshark tôi thấy được là data được Transfer từ thiết bị 4.1 nào đó vào host, giao thức URB_INTERRUPT, và thời gian giữa các packet được transfer khá ngắn. Điều gì khiến packet được gửi nhanh như vậy? Và cái tôi đang cần là tìm mật khẩu cho file zip. Tự nhiên trong 1 giây tỏa sáng, tôi nghĩ rằng đây là các packet được transfer khi người dùng gõ phím trên 1 usb keyboard. Ý tưởng đã có, thế là tôi lao vào tìm một số thông tin về URB_INTERRUPT và USB Keyboard protocol. Về nhà thì không có mạng, thế là căng mắt ra tìm google qua cái màn hình điện thoại bé tí. Tình cờ mò được cái writeup này: khiến cho tôi càng tin vào giả thuyết của mình hơn. Trong bài viết có 1 link cho download 1 table (bằng tiếng Nga, bạn có thể tìm thấy file pdf đó trong file nén chứa đề bài tôi gửi link ở phía trên) ghi rõ các keycode. Thế là ok rồi, Tôi cần tìm xem keycode nằm ở đâu trong packet, bỏ qua đoạn header của packet, tôi thấy được có byte tại vị trí 0x2C là thay đổi, và byte này nằm trong phần leftover data.

Vậy đây là keycode cần tìm, đối chiếu keycode này với table download về lúc trước (bỏ qua keycode 00), từ đầu cho đến hết 26 packet (bỏ qua 13 packet 00, còn lại 13 packet chứa keycode, cuối cùng có được 1 strings rất quen thuộc: just in time. Đây có thể là password để unzip file chăng? Nghi lắm, thử cái xem nào:

[levis@Levis-ARCH tmp]$ unzip


[] secret.txt password:

inflating: secret.txt

[levis@Levis-ARCH tmp]$ cat secret.txt


WOW! Quá ngon, file đã được unzip, và tôi tiện tay xem luôn nội dung của file secret.txt. Trong đó có thứ tôi cần tìm: flag. Nhấc điện thoại, gọi cho 1 người bạn trong team kêu họ dùng pass đó để unzip, lầy flag và submit (không có mạng khổ thế đấy).

Cuối cùng thì cũng thành công, bài for đầu tiên làm được, kể cũng vui đó chứ. Team thì rank lèo tèo thôi, tại ít người involve, giống lúc đầu tôi nói đó, làm chơi chơi cho vui ấy mà J.