Tag: Olly

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)

Customizing and sharing Windbg’s Theme: How to? Here’s a quick note

these days i spent some hours to play around with windbg to see how it works, and getting bored because i’m missing Ollydbg’s style. So I made a new look for windbg to make it become more friendly to me. You can take a look in the picture below:
ibcLcQqET5HkY7.png
Pretty nice, eh? Yeah, just a little bit modification. And everything is now okay. But before sharing this theme, let me talk a bit about the way to create a theme in windbg.
Windbg has a great and modern, highly configurable interface with docking, tabbed and floating-windows, so you can work in very comportable and flexible enviroment, as you wish to. For me, it’s very interesting, and i liked it a lot.
By default, the default workspace of windbg is really “empty” -> this means that the first time you ran the windbg, you will see a blank windows with no child-windows inside (for e,g disassembler, register, memory dump, stack, etc…). So, you should bring them out by clicking on the “View” menu. Then you can change display color and font style by going to menu “View” -> “Option”.
After get the thing done, you MUST save the setting by going to “File” menu and choose “Save workspace”. But, the point is, how to export the theme and share to others?
Here’s how i did it. Just follow these steps:
1. Fire up Windbg, then make changes to its interface as i said before
2. After step 1, click the “File” Menu and then choose the “Save Workspace to file”. A SaveFileDialog comes out, set the name for you file and click “Save” button. Remember the location where you saved the file
3. Locate the file which you just created in step 2, this is your saved settings (includes windows positions, color schemes and font style…) with extension “.wew”.
Everytime windbg executed, it will reads the information about workspace setting in a registry key value. The value is stored at HKCU\Software\Microsoft\Windbg\Workspace with name “Default” (means default workspace), so we should modify the value stored in this registry key, to load our theme. But why we need the *.wew file? I opened that file (.wew) in a hex editor to see the content inside, then i compared it with the value stored in “Default” registry key, and found that they all have the same format. So, to apply the theme, simply copy all the data in .wew file then paste in to “Default” registry key. I wrote a small python snippet to convert .wew file to a .reg file. Then we just apply the .reg file to overwrite data in “Default” registry key automatically. And if we want to share the theme to other, just send them the reg file and they will apply it.
4. Copy these code, save and run it with argument:
import binascii
import sys
fileName = sys.argv[1]
f = open(fileName,'rb')
content = f.read()
data = binascii.hexlify(content)
fileOut = open(fileName+'.reg','w')
fileOut.write('Windows Registry Editor Version 5.00\n\n')
fileOut.write('[HKEY_CURRENT_USER\\Software\\Microsoft\\Windbg]\n\n')
fileOut.write('[HKEY_CURRENT_USER\\Software\\Microsoft\\Windbg\\Workspaces]\n\n')
fileOut.write('\"Default\"=hex:'+data[0]+data[1])
x=2
while x < len(data):
  fileOut.write(','+data[x]+data[x+1])
  x+=2
f.close()
fileOut.close()
for example, my saved workspace file has the name “Cool_theme.wew”, and i saved the code above to a file named wtl.py (windbg_theme_loader), so the command is :
python wtl.py Cool_theme.wew
a new file named Cool_theme.wew.reg will be created. Now the time for you to start applying and sharing your creations.
And here is the reg file of my theme, jsut save and activate:
Windows Registry Editor Version 5.00
 
[HKEY_CURRENT_USER\Software\Microsoft\Windbg]
 
[HKEY_CURRENT_USER\Software\Microsoft\Windbg\Workspaces]
 
