cho đên khi bạn gặp ASPROTECT và ARMADILLO, cái này tôi không giải quyết đâu, các bạn tiếp tục nghiên cứu thêm. Chúng ta sẽ làm việc trên một UPX hay những PACKER mà có TABLE với tất cả các API, mà đã bị chỉnh sửa bởi phương pháp có một “lệnh nhảy ma thuật” (MAGIC JUMP) hoặc bởi chính bạn thao tác trực tiếp. Đồng nghĩa với việc những điểm nhập tại bảng sẽ không trỏ đến trực tiếp vị trí của các hàm APIs. Ở phần 2, chúng ta đã dump một tiến trình mà không có TABLE và chúng ta đã làm cho OLLY đến được đúng OEP. Giờ thì chúng ta sẽ tạo ra một trình LOADER đối TABLE mà khá là đơn giản, Chúng ta hãy mở 2 OLLY heng: - Một OLLY với file chưa được unpack, và bạn hãy cho OLLY đến OEP heng (gọi tắt O1). - Một OLLY với file đã được dump và chưa có TABLE cũng đang ở vị trí OEP (Gọi tắt O2). Ừm ,hãy xem thử cái nì là gì. (Trong O2). Đây là bởi vì ENTRY POINT ở bên ngoài section mã, đó là section thứ 3 vị trí mà packer bắt đầu. Để thay đổi, đầu tiên chúng ta mở O2 lên, và khi nó ngưng ở OEP bạn click chuột phải trong cửa sổ DUMP chọn GOTO EXPRESSION rồi đánh vào 400000. Làm như vậy ta sẽ thấy được HEADER của file. Và sau đó chọn như sau: bạn sẽ thấy chi tiết cấu trúc PE HEADER hơn Và hãy đến 00401000, và nhìn cái “lu” này: Bạn hãy thay đổi giá trị BASEOFCODE tại vị trí 0040012C từ 9000 thành 1000 Click chuột phải trên 0040012c và chọn MODIFY INTEGER, đặt lại là 1000 Sau đó, bạn hãy save lại, làm như sau: click phải trên vị trí vừa mới chỉnh sửa và chọn COPY TO EXECUTABLE FILE: Và trong cửa sổ mới xuất hiện. bạn click phải chuột rồi chọn SAVE FILE. Chọn File mới heng, lưu giữ file dump cũ làm kỷ niệm. Rồi, giờ thì bạn hãy mở OLLY với file dump mới vừa chỉnh sửa. Lúc này sẽ không còn hiện thông báo nhảm nhí trên nữa. Như vậy, có thể nói thông báo trên là nhấn mạnh cho chúng ta biết rằng ENTRY POINT được đặt giá trị nằm ngoài section mã, vậy lúc nào mà bạn thấy có thông báo trên thì hãy làm các bước như tôi vừa trình bày heng. Hãy tiếp tục heng, đoạn đường còn dài lém. Giờ thì mở O1, Tại ENTRY POINT, bạn sử dụng một cái SCRIPT, để đỡ phức tạp tôi sẽ giải thích SCRIPT này ở phần thứ 4. Để dùng SCRIPT này, bạn nên có ít nhất là OLLYSCRIPT 0.92 và ollydbg 1.10. Cái Script này sẽ tạo ra một danh sách của tất cả các APIs, tên DLL và con trỏ địa chỉ APIs, và nó sẽ đặt tương ứng sau tên DLL sẽ là tên APIs của DLL đó. Vd: USER32.dll.KillTimer. Và sẽ đặt cặp giá trị này vào một vị trí nào đó trong bộ nhớ của tiến trình với O1 . Sau đó các bạn sẽ tự viết một loader, loader này đầu tiên sẽ load tên DLL tương ứng, rồi sẽ lấy giá trị địa chỉ của API đặt vào bên trong IAT từng cái một. Với loader như vậy, bạn sẽ có thể thêm được các DLL, cũng như là thêm được hàm APIs vào trong bảng IAT, không những vậy, mà bạn có thể thêm bất kỳ cái gì vào chương trình mà bạn muốn. Giờ, bạn hãy mở O1 . Với OEP của nó. Lúc này, các bạn hãy tìm ra vị trí bắt đầu của bảng IAT ( IAT first )và điểm kết thúc của (IAT end). Bạn hãy làm như sau: Hãy Enter vào 00401002, ta sẽ tới đây: Chúng ta sẽ thấy rất nhiều lệnh nhảy ới các giá trị ở trong bảng IAT; chọn một lệnh nhảy bất kỳ trên và click phải chuột chọn FOLLOW IN DUMP MEMORY ADDRESS rồi nhìn qua của sổ DUMP, ta sẽ thấy IAT. Giờ thì cuộn màn hình xuống, ta sẻ thấy nơi bắt đầu IAT: Nó bắt đầu ở 403184 (Có thể máy bạn sẽ khác), rồi cuộn màn hình lên để thấy IAT end: 40328C : IAT END. Giờ thì hãy dùng tới script có sẵn: PLUGIN OLLYSCRIPT RUN SCRIPT , ta có cửa sổ: Rồi open TABLAS 1.txt. Rồi sau đó, ta điền lần lượt các giá trị IAT first và IAT End. Đánh vào giá trị của IAT first như hình Rồi OK. Nó yêu cầu đánh vào IAT End Đánh vào 0040328C. Rổi OK . Bạn hãy thay đổi giá trị BASEOFCODE tại vị trí 00 40 012 C từ 900 0 thành 10 00 Click chuột phải trên 00 40 012 c và chọn MODIFY INTEGER, đặt lại là 10 00 Sau đó, bạn hãy save lại, làm như sau: click. EXPRESSION rồi đánh vào 400 000 . Làm như vậy ta sẽ thấy được HEADER của file. Và sau đó chọn như sau: bạn sẽ thấy chi tiết cấu trúc PE HEADER hơn Và hãy đến 00 4 01 0 00 , và nhìn cái “lu” này:. bạn hãy mở O1 . Với OEP của nó. Lúc này, các bạn hãy tìm ra vị trí bắt đầu của bảng IAT ( IAT first )và điểm kết thúc của (IAT end). Bạn hãy làm như sau: Hãy Enter vào 00 4 01 0 02 , ta sẽ tới