Hướng dẫn Reverse chương trình viết bằng dotNET
Hướng dẫn Reverse chương trình viết bằng dotNET
Ở các bài viết trước mình đã viết bài hướng đẫn phân tích các chương trình trên Android và Rootkit dưới tầng kernel của windows. Hôm nay tiếp tục mình sẽ giới thiệu một cách phân tích động chương trình viết bằng dotNET dưới dạng code IL (Intermediate Language). Ở đây mình chỉ giới thiệu về phân tích động (Debug). Còn về decomplier chương trình dotNET các bạn có thể sử dụng các phần mềm như Reflector, IL Spy, Telerik JustDecompile…..
I. Tool và phần mềm cần thiết:
- Visual Studio 2010 hoặc 2012. Với các file dotNET viết bằng dotNET frame work 4.0
- Visual Studio 2008 với các file dotNET viết bằng dotNET frame work 2.0
- File dotNET cần reverse.
II. Thực hành
- Bước 1: Tạo file IL từ file “ReverseMe.exe”.
Hình 1: Command Line tạo file IL từ file “ReverseMe.exe”
- Bước 2 : Tạo file exe và pdb từ file il vừa mới tạo được
Hình 2 : Command Line Tạo file exe và pdb từ file il vừa mới tạo được
- Bước 3 : Phân tích thành quả của mình vừa làm được J
=> Một điểm đặc biệt khi debug file dot net khác với file PE bình thường code bằng CC++ là Ngoài cách debug với các Opcode assembly bình thường ra ta còn có 1 kiểu debug dưới các code của “IL Assembly Language” code này nằm trong file ReverseMe_.il mà ta vừa tạo ra ở bước 1.
Trên đây là bài viết của mình về một trong số các cách để Phân tích động một chương trình dotNET. Bài viết có thể còn nhiều thiếu sót rất mong nhận được sự góp ý của các bạn !.
Ở các bài viết trước mình đã viết bài hướng đẫn phân tích các chương trình trên Android và Rootkit dưới tầng kernel của windows. Hôm nay tiếp tục mình sẽ giới thiệu một cách phân tích động chương trình viết bằng dotNET dưới dạng code IL (Intermediate Language). Ở đây mình chỉ giới thiệu về phân tích động (Debug). Còn về decomplier chương trình dotNET các bạn có thể sử dụng các phần mềm như Reflector, IL Spy, Telerik JustDecompile…..
I. Tool và phần mềm cần thiết:
- Visual Studio 2010 hoặc 2012. Với các file dotNET viết bằng dotNET frame work 4.0
- Visual Studio 2008 với các file dotNET viết bằng dotNET frame work 2.0
- File dotNET cần reverse.
II. Thực hành
- Bước 1: Tạo file IL từ file “ReverseMe.exe”.
+ Bật cmd chạy chương trình ‘ildasm.exe’ trong thư mục : “CrogramFilesMicrosoftSDKsWindowsv8.0AinNETFX 4.0 Tools” với tham số truyền vào là:
ildasm.exe /OUTPUT=
· : là đường file dot net mà ta muốn reverse
· : là đường dẫn muốn tạo file “il”
=> Sau khi command được thực thi sẽ tạo ra 3 file· : là đường dẫn muốn tạo file “il”
+ Dot_NET_ReverseMe_1.frmReverseMe.resources
+ ReverseMe_.il
+ ReverseMe_.res
=> Chú ý : Nên tạo 1 thư mục riêng để chứa file il hoặc không đặt tên file il trùng với tên file dotNET+ ReverseMe_.il
+ ReverseMe_.res
Hình 1: Command Line tạo file IL từ file “ReverseMe.exe”
+ Bật cmd chạy chương trình ‘ilasm.exe’ với .NetFrameWork v4.x thì trong thư mục : “C:WindowsMicrosoft.NETFrameworkv4.0.30319” với tham số truyền vào là:
Trường hợp file dotNET đó không có resource đi kèm
· ilasm.exe /DEBUG
: là đường dẫn muốn tạo file “il” vừa mới được tạo
Trường hợp file dotNET đó có resource đi kèm
· ilasm.exe /resource= /DEBUG
: là đường dẫn muốn tạo file “il” vừa mới được tạo
=> Sau khi command được thực thi sẽ tạo ra file :· ilasm.exe /DEBUG
: là đường dẫn muốn tạo file “il” vừa mới được tạo
Trường hợp file dotNET đó có resource đi kèm
· ilasm.exe /resource= /DEBUG
: là đường dẫn muốn tạo file “il” vừa mới được tạo
+ ReverseMe_.exe :
+ ReverseMe_.pdb
+ ReverseMe_.pdb
Hình 2 : Command Line Tạo file exe và pdb từ file il vừa mới tạo được
+ Mở Visual studio lên
+ Chọn “File” à “Open” à “Project/Solution” à Mở file “ReverseMe_.exe” vừa tạo được từ file il J.
=> Chú ý: Khi được mở thì để bắt đầu debug thì bấm file F10 hoặc F11 để Visual Studio dừng tại Entrypoint của chương trình. F5 là Run chương trình.+ Chọn “File” à “Open” à “Project/Solution” à Mở file “ReverseMe_.exe” vừa tạo được từ file il J.
+ Đến đây rồi thì tất cả thao tác debug giống như debug khi lập trình với visual studio bình thường thôi
=> Đến đây việc debug một chương trình code bằng C# dưới Opcode assembly bình thường sẽ rất phức tạp và khó hơn debug một chương trình code bằng CC++ rất nhiều lần. => Một điểm đặc biệt khi debug file dot net khác với file PE bình thường code bằng CC++ là Ngoài cách debug với các Opcode assembly bình thường ra ta còn có 1 kiểu debug dưới các code của “IL Assembly Language” code này nằm trong file ReverseMe_.il mà ta vừa tạo ra ở bước 1.
- Thông tin opcode IL tham khảo tại: http://en.wikipedia.org/wiki/List_of_CIL_instructions
Hình 3: Debug file dotNET (exe) vừa được rebuild từ file dotNet gốc
Chú ý: Trong quá trình Debug. Nếu có hàm nào đó đặt Breakpoint mà nó không dừng tại Break point thì để ý các thuộc tính debug (vd: DebuggerHidden,….) ở đầu hàm.đó. Nếu có thì xóa hết các lệnh đó và quay lại bước 2.
Trên đây là bài viết của mình về một trong số các cách để Phân tích động một chương trình dotNET. Bài viết có thể còn nhiều thiếu sót rất mong nhận được sự góp ý của các bạn !.