"Default"=hex:57,44,57,53,01,00,00,00,30,00,00,00,38,00,2e,00,43,00,3a,00,5c,00,55,00,73,00,65,00,72,00,73,00,5c,00,4c,00,65,00,76,00,69,00,73,00,5c,00,44,00,65,00,73,00,6b,00,74,00,6f,00,70,00,00,00,67,00,33,00,00,00,68,00,5c,00,f0,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,03,02,01,31,43,00,6f,00,6e,00,73,00,6f,00,6c,00,61,00,73,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,6e,00,65,00,00,00,02,00,10,00,04,00,00,00,00,00,50,00,52,00,01,00,02,00,10,00,04,00,ff,ff,ff,00,00,00,00,6a,0a,00,00,00,10,00,04,00,20,00,00,00,00,6a,00,00,3d,00,00,00,10,00,04,00,00,00,00,00,00,03,00,00,0c,00,00,00,10,00,04,00,01,00,00,00,00,04,00,2e,3c,00,00,00,10,00,04,00,01,00,00,00,01,08,00,00,3f,00,00,00,10,00,04,00,01,00,00,00,00,03,00,00,12,00,00,00,10,00,04,00,01,00,00,00,00,08,00,30,24,00,00,00,50,00,42,00,44,00,3a,00,5c,00,43,00,72,00,61,00,63,00,6b,00,65,00,72,00,20,00,50,00,61,00,63,00,6b,00,61,00,67,00,65,00,5c,00,77,00,69,00,6e,00,64,00,62,00,67,00,5c,00,73,00,6f,00,75,00,72,00,63,00,65,00,00,00,00,03,00,01,04,2a,23,00,00,00,50,00,42,00,44,00,3a,00,5c,00,43,00,72,00,61,00,63,00,6b,00,65,00,72,00,20,00,50,00,61,00,63,00,6b,00,61,00,67,00,65,00,5c,00,77,00,69,00,6e,00,64,00,62,00,67,00,5c,00,69,00,6d,00,61,00,67,00,65,00,73,00,00,00,00,1e,0b,41,00,03,22,00,00,00,b0,00,a6,00,53,00,52,00,56,00,2a,00,44,00,3a,00,5c,00,43,00,72,00,61,00,63,00,6b,00,65,00,72,00,20,00,50,00,61,00,63,00,6b,00,61,00,67,00,65,00,5c,00,77,00,69,00,6e,00,64,00,62,00,67,00,5c,00,73,00,79,00,6d,00,62,00,6f,00,6c,00,73,00,72,00,2a,00,68,00,74,00,74,00,70,00,3a,00,2f,00,2f,00,6d,00,73,00,64,00,6c,00,2e,00,6d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,2e,00,63,00,6f,00,6d,00,2f,00,64,00,6f,00,77,00,6e,00,6c,00,6f,00,61,00,64,00,2f,00,73,00,79,00,6d,00,62,00,6f,00,6c,00,73,00,20,00,00,00,00,00,41,ff,02,00,10,00,04,00,00,00,00,00,20,00,20,00,40,ff,02,00,10,00,04,00,ff,ff,ff,00,20,00,20,00,00,ff,02,00,10,00,04,00,ff,ff,ff,00,20,00,20,00,01,ff,02,00,10,00,04,00,00,00,00,00,20,00,20,00,02,ff,02,00,10,00,04,00,ff,80,00,00,20,00,20,00,03,ff,02,00,10,00,04,00,00,00,00,00,20,00,20,00,04,ff,02,00,10,00,04,00,ff,ff,00,00,20,00,20,00,05,ff,02,00,10,00,04,00,00,00,00,00,20,00,20,00,06,ff,02,00,10,00,04,00,ff,ff,ff,00,20,00,20,00,07,ff,02,00,10,00,04,00,00,00,00,00,20,00,20,00,08,ff,02,00,10,00,04,00,80,ff,00,00,20,00,20,00,09,ff,02,00,10,00,04,00,00,00,00,00,20,00,20,00,0a,ff,02,00,10,00,04,00,ff,ff,ff,00,20,00,20,00,0b,ff,02,00,10,00,04,00,00,00,00,00,20,00,20,00,0c,ff,02,00,10,00,04,00,ff,ff,80,00,20,00,20,00,0d,ff,02,00,10,00,04,00,00,00,00,00,20,00,20,00,0e,ff,02,00,10,00,04,00,ff,ff,ff,00,20,00,20,00,0f,ff,02,00,10,00,04,00,00,00,00,00,20,00,20,00,10,ff,02,00,10,00,04,00,00,ff,00,00,20,00,20,00,11,ff,02,00,10,00,04,00,00,00,00,00,20,00,20,00,12,ff,02,00,10,00,04,00,ff,ff,ff,00,20,00,20,00,13,ff,02,00,10,00,04,00,00,00,00,00,20,00,20,00,38,ff,02,00,10,00,04,00,ff,ff,ff,00,20,00,20,00,39,ff,02,00,10,00,04,00,00,00,00,00,4e,00,4f,00,3a,ff,02,00,10,00,04,00,ff,ff,ff,00,43,00,48,00,3b,ff,02,00,10,00,04,00,00,00,00,00,00,00,48,00,3c,ff,02,00,10,00,04,00,ff,ff,ff,00,56,00,45,00,3d,ff,02,00,10,00,04,00,00,00,00,00,4d,00,45,00,3e,ff,02,00,10,00,04,00,ff,ff,ff,00,55,00,73,00,3f,ff,02,00,10,00,04,00,00,00,00,00,76,00,69,00,04,00,03,00,10,00,04,00,00,00,00,00,76,00,69,00,04,00,01,00,70,02,68,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,0f,00,00,00,00,00,00,00,00,01,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,00,00,00,ff,ff,ff,0f,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,0f,00,00,00,00,00,00,00,00,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,0f,00,00,00,00,00,00,00,00,04,00,00,00,01,00,00,00,01,00,00,00,20,00,00,00,4b,00,00,00,dc,02,00,00,db,01,00,00,03,00,00,00,00,00,00,00,05,00,00,00,00,00,00,00,05,00,00,00,01,00,00,00,01,00,00,00,fb,ff,ff,ff,eb,00,00,00,b7,02,00,00,7b,02,00,00,01,00,00,00,00,00,00,80,00,00,00,00,00,00,00,00,06,00,00,00,01,00,00,00,01,00,00,00,cb,01,00,00,44,00,00,00,9a,03,00,00,e1,01,00,00,05,00,00,00,00,00,00,00,05,00,00,00,00,00,00,00,07,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,0f,00,00,00,00,00,00,00,00,08,00,00,00,01,00,00,00,01,00,00,00,30,00,00,00,5b,00,00,00,ec,02,00,00,eb,01,00,00,01,00,00,00,01,00,00,00,0a,00,00,00,00,00,00,00,09,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,0f,00,00,00,00,00,00,00,00,0a,00,00,00,01,00,00,00,01,00,00,00,10,00,00,00,3b,00,00,00,cc,02,00,00,cb,01,00,00,04,00,00,00,00,00,00,00,05,00,00,00,00,00,00,00,0b,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,0f,00,00,00,00,00,00,00,00,0c,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,0f,00,00,00,00,00,00,00,00,0d,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,0f,00,00,00,00,00,00,00,00,00,00,03,00,10,00,08,00,05,00,00,00,70,04,00,00,01,00,01,00,38,00,2c,00,2c,00,00,00,02,00,00,00,03,00,00,00,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,88,00,00,00,7a,00,00,00,cc,04,00,00,c8,02,00,00,56,00,45,00,03,00,03,00,78,00,6c,00,04,00,00,00,02,00,00,00,64,00,00,00,14,00,00,00,00,00,00,80,02,00,00,40,07,00,00,00,95,03,00,00,00,00,00,00,4e,05,00,00,93,01,00,00,04,00,00,00,01,00,00,00,01,00,00,00,20,00,00,00,4b,00,00,00,dc,02,00,00,db,01,00,00,03,00,00,00,00,00,00,00,05,00,00,00,00,00,00,00,00,00,00,80,01,00,00,40,04,00,00,40,02,00,00,00,01,00,00,00,44,00,00,00,03,00,03,00,80,00,74,00,0a,00,00,00,01,00,00,00,64,00,00,00,14,00,00,00,00,00,00,80,03,00,00,40,07,00,00,00,c7,02,00,00,93,01,00,00,4e,05,00,00,7c,02,00,00,0a,00,00,00,01,00,00,00,01,00,00,00,10,00,00,00,3b,00,00,00,cc,02,00,00,cb,01,00,00,04,00,00,00,00,00,00,00,05,00,00,00,00,00,00,00,00,00,00,80,ff,ff,ff,0f,02,00,00,40,03,00,00,40,02,00,00,00,00,00,00,00,14,00,00,00,10,00,04,00,03,00,03,00,98,00,90,00,08,00,00,00,03,00,00,00,64,00,00,00,14,00,00,00,00,00,00,80,03,00,00,40,07,00,00,00,00,00,00,00,93,01,00,00,c7,02,00,00,7c,02,00,00,08,00,00,00,01,00,00,00,01,00,00,00,30,00,00,00,5b,00,00,00,ec,02,00,00,eb,01,00,00,01,00,00,00,01,00,00,00,0a,00,00,00,00,00,00,00,00,00,00,80,01,00,00,40,03,00,00,00,01,00,00,00,01,00,00,00,00,00,00,00,03,00,00,00,01,00,00,00,10,00,00,00,40,00,24,00,73,00,63,00,6f,00,70,00,65,00,69,00,70,00,00,00,03,00,03,00,80,00,78,00,05,00,00,00,00,00,00,00,64,00,00,00,14,00,00,00,00,00,00,80,04,00,00,40,07,00,00,00,00,00,00,00,00,00,00,00,95,03,00,00,93,01,00,00,05,00,00,00,01,00,00,00,01,00,00,00,fb,ff,ff,ff,eb,00,00,00,b7,02,00,00,7b,02,00,00,01,00,00,00,00,00,00,80,00,00,00,00,00,00,00,00,ff,ff,ff,0f,ff,ff,ff,0f,ff,ff,ff,0f,ff,ff,ff,0f,00,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,03,00,03,00,80,00,74,00,06,00,00,00,04,00,00,00,64,00,00,00,14,00,00,00,00,00,00,80,04,00,00,40,06,00,00,00,00,00,00,00,00,00,00,00,95,03,00,00,93,01,00,00,06,00,00,00,01,00,00,00,01,00,00,00,cb,01,00,00,44,00,00,00,9a,03,00,00,e1,01,00,00,05,00,00,00,00,00,00,00,05,00,00,00,00,00,00,00,00,00,00,80,02,00,00,40,04,00,00,00,00,00,00,00,05,00,00,00,e2,ff,ff,ff,00,00,00,00,55,00,73,00,01,00,03,00,10,00,04,00,05,00,00,00,76,00,69,00

 

Edited by Levis, Yesterday, 09:33 PM.

Unpack .NETZ Packer using OllyDbg and Make an unpacker

Hello all mates,
I made this small tutorial to show you how to unpack an executable file packed by .NETZ Packer. The method is simple and basic because NETZ is not a hardcore packer/protector, but it may make people confused a bit when starting with .NET Reversing.
The target included in the archive, which is packed by .NETZ 0.48.
Download here(swf tutorial + Target):
DOWNLOAD LINK UPPIT

More information about .NETZ (it’s free, and open source code):
.NETZ Packer HomePage

Edit:
I created a small application which help you to unpack .NETZ Packer (Default Compression) as a demo program in vb.net.
You can download here(binary + resource code in vb.net):
DOWNLOAD LINK UPPIT
Usage: nu to unpack.
Enjoys and best regards
Levis