Áp dụng cách làm trứơc, đặt một breakpoints trên địa chỉ thoát khỏi vòng lặp và nhấn Shift+F9 để đeến địa chỉ vừa mới đặt breakpoints.. Chúng ta cũng lưu ý ghi chép lại địa chỉ trên, đây
Trang 2Áp dụng cách làm trứơc, đặt một breakpoints trên địa chỉ thoát khỏi vòng lặp và nhấn Shift+F9 để đeến địa chỉ vừa mới đặt breakpoints
Chúng ta cũng lưu ý ghi chép lại địa chỉ trên, đây là nơi trỏ đến đoạn mã của chúng
ta
END OF THE LOOP #3 (redirection #3): 0x004EB32D
ORIGINAL INSTRUCTION: JMP 0x004EB373
Tiếp tục nhìn xem tại 004EB4E1 vẫn chưa thấy xuất hiện ta tiếp tục thử lửa
Ta có một vòng lặp khác nữa
Trang 3Làm giống như trên F2 tại điểm kết thúc vòng lặp, cho shift+F9 tiếp tục lưu ý:
Trang 4END OF THE LOOP #4 (redirection #4): 0x004EB410
ORIGINAL INSTRUCTION: 0x004EB427
Cuối cùng rồi cũng tới 004EB4E1 xuất hiện lời gọi hàm VirtualAlloc API
Được gồi,tại đây chúng ta làam bước này:
1 Chúng ta ở tại vị trí Entrypoint của trình packer
2 Vòng lặp decryption thứ 1 thực thi, con trỏ thoát khỏi vòng lặp ở
004EB1AA
3 Vòng lặp decryption thứ 2 thực thi, con trỏ thoát khỏi vòng lặp ở 004EB267
4 Vòng lặp decryption thứ 3 thực thi, con trỏ thoát khỏi vòng lặp ở 004EB32D
5 Vòng lặp decryption thứ 4 thực thi, con trỏ thoát khỏi vòng lặp ở 004EB410
6 Chúng ta thấy sự xuất hiện củalời gọi hàm VirtualAlloc API xuất hiện ở 0x004EB4E1
Danh sách breakpoints:
Sau đó, chúng ta trace thì se gặp ời gọi hàm VirtualAlloc API
Trang 5Lệnh Push 0BA1000 trước lệnh RETN , điều này sẽ điều hướng chương trình nhảy tới vị trí mới được xác định Nhưng cũng có điểm thú vị khi ta nhìn lệnh PUSH
8000 bởi vì nó có thể recover trong EDI địa chỉ nền của vùng nhớ mới đã được định vị
TA có thể triển khai việc táai điều hướng đến đoạn mã patching của chúng ta bằng việc dùng những BYTE của lệnh PUSH 8000
ABSOLUTE ADDRESS (redirection #5): 0x004EB5E8
ORIGINAL INSTRUCTION: PUSH 8000 - > 0x68 0x00 0x80 0x00 0x00
Bây giờ từ đây tôi sẽ nói về offset với nền địa chỉ 00BA1000
Chúng ta bắt đầu ở trong đoạn mã Decompression đối với OEP
Trang 6Nhìn vào mã ở offset 0x002663, chúng ta thấy mã ở đây khá là khác biệt so với đoạn mã chúng ta thấy lúc bắt đầu của việc mô tả của chúng ta, vì chúng ta còn phải từng bứơc thông qua mọt vài lớp decompression khác trước khi đến đuợc đoạn mã unpack tất cả mã chương trình đích
Ta tiếp tục mô tả mã ở địa chỉ0x00BA1007, chúng ta có một lời gọi hàm
VirtualAlloc khác trên 0x00BA10C4, sau đó chúng ta sẽ có một vài vòng lặp ghi
mà decrypt vào đoạn mã khác
Đến đây, ta sắp phải đến một offset mới 0x0031303D
Trang 7Tại đây ta có thể trỏ đến đoạn mã patching của ta
OFFSET (redirection #6): 0x00310F3
ORIGINAL INSTRUCTION: PUSH 8000 - > 0x68 0x00 0x80 0x00 0x00
Nhìn một chút qua offset 0x002663 trong cửa sổ dump của Olly xem coi có được decrypt chưa, tất nhiên là chưa, ta tiếp tục thui