![]() |
| Practical Malware Analysis |
CHAPTER 6 - RECOGNIZING CODE CONTRUCTSIN ASEMBLY
Write up Lab6-1
Lab 6-1Trong lab này, bạn sẽ phân tích mã độc được tìm thấy trong tệp Lab06-01.exe.Câu hỏi1. Mã cấu trúc chính được tìm thấy trong chương trình con duy nhất được gọi bởi main là gì?2. Chương trình con ở 0x40105F là gì?3. Mục đích của chương trình này là gì?
1. What is the major construct code found in the only subroutine called by main?
(Mã cấu trúc chính được tìm thấy trong chương trình con duy nhất được gọi bởi main là gì?)
Đầu tiên, chúng ta hãy phân tích tĩnh nhanh tệp thực thi này bằng các kỹ thuật cơ bản.
Hãy xem tệp này có bị pack không với Exeinfor.
Từ Exeinfor cho biết tệp này không bị pack và được viết bằng ngôn ngữ Microsoft Virsual C++.
Tiếp theo xem các hàm được Import với công cụ PPEE (có rất nhiều công cụ như PE-bear, PeStudio, PPEE, PE Explorer, Dependency Walker, ...).
- GetACP - Lấy mã hóa trang mã của hệ thống hiện tại.
- GetCPinfo - Nhận thông tin về trang mã được chỉ định.
- GetCommandLineA - Lấy tham số đầu vào.
- Error 1.1: No Internet - Lỗi 1.1: Không có Internet.
- Success: Internet Connection - Thành công: Kết nối Internet.
Tiếp theo ta sẽ chuyển đến IDAPro để phân tích.
Hãy bắt đầu từ hàm main, nó có địa chỉ sub_401000.
Trong hàm main này có thể thấy có chương trình con được gọi là call sub_401000 (khung đỏ). Để xem chi tiết tham chiếu chéo của hàm sub_401000 double click vào hàm đó, IDA sẽ chuyển đến chi tiết hàm.
Nhấn phím 'space' để xem chế độ graph của hàm main.
sub_40105F proc near
arg_0= dword ptr 4
arg_4= dword ptr 8
push ebx ; Đừng lo lắng về điều này hay điều sau.
push esi
mov esi, offset File
push edi
push esi
call __stbuf ; Tham số đầu vào của __stbuf là tham số cuối cùng được đẩy vào
; Tức là phần mô tả tập tin ở trên
; Nếu tham số đầu vào là stdout thì đầu ra là đầu ra tiêu chuẩn.
; Bạn có nhớ hàm _stbuf ở trên không?
mov edi, eax
lea eax, [esp+10h+arg_4]
push eax ; int
push [esp+14h+arg_0] ; int
push esi ; File
call sub_401282 ; Bạn có nhớ lệnh gọi hàm bên ngoài ở trên không?
push esi
push edi
mov ebx, eax
call __ftbuf ; Bạn có nhớ hàm _ftbuf ở trên không?
add esp, 18h
mov eax, ebx
pop edi
pop esi
pop ebx
retn
sub_40105F endp
FILE <0, 0, 0, 2, 1, 0, 0, 0>
typedef struct
{
short level ; 1
short token ; 2
short bsize ; 3
char fd ; 4
unsigned flags ; 5
unsigned char hold ; 6
unsigned char *buffer ; 7
unsigned char * curp ; 8
unsigned istemp; 9
}F1 2 3 4 5 6 7 8 FILE <0, 0, 0, 2, 1, 0, 0, 0>
struct _iobuf {
char *_ptr; // -> 0
int _cnt; // -> 0
char *_base; // -> 0
int _flag; // -> 2
int _file; // -> 1
int _charbuf; // -> 0
int _bufsiz; // -> 0
char *_tmpfname; // -> 0
};
typedef struct _iobuf FILE;stdin -> 0 stdout -> 1 stderr -> 2
- Nếu biến trả về true, nó sẽ in chuỗi Success: Internet Connection.
- Nếu không, nó sẽ in ra chuỗi Error 1.1: No Internet.


















