Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Инжект пакета, реализация на FreeBASIC

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 23.11.2011, 21:13   #1
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
Question Инжект пакета, реализация на FreeBASIC

РЕШЕНО
Путь решения

Вот наконец я не выдержал, и решил всё таки создать темку, быть может кто-то и укажет мне на мою ошибку и поможет прийти к правильному решению сией ситуации. Сразу предупреждаю, язык [Ссылки могут видеть только зарегистрированные пользователи. ], но имхо это ни сколько не влияет на его читаемость, а также предупреждаю, что сий пример разнится с изначальным который у меня был, ввиду метаморфоз которых он притерпел возможно в лучшую, а возможно в худшую сторону.

И сразу к делу, есть инжект который проходит почти успешно, почему почти? - Потому, что ничего не происходит в том числе и крэша клиента, сам разрешить этот вопрос не могу, но сетую на неверную передачу параметров в функцию, из-за чего происходит, так же не ясно. Искались возможно по заблуждению, а возможно из-за гениальной мысли обходные пути сей проблемы с помощью игры с регистрами, но не увенчались успехом.

Для тех кто не хочет качать FreeBASIC, а охота заглянуть в стек, даю в приложении тот самый скомпилированный исходник. Обратите внимание, после pushad стоит брекпоинт int3, запускать следует после податачивания отладчика (OllyDbg например)!

Инжект представляет собой жестко заданные 6 байт, взятия НПС в таргет, наставник новичков в людской нуболоке (тот самый респ на котором получаем сундук который открывается каждые 5 лвл).

Код:
#Include "windows.bi"

Type PParams
   mParam (0 To 5) As UByte = {&h02, &h00, &h32, &h18, &h10, &h80 }
   Param1 As Dword
   CallAddress as Dword = &h6737B0
End Type

Dim PID As UInteger
Dim hProcess As Handle
Dim Shared aParams As PParams

Declare Function PacketCall StdCall (ByVal pData As PParams Ptr = @aParams) As HMODULE
Declare Sub InjectFunc(ByVal ProcessID As Handle, ByVal Func As Any Ptr, ByVal aParams As Any Ptr, aParamsSize As DWORD)

aParams.Param1 = 6
aParams.mParam(0) = &h02
aParams.mParam(1) = &h00
aParams.mParam(2) = &h32
aParams.mParam(3) = &h18
aParams.mParam(4) = &h10
aParams.mParam(5) = &h80

GetWindowThreadProcessId(FindWindow("ElementClient Window", NULL), @PID)
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, PID)
InjectFunc(hProcess, @PacketCall, @aParams, SizeOf(aParams))


Function PacketCall StdCall (ByVal pData As PParams Pointer = @aParams) as HMODULE

	Dim pPacket As UByte ptr = @pData -> mParam(0)
    Dim pLen As DWORD = pData -> Param1
    Dim CallFunc as DWord = pData -> CallAddress

	asm
        pushad
        int3
        mov ecx,[&hB27A04]
        mov ecx,[ecx+&h34]
        push [pLen]
        push [pPacket]
        call [CallFunc]
        popad
    end asm
	
End Function


Sub InjectFunc(ByVal ProcessID As Handle, ByVal Func As Any Ptr, ByVal aParams As Any Ptr, aParamsSize As DWORD)
	Dim hThread As HANDLE
	Dim lpNumberOfBytes As UInteger
	Dim ThreadAddr As LPVOID Ptr
	Dim ParamAddr As LPVOID Ptr
	Print @aParams ;"		  - Inside Adress"
	Print aParams
	Print aParamsSize ;"                 - aParamsSize"
	Print "-------------"
	Print "Press any key to continue function InjectFunc"
	Sleep
	If ProcessID <> 0 Then
		'    // ---- Âûäåëÿåì ìåñòî â ïàìÿòè ïðîöåññà, è çàïèñûâàåì òóäà íàøó ôóíêöèþ
		ThreadAddr = VirtualAllocEx(ProcessID, NULL, 256, MEM_COMMIT, PAGE_READWRITE)
		WriteProcessMemory(ProcessID, ThreadAddr, Func, 256, @lpNumberOfBytes)
		Print lpNumberOfBytes ;" - TargetCall"

		'// ---- Òàêæå çàïèøåì ïàðàìåòðû ê íåé
		ParamAddr = VirtualAllocEx(ProcessID, NULL, aParamsSize, MEM_COMMIT, PAGE_READWRITE)
		WriteProcessMemory(ProcessID, ParamAddr, aParams, aParamsSize, @lpNumberOfBytes)
		Print lpNumberOfBytes ;" - aParams"
		
		'// ---- Ñîçäàåì ïîòîê, â êîòîðîì âñå ýòî áóäåò âûïîëíÿòüñÿ.
		hThread = CreateRemoteThread(ProcessID, NULL, 0, ThreadAddr, ParamAddr, 0, @lpNumberOfBytes)
		
		'// ---- Îæèäàåì çàâåðøåíèÿ ôóíêöèè
		WaitForSingleObject(hThread, INFINITE)
		
		'// ---- ïîä÷èùàåì çà ñîáîé
		CloseHandle(hThread)
		VirtualFreeEx(ProcessID, ParamAddr, 0, MEM_RELEASE)
		VirtualFreeEx(ProcessID, ThreadAddr, 0, MEM_RELEASE)
		Print "Im inside of function InjectFunc"
		Print "Press any key for exit..."
	EndIf
	Sleep
