|
Участник форума
Регистрация: 09.12.2006
Сообщений: 135
Провел на форуме: 426226
Репутация:
726
|
|
Решил тоже ассемблер поизучать.
Пишется таким способом тяжело, зато инжектится в чужой процесс элементарно.
IMНO зачем тогда ассемблер нужен.
INVOKE wvsprintf,offset outst,offset inst,var1,var2, .....
h ttp://msdn2.microsoft.com/en-us/library/ms647551.aspx
Преобразует содержание переменной(ых) в строку.
Код:
.486
.model flat,stdcall
option casemap :none
kernel32 EQU edx
user32 EQU ebx
CallFunc MACRO reg,zText:VARARG
LOCAL m1
call m1
db zText,0
m1:
push reg
call ebp
call eax
ENDM
cText MACRO zText:VARARG
LOCAL m1
call m1
db zText,0
m1:
ENDM
;----------------------------------------------
.code
start:
mov edx,[esp]
call sfind_kern_b
; edx kernel32.dll ModuleHandle
; ebx User32.dll ModuleHandle
; ebp = GetProcAddress(GetModuleHandle('kernel32.dll),'GetProcAddress');
push kernel32 ;--1
cText 'user32.dll'
CallFunc kernel32,'LoadLibraryA'
mov user32,eax
pop kernel32 ;--1
;--------------------------------------------------
CallFunc kernel32,'GetCurrentProcessId'
;--------------------------------------------------
; INVOKE wvsprintf,offset outst,offset inst,var1,var2, .....
; http://msdn2.microsoft.com/en-us/library/ms647551.aspx
;-------------------
mov ecx,10
m1: push 0
loop m1 ;10*4+
mov ecx,esp ;offset outst
push ebp ;--1
push ebx ;--2
push eax ;ProcessId var1
push esp ;var1
cText 'It is MASM!!! =)%#8IX',0 ;//offset inst
push ecx ;offset outst
CallFunc user32,'wvsprintfA'
add esp,4 ; var1 dellete
pop ebx ;--2
pop ebp ;--1
mov ecx,esp ;offset outst
;---------------------------------------------------
;-- MessageBox ----------------------------------
push 0
cText 'ProcessId'
push ecx ;offset outst
push 0
CallFunc user32,'MessageBoxA'
add esp,10*4 ;10*4-
ret ; exit proocess
;-------------------------------------------
;-- No comments -- Не отлажено ------
sfind_kern_b: ;edx base
sfind_kern_bs:
and edx,0ffff0000h
cmp word ptr [edx],05A4Dh
jz sfind_kern_b1
sub edx,1000h
jmp sfind_kern_bs
sfind_kern_b1:
mov eax,[edx+3ch]
mov ebx,edx
add ebx,eax
cmp word ptr[ebx],04550h
jz sfind_kern_b2
sub edx,1000h
jmp sfind_kern_bs
GPA db 'GetProcAddress',0
sfind_kern_b2:
mov esi,offset GPA
mov ebx,EDX
add ebx,03Ch
mov eax,[ebx]
mov ebx,EDX
add ebx,eax
add ebx,160h-0e8h
mov ecx,EDX
add ecx,[ebx]
add ecx,12 ; adr export
mov ebx,EDX
add ebx,[ecx]
mov edi,ebx
xor eax,eax
sadrxor:
push edi
push esi
sgpa_fefe:
pop edi
pop esi
inc esi
push esi
push edi
mov ecx,0Fh
repe cmpsb
cmp ecx,0
jz sgpa_fef
mov cl,0
cmp [esi],cl
jnz sgpa_fefe
inc eax
jmp sgpa_fefe
sgpa_fef:
pop edi
pop esi
push eax
mov ebx,EDX
add ebx,03Ch
mov eax,[ebx]
mov ebx,EDX
add ebx,eax
add ebx,160h-0e8h
mov ecx,EDX
add ecx,[ebx]
pop ebx
dec ebx
MOV EAX,[ECX+24h]
add eax,edx
MOV bx,[eax+ebx*2]
MOV EAX,[ECX+1ch]
add eax,edx
MOV EAX,[eax+ebx*4]
add eax,edx
mov ebp,eax
ret
end start
Как бы все это попроще писать?
Особенно переменные в стеке. 
|