Проблема с инжектируемым кодом

G

gig

Ни как не могу заставить работать инжектируемый код, всё время какие-то ошибки (они такие разные :) что я даже не смог все запомнить). Можете дать работающий (!) исходник на асме (masm32) самого инжектируемого кода, и процедуры инжектирования. (статью на Для просмотра ссылки Войди или Зарегистрируйся не предлагать - не пашет)
 
G

gig

Блин, вообще бред какой-то: записал я код в память процесса, запустил я его, и на этом хорошие новости заканчиваются.
пишу push 0, винда мне "Инструкция по адресу 0х00000000 обратилась к памяти по адресу 0х00000000. Память не может быть read". Написал push 5, она мне "Инструкция по адресу 0х00000005 обратилась к памяти по адресу 0х00000005. Память не может быть read". Написал pop eax - "Инструкция по адресу 0х00400003 обратилась к памяти по адресу 0х00400000. Память не может быть written". - Чё за чёрт?!
 
G

gig

Source:
Код:
.386
.model flat,stdcall
option casemap:none

find_PID PROTO
myInject PROTO

include \masm32\include\windows.inc

include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib

include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

.const

.data?
	hSnapshot dd ? ; Хэндл снимка процессов
	hProcess HANDLE ? ; Хэндл нужного мне процесса
	lpMemory HANDLE ? ; Хэндл блока памяти
	dwTid HANDLE ?
	need_memory dd ? ; Размер блока памяти, который я хочу захапать

.data
	pid HANDLE 0 ; PID нужного мне процесса
	szProcessName db "test.exe",0 ; Имя процесса, который я ищу
	p_entry PROCESSENTRY32 <> ; Структура для инфы о процессе

.code
start:
	invoke find_PID
	.if pid==0
		;
	.else
		invoke myInject
	.endif
	invoke ExitProcess,0
find_PID proc
	invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0 ; Делаем снимок системы
	inc eax
	test eax,eax
	jz exit	; Если ошибка - выходим
	dec eax
	mov hSnapshot,eax ; Сохраняем хэндл снимка
	mov p_entry.dwSize,sizeof PROCESSENTRY32
	invoke Process32First,hSnapshot,addr p_entry ; Получаем инфу о первом процессе
	
	test eax,eax
	jz exit ; Если ошибка - выходим
	jmp cmp__ ; Отправляем PID на проверку	
p_next__:
	mov p_entry.dwSize,sizeof PROCESSENTRY32
	invoke Process32Next,hSnapshot,addr p_entry ; Получаем инфу о следующем процессе
	test eax,eax
	jz exit ; Если ошибка - выходим
cmp__:
	invoke lstrcmp,addr szProcessName,addr p_entry.szExeFile ; Если это наш процесс - заебись :)
	test eax,eax
	jz find_it__ ; Ага, наш)
	jmp p_next__ ; Неа, нифига не наш(	
find_it__:
	mov eax,p_entry.th32ProcessID
	mov pid,eax ; Сохраняем PID нужной нам проги
	invoke CloseHandle,hSnapshot
exit:	
	ret ; Возврат из подпрограммы
find_PID endp
myInject proc
jmp backdoor_code_end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
backdoor_code:
	push 9
	ret
backdoor_code_end:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	lea eax,backdoor_code_end
	lea ecx,backdoor_code
	sub eax,ecx
	mov need_memory,eax
	; Открываю процесс:
	invoke OpenProcess,PROCESS_ALL_ACCESS or PROCESS_VM_WRITE or PROCESS_CREATE_THREAD or PROCESS_CREATE_PROCESS,FALSE,pid
	test eax,eax
	jz exit__ ; Если не открыл - на выход
	mov hProcess,eax ; Сохраняю хэндл процесса
	invoke VirtualAllocEx,hProcess,0,need_memory,MEM_COMMIT,PAGE_EXECUTE ; Выделяю 1000 байт
	test eax,eax
	jz exit__ ; Если не выделил - выхожу
	mov lpMemory,eax ; Сохраняю хэндл памяти
	; Пишу свой код в память процесса:
	invoke WriteProcessMemory,hProcess,lpMemory,addr backdoor_code,need_memory,0
	dec eax
	test eax,eax
	jnz exit__ ; Если записать не удалось - выхожу
	inc eax
	; Создаю удалённый поток, указывая на свой код:
	invoke CreateRemoteThread,hProcess,0,0,lpMemory,lpMemory,0,0
exit__:
	invoke CloseHandle,hProcess
	ret
myInject endp
End start
 
A

_Andrey_

Отладчик использовать не пробовал?
_http://www.codeproject.com/threads/winspy.asp
 
G

gig

Спасибо за совет(хоть кто-то откликнулся). Я уже во всём разобрался и тему теперь можно считать закрытой. Проблема крылась в опциях линкера
 

grundic

Местный
Регистрация
3 Окт 2004
Сообщения
206
Реакции
91
Credits
0
Все равно Аутпост такие штуки видит.... :-/ Что бы его обойти надо кажись через dll как-то ломиться... Тогда будет выдаваться предупреждение, что какие-то компоненты осла изменились...