Tag: reverse engineering

Deobfuscating Javascript Malware

Hello,

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: http://pastebin.com/uk0vk3VT ( 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);};

to
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:

js_decoded_phase1
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: http://pastebin.com/p332nWSa (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:

Voila
Voila

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:

http://sirimba.com.br/qiovtl
http://zakagimebel.ru/krcsvf
http://repair-service.london/uywgi7v

 

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,

Regards,
Levis

 

Advertisements

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,

Levis

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

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?”

Hmmm….

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)

Reverse Engineering .NET – Advanced Patching, Playing with IL

Xin chào các bạn,

Đây là bài viết mới nhất của tôi về Reverse Engineering .NET. Trong bài viết này tôi sẽ nói về IL Code/IL bytecode và cách để patch IL code 1 cách “Advance” thay vì patch true,false thông thường (Cr@cking-related). Hi vọng các bạn sẽ hiểu thêm 1 chút về IL code, và cách mà 1 .NET file lưu trữ IL bytecode và các method như thế nào.

Các bạn có thể đọc bản online tại đây:

Link tải về (cho lưu trữ hoặc đọc offline):

DOWNLOAD LINK GOOGLE DRIVE

Best Regards,

Levis