# 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` ![image](https://hackmd.io/_uploads/Bk13rWlslg.png) ## 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` ![image](https://hackmd.io/_uploads/rJDyDZliel.png) * Ở đâ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 ![image](https://hackmd.io/_uploads/BkRc_Zeieg.png) * Ở đâ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` ![image](https://hackmd.io/_uploads/ryzXqbgjeg.png) * 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` ![image](https://hackmd.io/_uploads/SJypcbejeg.png) * 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` ![image](https://hackmd.io/_uploads/ryb23Zeogl.png) * 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` ![image](https://hackmd.io/_uploads/Sk3GpZgsll.png) * Disassemble ở địa chỉ `0x40151a` ta thấy chương trình thực hiện `WinExec` rồi thoát chương trình ![image](https://hackmd.io/_uploads/BkDUabgjel.png) ## 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 ``` ![image](https://hackmd.io/_uploads/B1wDCbejee.png) * 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