Mở đầu
Xin chào các hacker, là mình Syaoren đây! Bài viết hôm nay sẽ không tập trung vào bất kỳ kỹ thuật nào cả, thay vào đó mình muốn giới thiệu về hai khái niệm quan trọng là Import Address Table (IAT) và Export Address Table (EAT). Lý do cho việc thực hiện bài viết này là vì IAT và EAT là những khái niệm quan trọng cần phải nắm bắt để hiểu rõ các kỹ thuật nâng cao mà mình sẽ giới thiệu trong các bài viết sau. Chính vì vậy, mình quyết định dành riêng một bài viết để giới thiệu về IAT và EAT. Bạn đọc cần phải có kiến thức về Portable Executable (PE) format trước khi đọc bài viết này, mình đã viết một bài về PE format tại đây, bạn có thể tham khảo nó trước khi bắt đầu. Không vòng vo nữa, vào vấn đề chính thôi! :smiling_imp:
Import Address Table (IAT)
Khi nhìn vào hình dưới đây, ta có thể dễ dàng nhận thấy rằng IAT được sử dụng để làm gì rồi đúng không? Yah, nó được sử dụng để lưu trữ địa chỉ của các API mà chương trình gọi trong lúc thực thi. API trong Windows thật sự đóng vai trò rất quan trọng, nhờ có nó mà chương trình mới có thể truy cập vào các tài nguyên của hệ thống một cách dễ dàng. Vì lý do đó, địa chỉ của API được sắp xếp trong một bảng có cấu trúc là IAT, điều này giúp quản lý thuận tiện hơn so với việc lưu trữ các địa chỉ này một cách rời rạc. :dog:
Ngoài ra, như ta đã biết, các API mà chương trình sử dụng có thể được định nghĩa trong nhiều DLL khác nhau. Cho nên, để quản lý các địa chỉ một cách hiệu quả, chương trình sẽ tạo một IAT riêng cho mỗi DLL mà nó import vào. Ví dụ, chương trình của ta sẽ có một IAT dành riêng cho kernel32.dll và một IAT riêng cho ntdll.dll.
image