SlideShare a Scribd company logo
Trang 1
Các thuật ngữ thường gặp trong .NET Reverse Engineering
Tác giả: Levis Nickaster (http://ltops9.wordpress.com )
.NET Reverse Engineering là 1 nhánh nhỏ của Reverse Engineering, và hiện tại đang phát triển khá mạnh và khá nhanh. Đối
tượng nghiên cứu của .NET Reverse Engineering là các ứng dụng được viết dựa trên .NET Framework và bản thân chính .NET
Framework.
Các thuật ngữ tôi viết dưới đây có thể là không được đầy đủ, và tôi viết theo ý hiểu và kinh nghiệm của tôi, cho nên sẽ không
tránh khỏi những sai sót về mặt chuyên môn, vì vậy, tôi sẽ rất cảm kích nếu các bạn giúp tôi sửa những lỗi đó và góp phần
giúp cho bài viết được tốt hơn.
Thuật ngữ trong .NET Reversing tập trung chủ yếu ở các kiến thức và khái niệm nằm trong lập trình .NET, bởi vì khi thực hiện
Reverse Engineering .NET thì chúng ta có thể tiếp xúc với các code gần code gốc của chương trình , vì vậy kiến thức về lập
trình .NET rất hữu ích trong quá trình Reverse Engineering .NET để đọc và hiểu được hoạt động của code, biết càng nhiều thì
càng khiến việc Reverse Engineering .NET trở nên dễ dàng hơn
Bên cạnh các thuật ngữ thường thấy trong Reverse Engineering PE file cổ điển, Reverse Engineering .Net còn có thêm một
vài thuật ngữ mới sau:
Assembly: Hay có tên đầy đủ là .NET Assembly, đây không phải là tên ngôn ngữ bậc thấp (Assembly). Assembly trong .NET
để chỉ một thực thể (1 file nào đó) được viết bằng .NET đã được biên dịch, và hoạt động dựa trên .NET Framework
‘Assembly” dịch nôm na là “lắp ghép, kết hợp”, thì 1 file trong .NET cũng là tập hợp của các method, class và các phần
resource cũng như references + các thông tin kèm theo. Khi nhắc đến Assembly trong .NET thì có nghĩa là người viết đang
muốn nói đến file .NET đó
IL; viết tắt của Intermediate language, là 1 loại ngôn ngữ làm nhiệm vụ trung gian giao tiếp của code .NET và jit compiler (sẽ
nói đến khái niệm này sau). Các chương trình .NET sau khi được biên dịch, sẽ không chứa mã máy giống như các chương
trình viết bằng ngôn ngữ bậc cao khác mà sẽ chứa các bytecode của IL code.
Dạng biểu diễn của IL code
MSIL: Microsoft intermediate language, tên khác của IL
CIL: Common Intermediate Language, cũng giống như MSIL và IL
Trang 2
Native Application: Native có nghĩa là “tự nhiên, nguyên thủy”, Thuật ngữ này dùng để chỉ các chương trình không viết
bằng .NET - không dựa trên .NET. Các chương trình được viết bằng C/C++, Delphi, vb, asm,… được gọi là những Native
Application, để phân biệt với các .NET Application
Bênh cạnh Native Application còn có thêm 2 thuật ngữ khác, đó là:
- Managed: Các chương trình viết bằng .NET và khi chạy, được quản lý (managed) bởi .NET Framework và CLR (Sẽ
nói đến sau). Vì vậy, khi nhìn thấy “managed application” cũng có nghĩa là chương trình .NET
- Unmanaged: Tên gọi khác của native Application, bởi vì chúng không được quản lý bởi .NET framework và CLR. Vì
vậy khi nhìn thấy “unmanaged application” cũng có nghĩa là đang nói đến các native Application.
Các thuật ngữ “Managed” và “Unmanaged” được tạo nên chủ yếu dựa vào hoạt động quản lý và cấp phát bộ nhớ của
chương trình (memory management). Trong khi các chương trình .NET được quản lý bộ nhớ bỏi 1 Garbage collector, thì
các native application thường không sử dụng garbage collector của CLR đó.
Mixed mode: Đây là thuật ngữ được sử dụng khi nói đến 1 chương trình có sử dụng các kĩ thuật code của .NET và cả
code của các ngôn ngữ khác không dựa trên .NET
Decompile/ Disassemble; Quá trình dịch ngược một chương trình .NET, lấy các bytecode có trong chương trình,
chuyển chúng về IL code (dạng có thể đọc được) và các loại ngôn ngữ bậc cao khác.
Sử dụng IDA để decompile một chương trình .NET về dạng IL code
Obfuscate/obfuscator : là “làm rối”, thuật ngữ này dùng để chỉ phương pháp được sử dụng để làm rối toàn bộ mã
nguồn của chương trình, khiến cho việc dịch ngược và hiểu được code trở nên khó khăn hơn. Obfuscator là thuật ngữ để chỉ
chung các chương trình giúp người dùng làm rối code. Obfuscate giúp bảo vệ chương trình, che giấu code thật. Tên của một
vài Obfuscator: SmartAssembly, ILProtector, .NET Reactor, Confuser, Dotfuscator, Rummage, Xenocode, CodeVeil,…
Trang 3
Giao diện của Confuser – 1 Obfuscator phổ biến
Code khi decompile của 1 chương trình bị obfuscate
Trang 4
Deobfuscate/Deobfuscator: Thêm “De-“ ở đằng trước mang ý nghĩa ngược lại. Vậy nên debofuscate là thuật ngữ
dùng để chỉ các phương pháp được sử dụng để loại bỏ quá trình obfuscate đã được sử dụng lên chương trình cần nghiên
cứu, giúp chuyển code về code gốc, hoặc một kiểu code mà người ta có thể đọc hiểu dễ dàng hơn. Deobfuscator là thuật
ngữ để chỉ chung các chương trình giúp người dùng làm việc đó.
Pack/Packer/Unpack/Unpacker: “Pack” là phương pháp sử dụng các thuật toán để nén một chương trình (hay 1
thư viện, dữ liệu…) lại. Trong .NET thì pack được sử dụng như một phương pháp bảo vệ chương trình để tránh bị dịch ngược
và xem mã nguồn. Chương trình gốc thường thường sẽ được nén lại (có thể kèm theo mã hóa) và được cất trong code của 1
chương trình do các packer (các chương trình thực viện việc pack) tạo ra gọi là 1 loader. Khi chạy, loader sẽ tiến hành load,
giải nén (hoặc giải mã nếu bị mã hóa) chương trình gốc ra trên memory và thực thi chương trình gốc ngay trên đó. Unpack là
quá trình sử dụng các phương pháp để loại bỏ việc pack và tìm lại chương trình gốc để có thể dịch ngược và xem code.
Unpacker là các chương trình được viết ra để thực hiện việc unpack tự động. Một vài packer phổ biến trong .NET thường
gặp là : .NETZ, BoxedApp (có thể pack cả native app), MPRESS (có thể pack cả native app), rpx, ExePack.NET,…
Giao diện dòng lệnh của .NETZ Packer khi đang chạy
CLR: Viết tắt của Common Language Runtime, là môi trường để quản lý việc vận hành các ứng dụng viết bằng .NET, bắt đầu
từ việc khởi chạy chương trình, biên dịch tức thời (JIT) , quản lý bộ nhớ, kiểm soát exception và type safety. Các chương
trình .NET khi hoạt động đều được đặt trong sự quản lý của CLR.
JIT Compiler: JIT viết tắt của Just-in-time (vừa kịp lúc). Đây là chương trình có tính năng tiếp nhận các IL code có trong
chương trình .NET và biên dịch chúng thành mã máy, sau đó giao cho CPU thực thi. Như đã nói ở trên, các chương trình viết
bằng .NET không được biên dịch ngay ra mã máy mà sẽ được chuyển thành IL code, vậy nên JIT Compiler rất quan trọng vì
nó đảm bảo các chương trình .NET được biên dịch thành mã máy, như thé mới có thể chạy được. Nếu không có jIT Compiler,
các chương trình .NET không thể hoạt động. Có thể nhìn ảnh sau để hiểu cách 1 chương trình .NET hoạt động như thế nào:
Sơ đồ cơ chế hoạt động của 1 chương trình .NET
Trang 5
Scanner/Detector: Các chương trình làm nhiệm vụ phân tích tổng quan chương trình để cho biết được chương trình có
được bảo vệ hay không, và bảo vệ bằng obfuscator nào. Các chương trình kiểu này rất quan trọng, cho biết những thông tin
hữu ích khi phải phân tích các chương trình bị obfuscate. Biết được cơ chế bảo vệ rồi thì mới có phương pháp để vượt qua.
Giao diện của 1 Scanner/Detector tên là ExeinfoPE đang scan 1 chương trình .NET
Metadata: dịch theo nghĩa đen là “siêu dữ liệu”. Thuật ngữ này được dùng để chỉ về phần dữ liệu có tổ chức và cấu trúc
cao nằm trong 1 chương trình .NET sau khi được biên dịch từ mã nguồn. Trong metadata lưu trữ rất nhiều thứ: Thông số,
cấu hình của chương trình, cấu trúc và thuộc tính của các thành phần có trong chương trình, IL Code và các resource của
chương trình cũng được lưu ở đây, và những thông tin khác nữa. Đọc thêm bài viết về cấu trúc của file .NET để hiểu về
metadata và cách tổ chức, lưu trữ dữ liệu của nó.
Metadata nhìn từ trong CFF Explorer
Trang 6
Token: Tên đầy đủ là Metadata token, là một giá trị có kích thước 4byte, để chỉ đến phần dữ liệu tương ứng được lưu trữ
trong metadata. Đọc thêm bài viết về cấu trúc file .NET.
Metadata token hiển thị trong 1 decompiler
.NET Reflector: Tên của một trình dịch ngược rất rổi tiếng dảnh riêng cho các chương trình .NET. Có thể đọc thêm về
chương trình này tại loạt bài viết “Các công cụ cần thiết cho quá trình Reverse Engineering .NET” đăng trên blog cá nhân của
tôi.
Giao diện của .NET Reflector
Trang 7
Reflexil: Một plugin quan trọng của .NET Reflector dùng để xem, chỉnh sửa IL code ngay bên trong .NET Reflector và có thể
lưu lại những chỉnh sửa này. Đây là một plugin rất quan trọng và vô cùng cần thiết khi sử dụng .NET Reflector.
Khung hiển thị của Reflexil bên trong .NET Reflector
ILSpy: Một decompiler mã nguồn mở. Có thể đọc thêm thông tin từ loạt bài viết “Các công cụ cần thiết cho quá trình
Reverse Engineering .NET” được đăng trên blog cá nhân của tôi.
Giao diện của ILSpy
Trang 8
De4dot: Tên của 1 chương trình deobfuscator rất nổi tiếng dảnh riêng cho .NET. Có thể đọc thêm về chương trình này tại
loạt bài viêt “Các công cụ cần thiết cho quá trình Reverse Engineering .NET” đăng trên blog cá nhân của tôi.
Giao diện dòng lệnh của de4dot
Mono.Cecil: Mono.Cecil là một thư viện mã nguồn mở, cung cấp các phương pháp để thao tác với các chương trình viết
bằng .NET. Với Mono.Cecil, chúng ta có thể thao tác, chỉnh sửa mọi thông tin lưu trữ trong 1 chương trình .NET (từ các thuộc
tính, đến cấu trúc chương trình và cả IL code). Vì đây chỉ là một thư viện, cho nên cần phải có kiến thức lập trình để xây dựng
chương trình mới có thể sử dụng các tính năng được cung cấp bởi thư viện này.
Dnlib: Một bộ thư viên tương tự với Mono.Cecil, được 0xd4d, tác giả của de4dot phát triển độc lập với Mono.Cecil, nhằm
khắc phục các yếu điểm của Mono.Cecil. Các obfuscator/protector trước đây thường nhằm vào các yếu điểm của Mono.Cecil
để tạo ra các phương pháp chống lại các chương trình dịch ngược có sử dụng Mono.Cecil. dnlib ra đời nhằm mục đích để
vượt qua các cơ chế bảo vệ đó, được sử dụng đầu tiên trong chính de4dot, và hiện tại thư viện này đang được sử dụng rộng
rãi hơn trong giới Reverser.
DnSpy – Một decompiler biến thể của ILSpy, sử dụng dnlib thay vì Mono.Cecil
Trang 9
CFF Explorer: Một chương trình hex editor, nhưng có khả năng đọc và chỉnh sửa thông tin của các chương trình viết bằng
.NET. Có thể đọc thêm về chương trình này tại loạt bài viết “Các công cụ cần thiết cho quá trình Reverse Engineering .NET”
đăng trên blog cá nhân của tôi.
SAE: Tên viết tắt của SmartAssemblyExplorer, một chương trình decompiler cho .NET. Có thể tìm thêm thông tin về chương
trình này trong loạt bài viêt “Các công cụ cần thiết cho quá trình Reverse Engineering .NET” đăng trên blog cá nhân của tôi.
Trang 10
Khung hiển thị code của SAE khi đang dịch ngược 1 chương trình .NET
(Bài viết đang trong giai đoạn hoàn thiện, nếu bạn cần nhiều thêm định nghĩa, khái niệm về các thuật ngữ khác, háy liên lác với tôi :
levintaeyeon@live.com để cùng đóng góp và xây dựng tài liệu này trở nên đầy đủ hơn)

More Related Content

PDF
Phân tích Confuser 1.9.0.0 - Anti-tamper protection - Bản dịch
Levis Nickaster
 
PDF
Reverse Engineering .NET - Advanced Patching, Playing with IL
Levis Nickaster
 
PDF
Hacking de4dot for fun - Bài dịch
Levis Nickaster
 
PDF
Hướng dẫn deobfuscate DotnetPatcher 3.1 - Bài dịch
Levis Nickaster
 
PDF
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
Levis Nickaster
 
PPT
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
iwanttoit
 
PDF
Lập trình web - HTML cơ bản
Nhóc Nhóc
 
PDF
Tùy biến Confuser
Levis Nickaster
 
Phân tích Confuser 1.9.0.0 - Anti-tamper protection - Bản dịch
Levis Nickaster
 
Reverse Engineering .NET - Advanced Patching, Playing with IL
Levis Nickaster
 
Hacking de4dot for fun - Bài dịch
Levis Nickaster
 
Hướng dẫn deobfuscate DotnetPatcher 3.1 - Bài dịch
Levis Nickaster
 
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
Levis Nickaster
 
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
iwanttoit
 
Lập trình web - HTML cơ bản
Nhóc Nhóc
 
Tùy biến Confuser
Levis Nickaster
 

What's hot (20)

DOC
Hệ thống quản lý rạp chiếu phim
vennguyennoinho
 
DOC
De cuongthuchanhct221 hk2_1920_n1
Nahudi Nguyễn
 
PDF
Bai giang hệ quản trị cơ sở dữ liệu
trinhvannam-90
 
PPT
5 bo nho may tinh
Ly hai
 
PDF
Ứng dụng chát realtime android
Nguyen Thieu
 
PPT
Bai03 he thong tap tin fat
Vũ Sang
 
DOCX
Phân tích ConfuserEX - Invalid Metadata (bài dịch)
Levis Nickaster
 
PPTX
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
The Nguyen Manh
 
PDF
Bài tập HTML/CSS
Thuyet Nguyen
 
PDF
Giáo Trình Java Cơ Bản ( Vietnamese)
Đông Lương
 
DOCX
Dịch nghĩa và giải thích chi tiết starter toeic unit 2
my nguyễn
 
PDF
Đề tài: Phần mềm quản lý thông tin sinh viên, HOT, 9đ
Dịch vụ viết bài trọn gói ZALO 0917193864
 
PPT
Bai07 bo nho
Vũ Sang
 
PDF
Bai 02 thong ke mo ta
tqphi
 
DOC
Mô hình hóa Use Case 02
vanphong20082002
 
PDF
Báo cáo thực tập công nghệ thông tin.
ssuser499fca
 
PDF
Cơ sở dữ liệu
Thành Luân
 
PDF
Chuẩn hóa lược đồ quan hệ
Hưởng Nguyễn
 
DOCX
Bai tap thuc hanh
Lanh Dankhao
 
DOC
Bảng giá thiết kế đồ họa
Gai Viet Xinh
 
Hệ thống quản lý rạp chiếu phim
vennguyennoinho
 
De cuongthuchanhct221 hk2_1920_n1
Nahudi Nguyễn
 
Bai giang hệ quản trị cơ sở dữ liệu
trinhvannam-90
 
5 bo nho may tinh
Ly hai
 
Ứng dụng chát realtime android
Nguyen Thieu
 
Bai03 he thong tap tin fat
Vũ Sang
 
Phân tích ConfuserEX - Invalid Metadata (bài dịch)
Levis Nickaster
 
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
The Nguyen Manh
 
Bài tập HTML/CSS
Thuyet Nguyen
 
Giáo Trình Java Cơ Bản ( Vietnamese)
Đông Lương
 
Dịch nghĩa và giải thích chi tiết starter toeic unit 2
my nguyễn
 
Đề tài: Phần mềm quản lý thông tin sinh viên, HOT, 9đ
Dịch vụ viết bài trọn gói ZALO 0917193864
 
Bai07 bo nho
Vũ Sang
 
Bai 02 thong ke mo ta
tqphi
 
Mô hình hóa Use Case 02
vanphong20082002
 
Báo cáo thực tập công nghệ thông tin.
ssuser499fca
 
Cơ sở dữ liệu
Thành Luân
 
Chuẩn hóa lược đồ quan hệ
Hưởng Nguyễn
 
Bai tap thuc hanh
Lanh Dankhao
 
Bảng giá thiết kế đồ họa
Gai Viet Xinh
 
Ad

Viewers also liked (6)

PDF
Phân tích Confuser 1.9.0.0 - Constant Protection - Bản dịch
Levis Nickaster
 
PDF
Hướng dẫn tạo Loader trong .NET - bản dịch
Levis Nickaster
 
PDF
Phân tích Confuser 1.9.0.0 - method proxy confusion - Bản dịch
Levis Nickaster
 
PDF
Decrypt các MSIL methods một cách thử công - Bài dịch
Levis Nickaster
 
PDF
Reverse Engineering in Linux - The tools showcase
Levis Nickaster
 
PPTX
Software maintenance
Rajeev Sharan
 
Phân tích Confuser 1.9.0.0 - Constant Protection - Bản dịch
Levis Nickaster
 
Hướng dẫn tạo Loader trong .NET - bản dịch
Levis Nickaster
 
Phân tích Confuser 1.9.0.0 - method proxy confusion - Bản dịch
Levis Nickaster
 
Decrypt các MSIL methods một cách thử công - Bài dịch
Levis Nickaster
 
Reverse Engineering in Linux - The tools showcase
Levis Nickaster
 
Software maintenance
Rajeev Sharan
 
Ad

Similar to Những thuật ngữ thường gặp trong Reverse Engineering .NET (20)

PDF
Sinh vienit.net --57669587-c-dhkh-hue
Tuấn Nguyễn Văn
 
PDF
Câu hỏi phỏng vấn.pdf
Growup Work
 
PDF
Agent mang bayes
Giang Nguyễn
 
PPT
Chuong 1
Ngoc Quyen Pham
 
PDF
[123doc] - do-a-n-ung-dung-tro-chuyen-truc-tuyen.pdf
KhnhTrn343305
 
PDF
Asp.net 3.5 _1
Duong Nguyen
 
PPT
Mau slide
Donhu Quang
 
DOC
Bao cao web cake php
laonap166
 
PDF
Cong nghnet
Đinh Luận
 
PDF
04 de cuong
Đinh Luận
 
PDF
Bài 1 - Làm quen với C# - Lập trình winform
MasterCode.vn
 
PDF
Gt java080102005
Toàn Trần Mạnh
 
PDF
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng Yên
Trần Thiên Đại
 
PDF
Ebook lập trình Java hướng đối tượng (Tiếng việt)
Duy Lê Văn
 
DOC
Báo cáo thực tập chuyên nghành lập trình Android GPSGroup
Tinh Ngo
 
PPTX
Metasploit
NgcHng148
 
PPT
Ltgd ch01
neopet001
 
PDF
Tài liệu Lập trình Zend Framework 2.x
ZendVN
 
PPT
Linux+03
Duong Hieu
 
DOC
Core java 2
. .
 
Sinh vienit.net --57669587-c-dhkh-hue
Tuấn Nguyễn Văn
 
Câu hỏi phỏng vấn.pdf
Growup Work
 
Agent mang bayes
Giang Nguyễn
 
Chuong 1
Ngoc Quyen Pham
 
[123doc] - do-a-n-ung-dung-tro-chuyen-truc-tuyen.pdf
KhnhTrn343305
 
Asp.net 3.5 _1
Duong Nguyen
 
Mau slide
Donhu Quang
 
Bao cao web cake php
laonap166
 
Cong nghnet
Đinh Luận
 
04 de cuong
Đinh Luận
 
Bài 1 - Làm quen với C# - Lập trình winform
MasterCode.vn
 
Gt java080102005
Toàn Trần Mạnh
 
Giáo trình java Đại Học Sư Phạm Kỹ Thuật Hưng Yên
Trần Thiên Đại
 
Ebook lập trình Java hướng đối tượng (Tiếng việt)
Duy Lê Văn
 
Báo cáo thực tập chuyên nghành lập trình Android GPSGroup
Tinh Ngo
 
Metasploit
NgcHng148
 
Ltgd ch01
neopet001
 
Tài liệu Lập trình Zend Framework 2.x
ZendVN
 
Linux+03
Duong Hieu
 
Core java 2
. .
 

Recently uploaded (20)

PDF
GIÁO ÁN KẾ HOẠCH BÀI DẠY TIN HỌC 12 KẾT NỐI TRI THỨC - ĐỊNH HƯỚNG TIN HỌC ỨNG...
Nguyen Thanh Tu Collection
 
PPTX
Slide CNXH - Chương 2 - Sứ mệnh lịch sử của giai cấp công nhân
NguyenHungDuc
 
PDF
GIÁO ÁN TIN HỌC 12 CHÂN TRỜI SÁNG TẠO - ĐỊNH HƯỚNG TIN HỌC ỨNG DỤNG (ICT) THE...
Nguyen Thanh Tu Collection
 
PDF
Các yếu tố ảnh hưởng đến động lực làm việc của người lao động tại công ty Phư...
joinason777
 
PPTX
Từ vựng tiếng Anh Unit 1 lớp 9 Global Success.pptx
ThyLinh653633
 
PPTX
BPH.tang sinh lanh tinh tuyen tien lietpptx
ngvutrieuvy
 
PDF
Giáo Dục Minh Triết: Chuẩn bị Tâm thế - Tâm thức bước vào kỷ nguyên mới
Chu Văn Đức
 
PPTX
Những vấn đề chung về Marketing căn bản trong kinh tế
tran thi thu hang
 
PPTX
F-Hacker2025F-Hacker2025F-Hacker2025F-Hacker2025
user201002adobe
 
PDF
LÝ THUYẾT VÀ BÀI TẬP HÓA HỌC 11 CẢ NĂM - FORM 2025 - PHÂN THEO MỨC ĐỘ (DÙNG C...
Nguyen Thanh Tu Collection
 
PDF
Giấy báo đủ điều kiện trúng tuyển_phuong.pdf
vodaihong
 
PDF
GIÁO ÁN TIN HỌC 12 CÁNH DIỀU - ĐỊNH HƯỚNG KHOA HỌC MÁY TÍNH (CS) THEO CÔNG VĂ...
Nguyen Thanh Tu Collection
 
PPT
báo cáo tài chính hợp nhất - kế toán tài chính nâng cao
khanhduong69
 
DOC
Bài 12-II.doc...............................
FreePlayer1
 
PPTX
Bài giảng Marketing chương 4 Chính sách giá trong nghiên cứu Marketing SV.pptx
tran thi thu hang
 
PPTX
Chapert7 8.1. Édsdsdsddsdsdsstimation.pptx
b23h0042
 
PPTX
Phần 3 thực tiễn quá trình cách mạng việt nam chủ nghĩa xã hội.pptx
trankhanh140104
 
PPT
Bài giảng Quản trị sản xuất - Chương 3_ Bố trí sản xuất (download tai tailieu...
tran thi thu hang
 
PDF
CHUYÊN ĐỀ DẠNG BÀI LUYỆN THI TỐT NGHIỆP THPT 2025 - TIẾNG ANH (FORMAT 18-10 B...
Nguyen Thanh Tu Collection
 
PDF
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD LỚP 11 BÁM SÁT NỘI DUNG SGK - PH...
Nguyen Thanh Tu Collection
 
GIÁO ÁN KẾ HOẠCH BÀI DẠY TIN HỌC 12 KẾT NỐI TRI THỨC - ĐỊNH HƯỚNG TIN HỌC ỨNG...
Nguyen Thanh Tu Collection
 
Slide CNXH - Chương 2 - Sứ mệnh lịch sử của giai cấp công nhân
NguyenHungDuc
 
GIÁO ÁN TIN HỌC 12 CHÂN TRỜI SÁNG TẠO - ĐỊNH HƯỚNG TIN HỌC ỨNG DỤNG (ICT) THE...
Nguyen Thanh Tu Collection
 
Các yếu tố ảnh hưởng đến động lực làm việc của người lao động tại công ty Phư...
joinason777
 
Từ vựng tiếng Anh Unit 1 lớp 9 Global Success.pptx
ThyLinh653633
 
BPH.tang sinh lanh tinh tuyen tien lietpptx
ngvutrieuvy
 
Giáo Dục Minh Triết: Chuẩn bị Tâm thế - Tâm thức bước vào kỷ nguyên mới
Chu Văn Đức
 
Những vấn đề chung về Marketing căn bản trong kinh tế
tran thi thu hang
 
F-Hacker2025F-Hacker2025F-Hacker2025F-Hacker2025
user201002adobe
 
LÝ THUYẾT VÀ BÀI TẬP HÓA HỌC 11 CẢ NĂM - FORM 2025 - PHÂN THEO MỨC ĐỘ (DÙNG C...
Nguyen Thanh Tu Collection
 
Giấy báo đủ điều kiện trúng tuyển_phuong.pdf
vodaihong
 
GIÁO ÁN TIN HỌC 12 CÁNH DIỀU - ĐỊNH HƯỚNG KHOA HỌC MÁY TÍNH (CS) THEO CÔNG VĂ...
Nguyen Thanh Tu Collection
 
báo cáo tài chính hợp nhất - kế toán tài chính nâng cao
khanhduong69
 
Bài 12-II.doc...............................
FreePlayer1
 
Bài giảng Marketing chương 4 Chính sách giá trong nghiên cứu Marketing SV.pptx
tran thi thu hang
 
Chapert7 8.1. Édsdsdsddsdsdsstimation.pptx
b23h0042
 
Phần 3 thực tiễn quá trình cách mạng việt nam chủ nghĩa xã hội.pptx
trankhanh140104
 
Bài giảng Quản trị sản xuất - Chương 3_ Bố trí sản xuất (download tai tailieu...
tran thi thu hang
 
CHUYÊN ĐỀ DẠNG BÀI LUYỆN THI TỐT NGHIỆP THPT 2025 - TIẾNG ANH (FORMAT 18-10 B...
Nguyen Thanh Tu Collection
 
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD LỚP 11 BÁM SÁT NỘI DUNG SGK - PH...
Nguyen Thanh Tu Collection
 

Những thuật ngữ thường gặp trong Reverse Engineering .NET

  • 1. Trang 1 Các thuật ngữ thường gặp trong .NET Reverse Engineering Tác giả: Levis Nickaster (http://ltops9.wordpress.com ) .NET Reverse Engineering là 1 nhánh nhỏ của Reverse Engineering, và hiện tại đang phát triển khá mạnh và khá nhanh. Đối tượng nghiên cứu của .NET Reverse Engineering là các ứng dụng được viết dựa trên .NET Framework và bản thân chính .NET Framework. Các thuật ngữ tôi viết dưới đây có thể là không được đầy đủ, và tôi viết theo ý hiểu và kinh nghiệm của tôi, cho nên sẽ không tránh khỏi những sai sót về mặt chuyên môn, vì vậy, tôi sẽ rất cảm kích nếu các bạn giúp tôi sửa những lỗi đó và góp phần giúp cho bài viết được tốt hơn. Thuật ngữ trong .NET Reversing tập trung chủ yếu ở các kiến thức và khái niệm nằm trong lập trình .NET, bởi vì khi thực hiện Reverse Engineering .NET thì chúng ta có thể tiếp xúc với các code gần code gốc của chương trình , vì vậy kiến thức về lập trình .NET rất hữu ích trong quá trình Reverse Engineering .NET để đọc và hiểu được hoạt động của code, biết càng nhiều thì càng khiến việc Reverse Engineering .NET trở nên dễ dàng hơn Bên cạnh các thuật ngữ thường thấy trong Reverse Engineering PE file cổ điển, Reverse Engineering .Net còn có thêm một vài thuật ngữ mới sau: Assembly: Hay có tên đầy đủ là .NET Assembly, đây không phải là tên ngôn ngữ bậc thấp (Assembly). Assembly trong .NET để chỉ một thực thể (1 file nào đó) được viết bằng .NET đã được biên dịch, và hoạt động dựa trên .NET Framework ‘Assembly” dịch nôm na là “lắp ghép, kết hợp”, thì 1 file trong .NET cũng là tập hợp của các method, class và các phần resource cũng như references + các thông tin kèm theo. Khi nhắc đến Assembly trong .NET thì có nghĩa là người viết đang muốn nói đến file .NET đó IL; viết tắt của Intermediate language, là 1 loại ngôn ngữ làm nhiệm vụ trung gian giao tiếp của code .NET và jit compiler (sẽ nói đến khái niệm này sau). Các chương trình .NET sau khi được biên dịch, sẽ không chứa mã máy giống như các chương trình viết bằng ngôn ngữ bậc cao khác mà sẽ chứa các bytecode của IL code. Dạng biểu diễn của IL code MSIL: Microsoft intermediate language, tên khác của IL CIL: Common Intermediate Language, cũng giống như MSIL và IL
  • 2. Trang 2 Native Application: Native có nghĩa là “tự nhiên, nguyên thủy”, Thuật ngữ này dùng để chỉ các chương trình không viết bằng .NET - không dựa trên .NET. Các chương trình được viết bằng C/C++, Delphi, vb, asm,… được gọi là những Native Application, để phân biệt với các .NET Application Bênh cạnh Native Application còn có thêm 2 thuật ngữ khác, đó là: - Managed: Các chương trình viết bằng .NET và khi chạy, được quản lý (managed) bởi .NET Framework và CLR (Sẽ nói đến sau). Vì vậy, khi nhìn thấy “managed application” cũng có nghĩa là chương trình .NET - Unmanaged: Tên gọi khác của native Application, bởi vì chúng không được quản lý bởi .NET framework và CLR. Vì vậy khi nhìn thấy “unmanaged application” cũng có nghĩa là đang nói đến các native Application. Các thuật ngữ “Managed” và “Unmanaged” được tạo nên chủ yếu dựa vào hoạt động quản lý và cấp phát bộ nhớ của chương trình (memory management). Trong khi các chương trình .NET được quản lý bộ nhớ bỏi 1 Garbage collector, thì các native application thường không sử dụng garbage collector của CLR đó. Mixed mode: Đây là thuật ngữ được sử dụng khi nói đến 1 chương trình có sử dụng các kĩ thuật code của .NET và cả code của các ngôn ngữ khác không dựa trên .NET Decompile/ Disassemble; Quá trình dịch ngược một chương trình .NET, lấy các bytecode có trong chương trình, chuyển chúng về IL code (dạng có thể đọc được) và các loại ngôn ngữ bậc cao khác. Sử dụng IDA để decompile một chương trình .NET về dạng IL code Obfuscate/obfuscator : là “làm rối”, thuật ngữ này dùng để chỉ phương pháp được sử dụng để làm rối toàn bộ mã nguồn của chương trình, khiến cho việc dịch ngược và hiểu được code trở nên khó khăn hơn. Obfuscator là thuật ngữ để chỉ chung các chương trình giúp người dùng làm rối code. Obfuscate giúp bảo vệ chương trình, che giấu code thật. Tên của một vài Obfuscator: SmartAssembly, ILProtector, .NET Reactor, Confuser, Dotfuscator, Rummage, Xenocode, CodeVeil,…
  • 3. Trang 3 Giao diện của Confuser – 1 Obfuscator phổ biến Code khi decompile của 1 chương trình bị obfuscate
  • 4. Trang 4 Deobfuscate/Deobfuscator: Thêm “De-“ ở đằng trước mang ý nghĩa ngược lại. Vậy nên debofuscate là thuật ngữ dùng để chỉ các phương pháp được sử dụng để loại bỏ quá trình obfuscate đã được sử dụng lên chương trình cần nghiên cứu, giúp chuyển code về code gốc, hoặc một kiểu code mà người ta có thể đọc hiểu dễ dàng hơn. Deobfuscator là thuật ngữ để chỉ chung các chương trình giúp người dùng làm việc đó. Pack/Packer/Unpack/Unpacker: “Pack” là phương pháp sử dụng các thuật toán để nén một chương trình (hay 1 thư viện, dữ liệu…) lại. Trong .NET thì pack được sử dụng như một phương pháp bảo vệ chương trình để tránh bị dịch ngược và xem mã nguồn. Chương trình gốc thường thường sẽ được nén lại (có thể kèm theo mã hóa) và được cất trong code của 1 chương trình do các packer (các chương trình thực viện việc pack) tạo ra gọi là 1 loader. Khi chạy, loader sẽ tiến hành load, giải nén (hoặc giải mã nếu bị mã hóa) chương trình gốc ra trên memory và thực thi chương trình gốc ngay trên đó. Unpack là quá trình sử dụng các phương pháp để loại bỏ việc pack và tìm lại chương trình gốc để có thể dịch ngược và xem code. Unpacker là các chương trình được viết ra để thực hiện việc unpack tự động. Một vài packer phổ biến trong .NET thường gặp là : .NETZ, BoxedApp (có thể pack cả native app), MPRESS (có thể pack cả native app), rpx, ExePack.NET,… Giao diện dòng lệnh của .NETZ Packer khi đang chạy CLR: Viết tắt của Common Language Runtime, là môi trường để quản lý việc vận hành các ứng dụng viết bằng .NET, bắt đầu từ việc khởi chạy chương trình, biên dịch tức thời (JIT) , quản lý bộ nhớ, kiểm soát exception và type safety. Các chương trình .NET khi hoạt động đều được đặt trong sự quản lý của CLR. JIT Compiler: JIT viết tắt của Just-in-time (vừa kịp lúc). Đây là chương trình có tính năng tiếp nhận các IL code có trong chương trình .NET và biên dịch chúng thành mã máy, sau đó giao cho CPU thực thi. Như đã nói ở trên, các chương trình viết bằng .NET không được biên dịch ngay ra mã máy mà sẽ được chuyển thành IL code, vậy nên JIT Compiler rất quan trọng vì nó đảm bảo các chương trình .NET được biên dịch thành mã máy, như thé mới có thể chạy được. Nếu không có jIT Compiler, các chương trình .NET không thể hoạt động. Có thể nhìn ảnh sau để hiểu cách 1 chương trình .NET hoạt động như thế nào: Sơ đồ cơ chế hoạt động của 1 chương trình .NET
  • 5. Trang 5 Scanner/Detector: Các chương trình làm nhiệm vụ phân tích tổng quan chương trình để cho biết được chương trình có được bảo vệ hay không, và bảo vệ bằng obfuscator nào. Các chương trình kiểu này rất quan trọng, cho biết những thông tin hữu ích khi phải phân tích các chương trình bị obfuscate. Biết được cơ chế bảo vệ rồi thì mới có phương pháp để vượt qua. Giao diện của 1 Scanner/Detector tên là ExeinfoPE đang scan 1 chương trình .NET Metadata: dịch theo nghĩa đen là “siêu dữ liệu”. Thuật ngữ này được dùng để chỉ về phần dữ liệu có tổ chức và cấu trúc cao nằm trong 1 chương trình .NET sau khi được biên dịch từ mã nguồn. Trong metadata lưu trữ rất nhiều thứ: Thông số, cấu hình của chương trình, cấu trúc và thuộc tính của các thành phần có trong chương trình, IL Code và các resource của chương trình cũng được lưu ở đây, và những thông tin khác nữa. Đọc thêm bài viết về cấu trúc của file .NET để hiểu về metadata và cách tổ chức, lưu trữ dữ liệu của nó. Metadata nhìn từ trong CFF Explorer
  • 6. Trang 6 Token: Tên đầy đủ là Metadata token, là một giá trị có kích thước 4byte, để chỉ đến phần dữ liệu tương ứng được lưu trữ trong metadata. Đọc thêm bài viết về cấu trúc file .NET. Metadata token hiển thị trong 1 decompiler .NET Reflector: Tên của một trình dịch ngược rất rổi tiếng dảnh riêng cho các chương trình .NET. Có thể đọc thêm về chương trình này tại loạt bài viết “Các công cụ cần thiết cho quá trình Reverse Engineering .NET” đăng trên blog cá nhân của tôi. Giao diện của .NET Reflector
  • 7. Trang 7 Reflexil: Một plugin quan trọng của .NET Reflector dùng để xem, chỉnh sửa IL code ngay bên trong .NET Reflector và có thể lưu lại những chỉnh sửa này. Đây là một plugin rất quan trọng và vô cùng cần thiết khi sử dụng .NET Reflector. Khung hiển thị của Reflexil bên trong .NET Reflector ILSpy: Một decompiler mã nguồn mở. Có thể đọc thêm thông tin từ loạt bài viết “Các công cụ cần thiết cho quá trình Reverse Engineering .NET” được đăng trên blog cá nhân của tôi. Giao diện của ILSpy
  • 8. Trang 8 De4dot: Tên của 1 chương trình deobfuscator rất nổi tiếng dảnh riêng cho .NET. Có thể đọc thêm về chương trình này tại loạt bài viêt “Các công cụ cần thiết cho quá trình Reverse Engineering .NET” đăng trên blog cá nhân của tôi. Giao diện dòng lệnh của de4dot Mono.Cecil: Mono.Cecil là một thư viện mã nguồn mở, cung cấp các phương pháp để thao tác với các chương trình viết bằng .NET. Với Mono.Cecil, chúng ta có thể thao tác, chỉnh sửa mọi thông tin lưu trữ trong 1 chương trình .NET (từ các thuộc tính, đến cấu trúc chương trình và cả IL code). Vì đây chỉ là một thư viện, cho nên cần phải có kiến thức lập trình để xây dựng chương trình mới có thể sử dụng các tính năng được cung cấp bởi thư viện này. Dnlib: Một bộ thư viên tương tự với Mono.Cecil, được 0xd4d, tác giả của de4dot phát triển độc lập với Mono.Cecil, nhằm khắc phục các yếu điểm của Mono.Cecil. Các obfuscator/protector trước đây thường nhằm vào các yếu điểm của Mono.Cecil để tạo ra các phương pháp chống lại các chương trình dịch ngược có sử dụng Mono.Cecil. dnlib ra đời nhằm mục đích để vượt qua các cơ chế bảo vệ đó, được sử dụng đầu tiên trong chính de4dot, và hiện tại thư viện này đang được sử dụng rộng rãi hơn trong giới Reverser. DnSpy – Một decompiler biến thể của ILSpy, sử dụng dnlib thay vì Mono.Cecil
  • 9. Trang 9 CFF Explorer: Một chương trình hex editor, nhưng có khả năng đọc và chỉnh sửa thông tin của các chương trình viết bằng .NET. Có thể đọc thêm về chương trình này tại loạt bài viết “Các công cụ cần thiết cho quá trình Reverse Engineering .NET” đăng trên blog cá nhân của tôi. SAE: Tên viết tắt của SmartAssemblyExplorer, một chương trình decompiler cho .NET. Có thể tìm thêm thông tin về chương trình này trong loạt bài viêt “Các công cụ cần thiết cho quá trình Reverse Engineering .NET” đăng trên blog cá nhân của tôi.
  • 10. Trang 10 Khung hiển thị code của SAE khi đang dịch ngược 1 chương trình .NET (Bài viết đang trong giai đoạn hoàn thiện, nếu bạn cần nhiều thêm định nghĩa, khái niệm về các thuật ngữ khác, háy liên lác với tôi : [email protected] để cùng đóng góp và xây dựng tài liệu này trở nên đầy đủ hơn)