Hãy tới vị trí 00000E00 trong U Tại đây, ta đánh vào 0xE00 để tới OFFSET 0xE00 Những giá trị trong bảng này là giống với bảng trong O, có điều các bạn nhớ lấy địa chỉ trong O trừ đi 2200 để ra được OFFSET tương ứng trong U Ừm, chúng ta đang ở một nơi rất đẹp đẽ: Xem dòng đầu: Đây là IMAGE IMPORT DESCRIPTOR. (IID) Pic nói rằng: có 5 DWORD . DWORD đầu tiên là OriginalFirstThunk. Cái DWORD đầu tiên không quan trọng lắm (người dịch nói thêm : trình LOADER PE FILE sẽ dùng thông tin trong đây để tạp bảng IAT) , chúng tasẽ tìm hiểu sau. DWORD thứ hai và thứ 3 là TimeDateStamp và ForwarderChain, đối với cracking, thì không quan trọng lắm (đối với virus cũng khá quan trọng). Bức tranh này bảo: Đây là vị trí tên của DLL đầu tiên: 00003290 - > 00403290 Tranh này nói rằng 00403290 chứa tên “USER32.DLL” và kế là ZERO BYTES kết thúc tên file DLL. Con trỏ cuối cùng của dòng đầu tiên của IMAGE IMPORT DESCRIPTOR là FIRST THUNK và các bạn đừng nhầm lẫn với OriginalFirstThunk, con trỏ này là nơi mà các API của các DLL đầu tiên, trong trường hợp này là USER32.dll. Hình này thì thầm: DWORD thứ 5 là một con trỏ trỏ tới nơi bắt đầu tên của API tương ứng với DLL. Có OFFSET 00003184 -> 00403184 trong O Hãy hiểu đây là nơi bắt đầu của bảng và là nơi bắt đầu của những APIs tương ứng vớiUSER32.DLL. Giờ thì nhìn vào những con tỏ trên dòng thứ hai: Đây là dòng thứ 2 của cấu trúc IMAGE IMPORT DESCRIPTOR mà tường ứng với DLL thứ hai. Nhìn vào con trỏ thứ tư 0000329B, đây chính là OFFSET tới tên của DLL thứ 2. Còn con trỏ thứ 5 chính là nơi chứa các APIS của KERNEL32.DLL tương ứng 0040321C Giờ ta nhìn sang U và sẽ thấy một vài khác biệt: Vị trí đầu tiên của cấu trúc IMAGE IMPORT DESCRIPTOR là 00403000 trong O, còn trong U là 00000E00, và ta thấy những con trỏ tương ứng đối với O: Những giá trị con trỏ này thì bằng với những giá trị trong O. Hãy nhìn xem trong 00003184 có gì hấp dẫn. Quên mất, các bác nhớ từ 00003184 - 2200 = F84 để ra được OFFSET trên FILE trên đĩa heng (có ai thắc mắc thì cứ hỏi tôi người dịch). Bức tranh nói: Ở đây trong O là danh sách danh mục của APIS. Hãy so sánh: Hãy xem có gì khác biệt. Trong U, những con trỏ trên chính là OFFSET tương ứng trong O mà trỏ đến vị trí chứa tên của các APIs tương tứng. Giờ thì đến 000032CC trong U và tới 004032CC trong O Pics nói: đây là nơi ta thấy tên của API KillTimer. Nói như vầy nhé: Khi chương trình bắt đầu thì nó sẽ tìm kiếm tới những con trỏ trỏ đến tên của API, và dùng hàm GetProcAddress, nó sẽ tìm được vị trí của các APIs còn lại, và lữ trữ vào trong điểm nhập đầu tiên trong O. Nó là 77D1418A tường ứng với tên APIs KillTimer. Làm thế nào mà tôi biết điều này? Hãy click phải chuột trên Value và chọn FIND REFERENCES . DESCRIPTOR là 00 403 000 trong O, còn trong U là 00 000 E 00, và ta thấy những con trỏ tương ứng đối với O: Những giá trị con trỏ này thì bằng với những giá trị trong O. Hãy nhìn xem trong 00 00 318 4 có. vị trí 00 000 E 00 trong U Tại đây, ta đánh vào 0xE 00 để tới OFFSET 0xE 00 Những giá trị trong bảng này là giống với bảng trong O, có điều các bạn nhớ lấy địa chỉ trong O trừ đi 2 200 để ra. quan trọng). Bức tranh này bảo: Đây là vị trí tên của DLL đầu tiên: 00 003 2 90 - > 00 403 2 90 Tranh này nói rằng 00 403 2 90 chứa tên “USER32.DLL” và kế là ZERO BYTES kết thúc tên file DLL. Con