File của chúng ta bắt đầu bằng PUSH 0 (6A 00). Chúng ta thấy dưới 00407085 một chút ở 00407088 có hai byte (6A 00). Đây chính là OEP của chúng ta. Nhấn Ctrl- G. Nhập vào 00407088. Nhấn OK. Bây giờ chúng ta sẽ dump file dùng OllyDump đặt tên là dump.exe. Giống hình sau : Bây giờ là lúc chú ng ta fix IAT . Nhấ n nút “*” chúng ta sẽ ở 00401029, cuộn màn hình xuống. Tại 0040110E chúng ta sẽ thấy các hàm gọi đến APIs. (Nếu các bạn không thấy, tại 0040110E nhấn Ctrl-A) PESpin đã xoá IAT và thay các lệnh JMP [XXXXXXXX] thành lệnh nhảy trực tiếp JMP YYYYYYYY. Vậy bây giờ làm thế nào để tìm APIs. Chúng ta sẽ trace từng API. Tại 0040110E nhấn phải chuột và chọn như trong hình. Chúng ta sẽ ở 0040110E. Bây giờ trace với F7 cho tới khi chúng ta vào địa chỉ có dạng 77XXXXXX. Trên máy tui, tui sẽ dừng ở 77E75CC2. Cuộn màn hình lên một chút xíu. Chúng ta thấy như sau : Chú ý là điểm bắt đầu API là 77E75CB5 (màu đỏ trong hình trên). Bây giờ nhấn phải chuột chọn như trong hình. Trong cửa sổ “All Names”. Nhấn phải chuột chọn như trong hình để sắp xếp các API theo thứ tự address cho dễ tìm kiếm. Bây giờ cuộn cửa sổ xuống phía dưới kiếm địa chỉ 77E75CB5. À, vậy là chúng ta biết được API này là ExitProcess trong Kernel32.dll. Đối với các API khác chúng ta cũng làm tương tự (00401114, 0040111A, ……, 00401156). Cũng chọn “New Origin Here” đối với các địa chỉ còn lại và trace bằng F7. Cuối cùng chúng ta có bảng tổng kết sau : 0040110E ExitProcess Kernel32.dll 00401114 GetModuleHandleA Kernel32.dll 0040111A BeginPaint User32.dll 00401120 DialogBoxParamA User32.dll 00401126 EndDialog User32.dll 0040112C EndPaint User32.dll 00401132 LoadBitmapA User32.dll 00401138 SendMessageA User32.dll 0040113E BitBlt Gdi32.dll 00401144 CreateCompatibleDC Gdi32.dll 0040114A DeleteDC Gdi32.dll 00401150 DeleteObject Gdi32.dll 00401156 SelectObject Gdi32.dll Bây giờ chúng ta sẽ kiếm một chỗ trống trong file dump.exe để chèn các API này vào. Dùng bất kỳ chương trình Hex Edit nào mở file dump.exe ra và kiếm chỗ trống (nhiều byte 00). Ở đây tui thấy 00403050 có nhiều chỗ trống. Chúng ta sẽ chèn các API vào chỗ đó. Chạy Imprec. Chọn đại bất cứ process nào cũng được. Ở đây tui chọn Notepad. Điền các thông số giống trong hình. Nhấn nút “Get Imports”. Chúng ta được : Bây giờ chúng ta sẽ điền các API vào. Nhấn đúp chuột vào dòng “rva:00003050 ptr:C13B0100”. Và điền API ExitProcess vào như trong hình : Ở rva 00003054 là hàm GetModuleHandleA. Ở rva 00003058 chúng ta sẽ cắt bỏ đi (do hết API trong kernel32.dll bằng cách nhấn phải chuột chọn “Cut Thunk(s)”) Làm tương tự cho các API còn lại (Ở 00003074 cắt bỏ). Các rva còn lại sau khi điền hết các API cũng cắt bỏ. Chúng ta được như sau : . Kernel32.dll 00 4 01 1 14 GetModuleHandleA Kernel32.dll 00 4 01 1 1A BeginPaint User32.dll 00 4 01 1 20 DialogBoxParamA User32.dll 00 4 01 1 26 EndDialog User32.dll 00 4 01 1 2C EndPaint User32.dll 00 4 01 1 32 LoadBitmapA. User32.dll 00 4 01 1 38 SendMessageA User32.dll 00 4 01 1 3E BitBlt Gdi32.dll 00 4 01 1 44 CreateCompatibleDC Gdi32.dll 00 4 01 1 4A DeleteDC Gdi32.dll 00 4 01 1 50 DeleteObject Gdi32.dll 00 4 01 1 56 SelectObject. làm tương tự (00 4 01 1 14, 00 4 01 1 1A, ……, 00 4 01 1 56). Cũng chọn “New Origin Here” đối với các địa chỉ còn lại và trace bằng F7. Cuối cùng chúng ta có bảng tổng kết sau : 00 4 01 1 0E ExitProcess