[Asm] 纯文本查看 复制代码
.386
.model flat, stdcall
option casemap:none
.code
start:
; get hkernel32
xor eax, eax
assume fs:nothing
mov eax, fs:[eax + 30h]
mov eax, [eax + 0Ch]
mov eax, [eax + 14h]
mov eax, [eax]
mov eax, [eax]
mov ebx, [eax + 10h]
mov [hkernel32], ebx
mov eax, [ebx + 3Ch]
add eax, ebx
mov eax, [eax + 78h]
add eax, ebx
push eax
mov esi, [eax + 20h]
add esi, ebx
xor ecx, ecx
find_LoadLibraryA:
mov edi, [esi + ecx*4]
add edi, ebx
cmp dword ptr [edi], 64616F4Ch
jne next_func1
cmp dword ptr [edi+4], 7262694Ch
jne next_func1
cmp dword ptr [edi+8], 41797261h
je found_LoadLibraryA
next_func1:
inc ecx
jmp find_LoadLibraryA
found_LoadLibraryA:
mov edx, [eax + 24h]
add edx, ebx
mov cx, [edx + ecx*2]
mov edx, [eax + 1Ch]
add edx, ebx
mov eax, [edx + ecx*4]
add eax, ebx
push eax
pop eax
pop edx
push eax
push edx
mov eax, edx
mov esi, [eax + 20h]
add esi, ebx
xor ecx, ecx
find_GetProcAddress:
mov edi, [esi + ecx*4]
add edi, ebx
cmp dword ptr [edi], 50746547h
jne next_func2
cmp dword ptr [edi+4], 41636F72h
jne next_func2
cmp dword ptr [edi+8], 65726464h
je found_GetProcAddress
next_func2:
inc ecx
jmp find_GetProcAddress
found_GetProcAddress:
mov edx, [eax + 24h]
add edx, ebx
mov cx, [edx + ecx*2]
mov edx, [eax + 1Ch]
add edx, ebx
mov eax, [edx + ecx*4]
add eax, ebx
mov [GetProcAddress], eax
pop edx
pop ebx
mov [LoadLibraryA], ebx
true_start:
push offset Ncreatefilea
push [hkernel32]
call [GetProcAddress]
mov [CreateFileA], eax
push offset Nreadfile
push [hkernel32]
call [GetProcAddress]
mov [ReadFile], eax
push offset Nexitprocess
push [hkernel32]
call [GetProcAddress]
mov [ExitProcess], eax
push offset Nuser32dll
call [LoadLibraryA]
mov [huser32], eax
push offset Nmessageboxa
push [huser32]
call [GetProcAddress]
mov [MessageBoxA], eax
; read keyfile
push 0
push 80h
push 3
push 0
push 0
push 80000000h
push offset keyfile
call [CreateFileA]
inc eax
jz finalize
push 0
push 0
push 32
push offset keybuf
push eax
call [ReadFile]
mov ecx, 6
xor edx, edx
e:
call random
xor [keybuf+4*edx], eax
inc edx
loop e
; check header
mov eax, [keybuf]
xor eax, [keybuf+4*5]
xor eax, 016080902h
jnz finalize
mov ebx, [keybuf+1*4]
sub ebx, [keybuf+2*4]
sub ebx, 0EE0CFEFFh
jnz finalize
mov ecx, [keybuf+3*4]
ror ecx, 4
neg ecx
and ecx, [keybuf+4*4]
xor ecx, 00049020Ah
jnz finalize
jmp ok
finalize:
push 0
push offset msg
push offset msg
push 0
call [MessageBoxA]
push 0
call [ExitProcess]
ok:
push 0
push offset okm
push offset okm
push 0
call [MessageBoxA]
push 0
call [ExitProcess]
random:
push edx
push ecx
mov eax, [seed]
mov ecx, 22695477
mul ecx
inc eax
mov [seed], eax
pop ecx
pop edx
ret
.data
align 4
keybuf dd 0, 0, 0, 0, 0, 0, 0, 0
seed dd 33550336
hkernel32 dd 0
huser32 dd 0
ExitProcess dd 0
LoadLibraryA dd 0
GetProcAddress dd 0
CreateFileA dd 0
ReadFile dd 0
MessageBoxA dd 0
Ncreatefilea db "CreateFileA", 0
Nreadfile db "ReadFile", 0
Nexitprocess db "ExitProcess", 0
Nmessageboxa db "MessageBoxA", 0
Nuser32dll db "user32.dll", 0
keyfile db "philia.093", 0
msg db "exit", 0
okm db "ok", 0
end start