Category: Tutorial Papers

Deobfuscating Javascript Malware


I just received a javascript sample, from one of my friends. He said that this sample was sent by an malicious email address. and seem that the bad actors are trying to trick people to click on the file.

THen i quickly open up the file in a text editor, and relized that the file is strongly obfuscated, that can not be read normally. So, to figure out what exactly behind it, i have to deobfuscate javascript. Then the journey begins.

The code: ( i can’t post the code here because it’s too long
Meh, >5000 lines of code, and mostly are seem nonsense. But, i noticed on the top of the code:

function f(s) {return eval(s);};

It uses eval() to execute a variable s. And at the very last of the file, i saw:

if (c["length"] >= 12) f(c);

It calls f with c as the input. And from the line 5664 to 5670, i got:

b = aj85dZA;
b = b"join";
b = b"split";
b = b"join";
b = b"split";
c = b"reverse";
c = c"join";

It takes all the data of the huge chunk above and do some tasks. I’m to lazy in this phase to rewrite the code, so i use Chrome, with a little trick, change:

function f(s) {return eval(s);};

function f(s) {return document.write(s);};
So when we execute the code, it will prints out the value of s, rather than execute it. So we can get another piece of code for the next phase. Fire up Chrome -> F12 -> Paste the modified code -> Enter, and:

Pretty easy, eh? Phase 1 completed. But still, the code is obfuscated. We got more, but seem to be really ugly since it is unstructured. I use Jsbeautifier to clean up and restructure it, for a better view. In a second, we have:

Full code is at: (sorry, because i don’t want to make this post to be very long)

From there, why can’t i use Chrome to evaluate the code? Simply i don’t have any idea about the code, so better not run it, because it’s too complicated to set a breakpoint or trace down. So, what did i do?

In the very beginning of the code, i see a lot of variables which are strings. Seem that they’re originally a word, but now that word is splitted into pieces, each one is stored in a dedicated variable, and the variable’s name is randomized. So, i started to think that, i need to reformat all the name of those variables.

The scheme is simple, rename the variable name, according to its value. Just need a text editor, anyone that can perform search and replace, and replace them all in whole document. In this case, i choose sublime, and it consumes a lot of time to finish the task, because i have to do a lot of steps with mouse, not the hotkey. I believe that some other editors that can do better.

Start the boring task
Start the boring task

After a while, 20-30 mins, maybe, i replace all the name of variables which store readable strings. Phew, i can believe that i have done a most-boring-task-ever. Then i quickly scroll down in the file, i got a diamond:


So, what can you see in there? Yeah, i think that you saw some interesting things here. We have some sensitive data hare. I did the magic with just “Search and Replace”. Now the next job is combine them together and make it rocks. Delete the plus (“+”) sign, or better rewrite the code based on what you actually saw, now everything is clearly, even a kid can do that, like a tetris game.

The obfuscation scheme is:

  • Split sensitive strings into pieces, and then obfuscate the name.
  • Use many junk code to make it harder to read. You can read the code that it makes some function that only return the input “as it”.
  • Use Object[“MethodName”]() instead of the traditional object.methodName(). So it’s really hard to keep up with.

Next to it, i got:

Maliciouse URLs
Maliciouse URLs

Now we have the malicious URLs. There are 3, from the first time i saw them, they’re still active, but in this time, they removed the file from the server (just 3 days ago). Anybody interested, just do a whois.

List of malicious URLS:


The fully cleaned the code i posted to gist. I built it truely from the obfuscated code. Now it’s fully readable. Mission accomplished. Nothing special, just “Search and replace”, and then tidy up the code.

From the code, I can know that it create some WScript objects, connects to the server and download file to %TEMP%, with the name 0ttyR4ET9BxiI.exe. This file is encrypted, the decryption code is right below of the main function. I decrypted it and uploaded to virustotal, in Jul 12, only 17 AV Detected, but to Jul 13, the number is 31 (link). It’s a ransomware (a new variant?). I want to post about analysis result here, but, seem to be enough, maybe in the next post, we will dissect it and make the fun.

Any request for the decrypted malware, feel free to mail me (Posting it right here is not a good idea).

Enjoy and stay safe,



Unpacking Malware with dnSpy

Lần đầu làm chuyện ấy…

À ý tôi là làm video thuyết minh tiếng Việt, nên rất là run và có chút bẽn lẽn. Trước đây tôi làm tiếng Anh thì quen hơn nhiều, chứ còn tiếng Việt thì rất hay nói lỗi bởi vì có mấy thuật ngữ tôi không bao giờ dịch sang tiếng Việt, cũng không biết giải thích theo nghĩa tiếng Việt như thế nào nữa, cho nên rất là bối rối, mong các bạn bỏ quá cho.  Xin hay ủng hộ tôi, chỉ cần một comment “hjhj d0 ng0’k” hoặc “bố em hút rất nhiều thuốc” thôi là đã thấy yêu thương vô hạn lắm rồi. Cảm ơn

Ở trong video này chúng ta sẽ cùng sử dụng dnSpy để unpack 1 dạng unknown packer được sử dụng bởi 1 mẫu malware giả mạo Steam Client, mà một người bạn gửi cho tôi. Đây (có lẽ) là phần 1, nếu có thời gian tôi sẽ tiếp tục phân tích tiếp, và tất nhiên sẽ cố gắng làm full hd không che như thế này.

Note: Dạo gần đây tôi phát hiện khá nhiều mẫu, sử dụng .NET để làm wrapper để vượt mặt các Antivirus, vì việc detect mấy kiểu file .NET tôi có cảm giác như các hãng AV đang làm khá mơ hồ, đơn cử như trong mẫu này, file unpack ra mới chỉ có 8 AV phát hiện ra dưới dạng tên chung chung kiểu MSIL/Injector, hay Trojan.Gen,… Link scan trên virustotal có tại đây.

Thực sự rất đáng báo động, vì bây giờ đa pần các thế hệ windows mới (7,8/8.1,10) có sắn .NET đi kèm, vậy nên cái risk khá là cao. Khi mà phần lớn các AV đều chưa nhận diện tốt các loại malware thế này. .NET Wrapper có thể làm nhiệm vụ anti-AV hoặc detect xem có đang bị analysis hay không, sau đó mới drop các “em bé” thứ thiệt xuống (điển hình là trong vụ malware skype vừa qua, tôi có những mẫu đầu tiên và đã phân tích hoàn chỉnh chúng hồi đầu tháng 5, là những mẫu wrapper sử dụng Confuser/ConfuserEx). Thực sự rất là quan ngại sâu sắc lắm

Các yêu cầu về mẫu malware, xin vui lòng liên hệ qua email.

Enjoy and stay safe,


[Video] Unpacking using DnSpy

Hello mates,

This is a small video to show you the way that you can use dnSpy to unpack some simple packers/crypters by debugging and dumping.

The methodology is pretty simple, the packer encrypts the original file into a loader, then the loader will decrypts that file right on the memory, and invokes the main function. This technique is widely used in many many packers/crypters because it’s fast and easy to implement. So let’s see what we can do to unpack it in the modern way. In this video, i used MPRESS as a demonstration packer

Enjoy and best regards,


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,