seg000:00000000 seg000 segment byte public
'CODE'
use32
seg000:00000000 assume cs:seg000
seg000:00000000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
seg000:00000000 mov eax, 40000h
seg000:00000005
seg000:00000005 loc_5:
seg000:00000005 mov ecx, 40235h
seg000:0000000A call ecx
seg000:0000000A ; ---------------------------------------------------------------------------
seg000:0000000C
dd
4C69636Dh ; 特征码
seg000:00000010
dd
0 ; 下一个ShellCode地址
seg000:00000014
dd
76EC5D30h ; pfnNtTestAlert
seg000:00000018 ; ---------------------------------------------------------------------------
seg000:00000018 mov eax, 174h
seg000:00000018 ; ---------------------------------------------------------------------------
seg000:0000001D UNICODE_STRING <5Eh, 60h, 40025h>
seg000:00000025 aCProgramFilesM:
seg000:00000025 unicode 0, <C:\Program Files\XXXXX\DLP\Agent\fcagcbh32.dll>,0
....
seg000:0000022D
dd
76EC5360h ; pfnNtProtectVirtualMemory
seg000:00000231
dd
76EDF585h ; pfnLdrLoadDll
seg000:00000235
seg000:00000235 ; =============== S U B R O U T I N E =======================================
seg000:00000235
seg000:00000235 ; Attributes: bp-based frame
seg000:00000235
seg000:00000235 sub_235 proc near
seg000:00000235
seg000:00000235 var_C = dword ptr -0Ch
seg000:00000235 var_8 = dword ptr -8
seg000:00000235 var_4 = dword ptr -4
seg000:00000235
seg000:00000235 push ebp
seg000:00000236 mov ebp, esp
seg000:00000238 add esp, 0FFFFFFF4h
seg000:0000023B push ebx
seg000:0000023C mov ebx, eax ; 参数基址
seg000:0000023E mov [ebp+var_4], ebp
seg000:00000241 mov eax, [ebp+var_4]
seg000:00000244 add eax, 4 ; 指向栈上函数返回地址
seg000:00000247 mov edx, [ebx+14h]
seg000:0000024A mov [eax], edx ; 修改函数返回地址为pfnNtTestAlert
seg000:0000024C mov eax, [ebx+14h]
seg000:0000024F mov [ebp+var_C], eax
seg000:00000252 mov [ebp+var_4], 5
seg000:00000259 lea eax, [ebp+var_8]
seg000:0000025C push eax ; OldProtect
seg000:0000025D push 40h ;
'@'
; PAGE_EXECUTE_READWRITE
seg000:0000025F lea eax, [ebp+var_4]
seg000:00000262 push eax ; RegionSize
seg000:00000263 lea eax, [ebp+var_C]
seg000:00000266 push eax ; BaseAddress
seg000:00000267 push 0FFFFFFFFh ; ProcessHandle
seg000:00000269 call dword ptr [ebx+22Dh] ; NtProtectVirtualMemory
seg000:0000026F mov eax, [ebx+14h]
seg000:00000272 mov edx, [ebx+18h]
seg000:00000275 mov [eax], edx
seg000:00000277 mov dl, [ebx+1Ch] ; 修改NtTestAlert函数前5个字节为MOV EAX, 174h
seg000:0000027A mov [eax+4], dl
seg000:0000027D mov [ebp+var_4], 5
seg000:00000284 lea eax, [ebp+var_8]
seg000:00000287 push eax ; OldProtect
seg000:00000288 mov eax, [ebp+var_8]
seg000:0000028B push eax ; NewProtectWin32
seg000:0000028C lea eax, [ebp+var_4]
seg000:0000028F push eax ; RegionSize
seg000:00000290 lea eax, [ebp+var_C]
seg000:00000293 push eax ; BaseAddress
seg000:00000294 push 0FFFFFFFFh ; ProcessHandle
seg000:00000296 call dword ptr [ebx+22Dh] ; NtProtectVirtualMemory
seg000:0000029C
seg000:0000029C loc_29C: ; CODE XREF: sub_235+7Ej
seg000:0000029C lea eax, [ebp+var_4]
seg000:0000029F push eax
seg000:000002A0 lea eax, [ebx+1Dh]
seg000:000002A3 push eax
seg000:000002A4 push 0
seg000:000002A6 push 0
seg000:000002A8 call dword ptr [ebx+231h] ; LdrLoadDll
seg000:000002AE mov ebx, [ebx+10h]
seg000:000002B1
test
ebx, ebx
seg000:000002B3 jnz short loc_29C
seg000:000002B5 pop ebx
seg000:000002B6 mov esp, ebp
seg000:000002B8 pop ebp
seg000:000002B9 retn
seg000:000002B9 sub_235 endp
seg000:000002B9
seg000:000002B9 ; ---------------------------------------------------------------------------
seg000:000002BA align 1000h
seg000:000002BA seg000 ends
seg000:000002BA
seg000:000002BA
seg000:000002BA end