Reverse Engineering for beginers

Chương 1: Code Patterns

1.1. Phương pháp

Khi tác giả của cuốn sách này lần đầu học C sau đó là C++, anh ta viết các mảnh code nhỏ, biên dich chúng, rồi cố hiểu được output nó đưa ra. Có thể kĩ thuật này cũng giúp được những người khác.

Có những web site với nhiều trình biên dịch khác nhau, cho ta xem kết quả online như: https://godbolt.org/.

Thực hành

Khi học, tôi thường compile các functions nhỏ, và cố viết lại chúng bằng asm, cố gắng làm nó ngắn gọn hơn. Có thể nó không phù hợp trong thực tế, và không thể hiệu quả bằng các trình biên dịch hiện đại, nhưng nó lại giúp tôi hiểu hơn về asm

Optimization levels và debug information

Source code được compile bởi các trình biên dịch khác nhau với rất nhiều optimization levels. Một trình biên dịch điển hình sẽ có 3 tầng optimized. Có thể là không optimized, optimized cho tốc độ, hoặc optimized cho kích cỡ. Không optimized sẽ giúp chúng ta hiểu dễ hơn, optimized sẽ khó hơn cho RE.

Ngoài optimized level trình biên dịch có thể thêm vào các debug information, để dễ dàng cho việc debug. Một tính năng quan trọng của debug code là bao gồm các links giữa các dòng source code.

Reverse engineers sẽ phải chạm trán cả 2 loại trên. Cuốn sách sẽ cung cấp các ví dụ về cả 2 debug và release version.

1.2. Vài nền tảng