F9 để chạy và Break tại đó ,bỏ BP đi .Tiếp tục Ctrl-F8 để tìm và Olly tự Break do gặp Exception: Nhấn nút “-“ để quay lại bước trước tìm hàm CALL mới nhất vừa đi vào : Vậy chui vào đây là phát sinh lỗi ,ta enter vào đầu hàm ,set 1 BP .Ctrl-F2 restart lại ,F9 để Break tại BP vừa set : Xóa BP đi ,làm tương tự ,tìm ra hàm CALL gây lỗi ,set BP ngay nó ,Ctrl-F2 ,F9 và Break : Hàm này CALL vào 1 địa chỉ là 433B6E ,địa chỉ này nằm tại section : Đây là section của cu Mole ,vậy là sau khi Dump file, ta vẫn còn lệ thuộc vào Mole ,tức unpack vẫn chưa hoàn thành .Tiếp tục làm tương tự như trên ,và tìm ra chính xác nơi gây lỗi tại đây : Set BP ngay lệnh PUSH DWORD PTR DS:[EAX+4] .Ctrl-F2 ,F9 và Break : Dòm xuống giá trị tại [EAX+4] lúc này: Khục khục, tại sao lại đi làm việc với địa chỉ D41E90 vốn ko tồn tại trong memory lúc này : Rõ ràng ko tồn tại đúng ko ? Đó là lý do tại sao lại có thông báo về exception này : Giữ nguyên hiện trường ,nhớ lại em Olly (1) còn mở ko ,quay qua nó .Goto tới cùng địa chỉ lệnh PUSH trên tại 43A3EF ,set 1 BP, F9 và Break : Y chang ,ko khác gì cả (nhớ rằng địa chỉ D41E90 này trên máy của bạn sẽ khác nhé ,nó là vùng section ko có offset cố định) .Tuy nhiên ở Olly (1) ,vùng địa chỉ này lại tồn tại : Đó là do Packer Mole tạo ra trong quá trình unpack code. Còn ở file fix dump thì tất nhiên sẽ ko có .Thường gặp trường hợp này ,ta hay dump cả section tìm được bên Olly(1) rồi add vào file fix dump. Nhưng sau khi kiểm tra thì trick thấy ko cần làm thế .Chỉ đơn giản sửa giá trị lại cho khớp là được .Quay lại của sổ code của Olly(1) ,Follow value in Dump giá trị tại D41E90 xem giá trị tại đó là gì : Àh há : Nhớ lấy DWORD thứ 2 tại đây :FF FF FF FF .Quay qua Olly(2) , Follow address in Dump : Ta thấy : Vậy là DWORD 00D41E90 được lưu tại địa chỉ 433714 .Để ko phải truy xuất địa chỉ ko có thật này ,ta sửa nó lại thành địa chỉ nằm trong file ,sau đó paste DWORD thứ 2 tìm thấy ở Olly (1) vào là okie .Giờ tìm 1 nơi trống đủ chứa 1 DWORD , thường section còn trống hay dùng trong các trường hợp này đã được ImportREC add vào khi fix IAT : Size trong memory của section này là 2000, và nó chỉ mới sử dụng : 469788 – 468000 = 1788 Byte . Thế là còn dư ra khá nhiều Byte cho chúng ta. Nhưng phải xét xem là các Byte trống kia là thật hay chỉ là ảo : Nhớ lại rằng Window quản lý vùng nhớ theo từng 1000h Byte. Nên đôi khi Size trong memory làm tròn lên còn size thật lại bé hơn .Mà nếu bạn Save file bằng Olly tại vùng nhớ ko tồn tại trong file thật thì sẽ bị báo lỗi : “Unable locate memory” ngay .Ở đây Size thật :Raw Offset là 2000 nên ta an tâm các Byte trống kia trong memory có thể sử dụng và lưu lại được . Quay lại cửa sổ dump từ memory map trên : . add vào khi fix IAT : Size trong memory của section này là 200 0, và nó chỉ mới sử dụng : 469788 – 46 800 0 = 17 88 Byte . Thế là còn dư ra khá nhiều Byte cho chúng ta. Nhưng phải. D41E 90 xem giá trị tại đó là gì : Àh há : Nhớ lấy DWORD thứ 2 tại đây :FF FF FF FF .Quay qua Olly(2) , Follow address in Dump : Ta thấy : Vậy là DWORD 00 D41E 90. chỉ 433 714 .Để ko phải truy xuất địa chỉ ko có thật này ,ta sửa nó lại thành địa chỉ nằm trong file ,sau đó paste DWORD thứ 2 tìm thấy ở Olly (1) vào là okie .Giờ tìm 1 nơi trống đủ chứa 1 DWORD