# LAB 15-03 ANTI – DISASSEMBLY
* Công cụ dùng để dịch ngược: IDA
## 1. How is the malicious code initially called? (mã độc ban đầu được gọi như nào)
* Hàm ban đầu thực hiện khởi tạo stack frame mới.
* `push ebp`: lưu lại `ebp` của hàm gọi
* `mov ebp, esp`: gán giá trị `ebp` mới bằng `esp`
* `sub esp, 134h`: tạo vùng cho các biến cục bộ
* Các lệnh `push` sau đó là đẩy các tham số lên stack
* Sau đó là thay đổi giá trị trả về của hàm gọi thành `40148Ch`

## 2. What does the malicious code do? (mã độc này làm gì)
* Do đã ghi đè địa chỉ trả về nên khi thực thi xong hàm main thì chương trình sẽ nhảy đến `40148Ch`

* Ở đây ở địa chỉ `0x401494` ta thấy kỹ thuật anti-disassembly với lệnh `jz` mà trước đó có lệnh `xor eax, eax` tức là chương trình sẽ luôn nhảy đến địa chỉ `0x401497`
* Sau khi sửa lại

* Ở đây ta thấy chương trình thực hiện thêm 1 bản ghi SEH trên stack với handler là `0x4014C0`
* Ngay sau đó là 2 lệnh
* `xor ecx, ecx`: ecx có giá trị bằng `0`
* `div ecx`: thực hiện phép chia cho `ecx` mà `ecx` có giá trị là `0` vẫn chương trình sẽ trigger 1 exception và sẽ gọi tới handler chương trình vừa mới đăng kí đó là `0x4014C0`

* Tiếp tục là 1 kỹ thuật anti-disassembly với lệnh `jmp` sau khi thực hiện unlink `SEH` handler và khôi phục lại handler ban đầu
* Thực hiện disassemble ở địa chỉ `0x4014D8`

* Lệnh `call $+5` thực hiện push địa chỉ của câu lệnh tiếp theo lên stack tức `0x4014E0`
* Tiếp theo thực hiện push giá trị `0x403010` lên stack và gọi hàm `0x401534`

* Hàm này thực hiện cộng giá trị ở `[ebp+arg_0]`, thực hiện xor với `0xff` đến ghi giá trọ đó là 1 con trỏ trỏ đến `0`
* Chương trình sau đó gọi hàm `URLDownloadToFileA` để tải 1 file trên mạng về, tiếp tục là 1 kĩ thuật anti-disassembly khi thực hiện 2 lệnh `jz` và `jnz`

* Disassemble ở địa chỉ `0x40151a` ta thấy chương trình thực hiện `WinExec` rồi thoát chương trình

## 3, 4. What URL does the malware use and what filename does the malware use??(URL và tên file mã độc sử dụng là gì)
* Hàm `URLDownloadToFileA` lấy tham số từ địa chỉ ` unk_403040` và `unk_403010`
```
unk_403010 db 97h ; DATA XREF: .text:004014E6↑o
.data:00403010 ; .text:00401509↑o
.data:00403011 db 8Bh
.data:00403012 db 8Bh
.data:00403013 db 8Fh
.data:00403014 db 0C5h
.data:00403015 db 0D0h
.data:00403016 db 0D0h
.data:00403017 db 88h
.data:00403018 db 88h
.data:00403019 db 88h
.data:0040301A db 0D1h
.data:0040301B db 8Fh
.data:0040301C db 8Dh
.data:0040301D db 9Eh
.data:0040301E db 9Ch
.data:0040301F db 8Bh
.data:00403020 db 96h
.data:00403021 db 9Ch
.data:00403022 db 9Eh
.data:00403023 db 93h
.data:00403024 db 92h
.data:00403025 db 9Eh
.data:00403026 db 93h
.data:00403027 db 88h
.data:00403028 db 9Eh
.data:00403029 db 8Dh
.data:0040302A db 9Ah
.data:0040302B db 9Eh
.data:0040302C db 91h
.data:0040302D db 9Eh
.data:0040302E db 93h
.data:0040302F db 86h
.data:00403030 db 8Ch
.data:00403031 db 96h
.data:00403032 db 8Ch
.data:00403033 db 0D1h
.data:00403034 db 9Ch
.data:00403035 db 90h
.data:00403036 db 92h
.data:00403037 db 0D0h
.data:00403038 db 8Bh
.data:00403039 db 8Bh
.data:0040303A db 0D1h
.data:0040303B db 97h
.data:0040303C db 8Bh
.data:0040303D db 92h
.data:0040303E db 93h
.data:0040303F db 0FFh
```
```
.data:00403040 unk_403040 db 0 ; DATA XREF: .text:004014F3↑o
.data:00403040 ; .text:00401504↑o
.data:00403041 db 8Ch
.data:00403042 db 8Fh
.data:00403043 db 90h
.data:00403044 db 90h
.data:00403045 db 93h
.data:00403046 db 8Ch
.data:00403047 db 8Dh
.data:00403048 db 89h
.data:00403049 db 0D1h
.data:0040304A db 9Ah
.data:0040304B db 87h
.data:0040304C db 9Ah
.data:0040304D db 0FFh
```

* Do cả 2 địa chỉ trước đó được gọi với hàm `401534` để xor với giá trị `0xff`. Thực hiện decode 2 địa chỉ này ta được
* URL: http://www.practicalmalwareanalysis.com/tt.html
* Filename: spoolsrv.exe