End Sub
Собственно и всё... Спасибо за внимание, надеюсь на вашу помощь и поддержку!
Вложения
Тип файла: zip PacketInject.zip (11.0 Кб, 8 просмотров)

Последний раз редактировалось Sirioga; 24.11.2011 в 00:48. Причина: Решено
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
MaTEMAtika(2) (23.11.2011), VortexWhy (01.01.2012)
Старый 23.11.2011, 21:58   #2
 Разведчик
Аватар для Sanych89
 
Sanych89 на правильном пути
Регистрация: 09.09.2010
Сообщений: 32
Популярность: 82
Сказал(а) спасибо: 16
Поблагодарили 37 раз(а) в 12 сообщениях
 
По умолчанию Re: Инжект пакета, реализация на FreeBASIC

о! третьим будешь
Код:
mov ecx,[&hB27A04]
mov ecx,[ecx+&h34]
а надо
Код:
mov ecx,[&hB27A04]
mov ecx,[ecx+&h20]
  Ответить с цитированием
Пользователь сказал cпасибо:
Sirioga (23.11.2011)
Старый 23.11.2011, 22:13   #3
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: Инжект пакета, реализация на FreeBASIC

Цитата:
Сообщение от Sanych89Посмотреть сообщение
о! третьим будешь

Это ты к чему?

Цитата:
Сообщение от Sanych89Посмотреть сообщение
а надо

Код:
mov ecx,[&hB27A04]
mov ecx,[ecx+&h20]

почему 20, а не 34?... Объясни)

PS: Крэш клиента не произошел, но и нпс в таргет не взялся...

Последний раз редактировалось Sirioga; 23.11.2011 в 22:24.
  Ответить с цитированием
Старый 23.11.2011, 22:23   #4
 Разведчик
Аватар для Sanych89
 
Sanych89 на правильном пути
Регистрация: 09.09.2010
Сообщений: 32
Популярность: 82
Сказал(а) спасибо: 16
Поблагодарили 37 раз(а) в 12 сообщениях
 
По умолчанию Re: Инжект пакета, реализация на FreeBASIC

Цитата:
Сообщение от SiriogaПосмотреть сообщение
Это ты к чему?

Я делал так же. И ещё один человек недавно.
Цитата:
Сообщение от SiriogaПосмотреть сообщение
почему 20, а не 34?... Объясни)

PS: Крэш клиента

$34 - смещение host_player'а, к отправке пакетов отношения не имеет.
Что ещё бросилось в глаза:
@lpNumberOfBytes - адрес lpNumberOfBytes? В случае с Delphi, отправляется сама переменная, а не её адрес. Остальное очень похоже.

И забыл. С ассемблером у меня совсем печально, но, может быть, корректнее так:
Код:
    mov ecx, dword ptr [base_addr]
    mov ecx, dword ptr [ecx+$20]
  Ответить с цитированием
Пользователь сказал cпасибо:
Sirioga (23.11.2011)
Старый 23.11.2011, 22:41   #5
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: Инжект пакета, реализация на FreeBASIC

Почему в первый раз отказалось работать сказать точно не могу, но потом после изменения 34 на 20 оно начало работать...

Цитата:
Сообщение от Sanych89Посмотреть сообщение
@lpNumberOfBytes - адрес lpNumberOfBytes? В случае с Delphi, отправляется сама переменная, а не её адрес. Остальное очень похоже.

Цитата:
lpNumberOfBytesWritten [out]
A pointer to a variable that receives the number of bytes transferred into the specified process. This parameter is optional. If lpNumberOfBytesWritten is NULL, the parameter is ignored.

т.е. поместить "в".
Цитата:
Сообщение от Sanych89Посмотреть сообщение
И забыл. С ассемблером у меня совсем печально, но, может быть, корректнее так:

Может и корректнее, но в данной ситуации оно роли не отыграло.

Спасибо большое за помощь!
  Ответить с цитированием
Старый 24.11.2011, 00:31   #6
 Разведчик
Аватар для hiho
 
hiho никому не известный тип
Регистрация: 30.10.2011
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Отправить сообщение для hiho с помощью ICQ
 
По умолчанию Re: Инжект пакета, реализация на FreeBASIC

подписываюсь, недавно тоже была такая проблема =)
  Ответить с цитированием
Ответ

Метки
инжект, пакет


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Продам] Реализация кинар на AionLegend DezFafara Aion 0 30.10.2011 11:40
[Помогите!] Нужны 2 пакета omg 8bit Общение и обсуждение 0 08.07.2011 18:22
[Статья] Реализация системы онлайн-оффлайн с использованием XmlHttpRequest Я убью:Frost:DD Web-программирование и технологии 0 11.06.2011 20:44
название пакета Vitto_Morini Общение и обсуждение, архив Lineage 2 0 02.06.2011 16:04

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 14:11.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net