Rồi các bạn nhìn xuống một chút, chúng ta sẽ thấy 00416245 JMP EDI, Hãy đến 00416245, àh các bạn nên đặt Hardware breakpoints executation đừng nên đặt F2 tại địa chỉ trên, và nhớ xóa các
Trang 1Rồi các bạn nhìn xuống một chút, chúng ta sẽ thấy 00416245 JMP EDI, Hãy đến
00416245, àh các bạn nên đặt Hardware breakpoints executation (đừng nên đặt F2 tại địa chỉ trên), và nhớ xóa các breakpoints khi mà trace xong, ta sẽ đến đoạn mã sau:
Các bác nên F8 từng cái thì mới có được hình dạng như trên Ta ngưng ở
00378353:
JMP 0040400F - lệnh nhảy tới FALSE OEP
Ừm F7, ta tới đây:
Trang 2Nếu có ai đó chưa hiện đúng như vậy thì hãy dùng chức năng plugin Analyze this! Của OLLY
OEP thì tại 00404000, những chỉ lệnh trên là những junk code, Chúng sẽ làm rối
mù chúng ta Bây giờ ta tiến hành DUMP (trong crackme này thì crackme vẫn làm việc tốt)
3 IMPORTS
Các bạn hãy tìm chuỗi nhị phân sau: FF 25, rồi chọn đại một lệnh nhảy, Enter, các bạn sẽ thây như sau:
Trang 3Các lệnh nhảy lúc này sẽ nhảy đến những thủ tục của Obsidium.Ở đó, Obsidium không dùng hàm GetProcAddress mà thay vào đó, những imports được lưu trữ như:
- dll image base (handle),
- some flag (FFFFFFFF is good one),
- import code (which is 2,4,1,80, or 40),
- first character of import,
- CRC32 hash
Obsidium sẽ lấy thông tin mà chương trình cần dùng dll, sau đó nó sẽ dùng một vài
kỹ thuật kiểm tra bên trong (đây có phải là import cần hay không,…), sau đó nó sẽ tìm kiếm trong export Dll mà ký hiệu đầu tiên sẽ phù hợp với một cái gì đó trong bảng “obsidium import info", sau đó nó sẽ tìm kiếm cho cái import đó dựa vào CRC32 hash bằng với một giá trị trong bảng này
Giờ thì xem ví dụ của chúng ta:
Trang 4Ta hãy xem phân tích sau:
003E00B4 60 PUSHAD
003E00B5 66:BE 25A2 MOV SI,0A225 < - Đây là 2giá trị mà chứa thông
003E00B9 B7 67 MOV BH,67 < -/ tin về Dll
003E00BB -E9 695389FF JMP 00395429
Sau đó, ta enter vào địa chỉ 003E00BB:
Xem:
00375467 CMP DWORD PTR DS[EDI+EAX+4] kiểm tra, nếu là DLL được load, giá trị là FFFFFFFF Tôi gọi đây là [1]
00375477 MOVZX EAX,WORD PTR DS:[ESI] < - Nó sẽ lấy từ bảng
“import code” (2,4,1,80,40) [2]
003754AA CALL DWORD PTR DS:[EBX+50] < - Nếu "import code" is 2,
nó tìm kiếm import đó ở đây
TEST EAX,EAX < - [3] EAX sẽ là API value [3]
Hầu hết các import thì ở trong “code 2” loại
Trang 5Tôi đã dùng script để chỉnh sửa imports Đầu tiên, ta xem xét bảng Imports trong file gốc :
Giờ thì ta tiến hành fix Imports bằng tay heng
Đặt “New Origin here” tại vị trí đầu tiên 003E0000, sau đó F7 đến
003E0007 Jmp 00375421
Rồi F7 tới 00375421, rồi đặt điểm ngắt tại 3 vị trí [1], [2],[3]:
Ta shift+F9, dừng tại 003754AD TEST EAX,EAX để xem API, rồi điền vào bảng IAT,lần lượt như sau: