Xoá HardWare Breakpoint bằng cách vào menu Debug -> Hardware Breakpoints Nhấn nút Delete 1 để xoá Hardware Breakpoints.. Chúng ta sẽ trace để tìm ra Magic Jump.. Các bạn chú ý những cái
Trang 1Nhấn F9 Chương trình dừng ở đây
Nhấn F9 lần nữa Chương trình dừng ở 00AC430A
Ở trên một dòng chúng ta thấy giá trị của ECX được đưa vào IAT
Xoá HardWare Breakpoint bằng cách vào menu Debug -> Hardware Breakpoints
Nhấn nút Delete 1 để xoá Hardware Breakpoints Nhấn OK
Chúng ta sẽ trace để tìm ra Magic Jump Trace với F8 Các bạn chú ý những cái
JE, JNZ Các bạn nên ghi ra giấy với những cái JE, JNZ đó nó nhảy hay không nhảy
Trang 200AC4059 JE 00AC431E Không nhảy
00AC4080 JNZ SHORT 00AC40C6 Nhảy
00AC40D4 JNZ 00AC4164 Nhảy
00AC408E JE SHORT 00AC4201 Không nhảy
00AC41B7 JE SHORT 00AC4201 Không nhảy
00AC41EC JNZ SHORT 00AC41FF Nhảy
Tại đây chúng ta sẽ rơi vào vòng lặp Đặt Breakpoint tại 00AC4201 và nhấn F9 để thoát khỏi vòng lặp Chúng ta sẽ ở 00AC4201
Tiếp tục trace với F8 và ghi chú tiếp
00AC4208 JNZ SHORT 00AC4249 NHẢY
00AC4250 JNZ 00AC42EE NHẢY
Trace tới 00AC430A thì dừng Bắt đầu từ đây các bạn trace với F8 (không cần ghi giấy) và so sánh các lệnh nhảy với những điều chúng ta ghi ở trên coi có gì thay đổi không Ở đây tôi ghi lại cho dễ theo dõi
00AC4059 JE 00AC431E Không nhảy
00AC4080 JNZ SHORT 00AC40C6 Nhảy
00AC40D4 JNZ 00AC4164 Nhảy
00AC408E JE SHORT 00AC4201 Không nhảy
00AC41B7 JE SHORT 00AC4201 Không nhảy
00AC41EC JNZ SHORT 00AC41FF Nhảy
Cũng đặt breakpoint tại 00AC4201 và nhấn F9 để thoát khỏi vòng lặp Trace tiếp
00AC4208 JNZ SHORT 00AC4249 KHÔNG NHẢY >>>>>> Chú ý : Đây khác với ở trên
Vậy 00AC4208 là Magic Jump Chúng ta sẽ sửa
00AC4208 JNZ SHORT 00AC4249
thành
00AC4208 NOP
V Fix Magic Jump, Dump và Fix IAT :
Trang 3Nhấn Ctrl-F2 để khởi động lại crackme.exe Trong DUMP Window nhấn Ctrl-G Nhập vào địa chỉ bắt đầu RVA : 0045E118, đánh dấu 4 bytes và đặt Hardware Breakpoint như trong hình
Nhấn F9 Chương trình dừng ở đây
F9 lần nữa dừng ở đây
Tới đây chúng ta sẽ sửa Magic Jump Nhấn Ctrl-G Nhập vào địa chỉ Magic Jump
Nhấn OK Sửa 00AC4208 thành NOP NOP Chú ý 2 bytes tô đỏ
Nhấn F9 và chương trình crash ? ;)
Trang 4Chúng ta mong đợi chương trình chạy bình thường với IAT còn nguyên vẹn Nhưng chương trình lại bị crash Vậy làm sao dump và fix IAT ? Nói như bài hát của nhạc sĩ Tuấn Khanh là : Chuyện nhỏ ?
Các bạn chú ý mặc dù chương trình bị crash nhưng IAT của chúng ta vẫn còn nguyên vẹn
Các bạn mở một OllyDbg khác lên (gọi là Olly2 và cái chúng ta mở trước là Olly1)
và trong Olly2 mở file crackme.exe Đặt breakpoint memory on access tại section CODE để tới OEP (nếu không hiểu thì xem lại ở trên) Nhấn F9 Trong Olly2 chúng ta sẽ ở tại OEP là 0045A15C Bây giờ chúng ta sẽ copy nguyên phần IAT trong Olly1 đem sang Olly2
Trong Olly1 đánh dấu nguyên khối từ điểm bắt đầu RVA cho đến điểm kết thúc RVA (từ 0045E118 đến 0045E72C)
Nhấn phải chuột chọn Binary -> Binary copy
Trang 5Trong Olly2 cũng đánh dấu nguyên khối từ 0045E118 đến 0045E72C Nhấn phải chuột chọn Binary -> Binary Paste
Trang 6Đóng Olly1 lại Dùng LordPE dump file crackme.exe thành dump.exe
Mở Imprec lên Chọn crackme.exe Điền vào các thông số như hình sau :
Nhấn nút Get Imports Vẫn còn vài Invalid Thunks Nhấn nút Show Invalid Nhấn phải chuột chọn Cut Thunks
Trang 7Bây giờ IAT chúng ta đã đầy đủ Nhấn nút Fix Dump chọn file dump.exe File dump_.exe sẽ được tạo ra Chạy thử file dump_.exe Good!
Dùng PEID xem lại
Bonus) Enable Button Check :