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

Вылетает клиент при инжекте

-

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

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

Ответ
 
Опции темы
Старый 28.04.2013, 18:52   #1
 Разведчик
Аватар для Xantrax
 
Xantrax никому не известный тип
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Вылетает клиент при инжекте

Помогите пожалуйста в этой теме.
Я никак не могу описать простейшего бота. Хочу чтобы выделялся моб. Делал по гайду, но с уклоном в Visual C++ библиотека MFC, да там собственно различий то немного.
Из игры данные получаю отлично, но вот стоит мне написать функцию инжектор и запустить программу, как клиент у меня вылетает. Вылетает на строчке создания потока... А значит возможно неправильно написаны адреса в ассемблерном коде. Я уже долго сижу в недоумении почему не работает программа. Помогите пожалуйста, кто-нибудь.. В чем моя ошибка?
кому лень читать много букв, вот последний мой[Ссылки могут видеть только зарегистрированные пользователи. ].
Спасибо всем, кто хоть как-то поможет...
  Ответить с цитированием
Старый 28.04.2013, 19:02   #2
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

Цитата:
Сообщение от XantraxПосмотреть сообщение
кому лень читать много букв, вот последний мой проект.

Хватило бы и самого инжекта. Так же не помешает название сервера и\или версия клиента.
  Ответить с цитированием
Старый 28.04.2013, 22:17   #3
 Разведчик
Аватар для Xantrax
 
Xantrax никому не известный тип
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

Дополнительные сведения:
В лаунчере mail.ru написано Возрождение династий, версия игры 154. Сервер: Орион.
Еще Win7x64, если это как-то влияет на смещения памяти...
  Ответить с цитированием
Старый 28.04.2013, 23:11   #4
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

Цитата:
Сообщение от XantraxПосмотреть сообщение
Еще Win7x64

Не должно, клиент то ведь всё равно x86...

Цитата:
Сообщение от XantraxПосмотреть сообщение
mail.ru

С этим всё ясно, но перелопачивание проекта весом в 10 МБ, без знания его структуры, в поисках "запоротого" инжекта, совсем лишнее. Отпости инжект, без лишнего кода.
  Ответить с цитированием
Старый 29.04.2013, 01:06   #5
 Разведчик
Аватар для Xantrax
 
Xantrax никому не известный тип
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

Я собственно сам не понимаю, зачем Visual Studio создал такой громоздкий файл в 10Mb, там в принципе и рыть то нечего, две кнопки и ничего более.
Я удалил весь debug из проекта и он стал занимать всего 41Kb, так что как я и говорил, перелопачивать там нечего. [Ссылки могут видеть только зарегистрированные пользователи. ]...
Весь существенный код заключен в BotDlg.h и BotDlg.cpp, все остальное мишура отвечающая за создание диалогового окна...

Вот то, что я выудил из клиента(ассемблерный код):
00477255 A1 CCFBB800 MOV EAX,DWORD PTR DS:[B8FBCC]
0047725A 57 PUSH EDI
0047725B 8B48 20 MOV ECX,DWORD PTR DS:[EAX+20]
0047725E 81C1 EC000000 ADD ECX,0EC
00477264 E8 F7CA2100 CALL elementc.00693D60

Вот мой код из ассемблера:
void Target_THREAD(DWORD* WID)
{
DWORD Id = *WID;
_asm
{
MOV EDI, Id
MOV EBX, 0x00693D60
MOV EAX,DWORD PTR DS:[BA] //0x00B8FBCC
PUSH EDI
MOV ECX,DWORD PTR DS:[EAX+0x20]
ADD ECX,0x0EC
CALL EBX
}
}

Вот функция инжекта:
BYTE CBotDlg::InjectAndExecute(void* Func, void* Params)
{
HANDLE hProcThread;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if(!hProcess) return 0;

WriteProcessMemory(hProcess,pfunc,Func,250,NULL);
WriteProcessMemory(hProcess,params,Params,250,NULL );

hProcThread = CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)pfunc, params, NULL, NULL);
if(hProcThread==INVALID_HANDLE_VALUE) return 0;

WaitForSingleObject(hProcThread,INFINITE);
CloseHandle(hProcThread);
CloseHandle(hProcess);
return 1;
}

Последний раз редактировалось Xantrax; 29.04.2013 в 12:40.
  Ответить с цитированием
Старый 29.04.2013, 12:39   #6
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

Xantrax,
Правда на Дельфи, но думаю разберешься:

Функция инжекта взята здесь:
http://zhyk.ru/forum/showthread.php?t=144558

Код:
procedure InjectFunc(ProcessID: Cardinal; Func, aParams: Pointer;
  aParamsSize: DWord);
var
  hThread: THandle;
  lpNumberOfBytes: DWord;
  ThreadAddr, ParamAddr: Pointer;
begin
  if ProcessID<>0 then
  begin
    // ---- Выделяем место в памяти процесса, и записываем туда нашу функцию
    ThreadAddr := VirtualAllocEx(ProcessID, nil, 256, MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(ProcessID, ThreadAddr, Func, 256, lpNumberOfBytes);

    // ---- Также запишем параметры к ней
    ParamAddr := VirtualAllocEx(ProcessID, nil, aParamsSize, MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(ProcessID, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);

    // ---- Создаем поток, в котором все это будет выполняться.
    hThread := CreateRemoteThread(ProcessID, nil, 0, ThreadAddr, ParamAddr, 0, lpNumberOfBytes);

    // ---- Ожидаем завершения функции
    WaitForSingleObject(hThread, INFINITE);

    // ---- подчищаем за собой
    CloseHandle(hThread);
    VirtualFreeEx(ProcessID, ParamAddr, 0, MEM_RELEASE);
    VirtualFreeEx(ProcessID, ThreadAddr, 0, MEM_RELEASE);
  end
end;

Код:
procedure TargetCall(aPParams:PParams);Stdcall; 
var
CA,BA:pointer;                                        
P1,P_1,P_2: DWord;                                
begin                                       
P1:=aPParams^.WID;
CA:=pointer(aPParams^.CallAddr);
BA:=pointer(aPParams^.BaseAddr);
P_1:=aPParams^.Param1;
P_2:=aPParams^.Param2;                   
asm
MOV EDI, P1                   // Вносим WID моба в регистр EDI
MOV EBX, CA   //Вносим в свободный регистр EBX адрес функции
MOV EAX, BA   //Вносим в EAX базовый адрес
MOV EAX,DWORD PTR DS:[EAX]  // $00B8FBCC
ADD EAX,P_1                           //прибавляем к EAX $20
MOV ECX,DWORD PTR DS:[EAX]          
PUSH EDI                                // 
ADD ECX,P_2                            //прибавляем к ECX $0EC ; 
CALL EBX                                // ; \elementc.00693D60
end;
end;
Использование:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
aParams:TParams;
begin
aParams.WID:=WID;                   //WID моба
aParams.CallAddr:=$00693D60;
aParams.BaseAddr:=$00B8FBCC;
aParams.Param1:=$20;
aParams.Param2:=$0EC;
InjectFunc(hProcess, @TargetCall, @aParams, SizeOf(aParams ) ); 
end;
________________
MultiXBot
MultiX_POT

Последний раз редактировалось fds255; 29.04.2013 в 13:30.
  Ответить с цитированием
Старый 29.04.2013, 18:15   #7
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

Цитата:
Сообщение от XantraxПосмотреть сообщение
зачем Visual Studio создал такой громоздкий файл в 10Mb

Понятия не имею, не использую Visual Studio, но даже то, что после удаления папки debug он весит меньше, структура проекта осталась для меня загадкой.

Думаю fds255, сказал достаточно, хочу лишь для контраста добавить инжект пакета сброса таргета, написано на FreeBASIC. В архиве исходник и его скомпилированная версия. Кстати и в таргет тоже можно брать таким образом и делать еще много чего полезного, нужно будет просто менять пакет и его размер, хотя ты наверное в курсе... ты же в курсе?

[Ссылки могут видеть только зарегистрированные пользователи. ] | [Ссылки могут видеть только зарегистрированные пользователи. ]
Если в скомпилированной версии нет необходимости можно её просто удалить и не парится по поводу отчета ВТ.
  Ответить с цитированием
Старый 29.04.2013, 22:06   #8
 Разведчик
Аватар для Xantrax
 
Xantrax никому не известный тип
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

Я в курсе, мне главное сделать первый шаг, сделать правильный инжект, чтобы у меня получилось. А далее уже все понятно будет.
Переписал ассемблерную вставку как у fds255, если я конечно ее правильно понял. Клиент игры все равно вылетает.
Вот ассемблерная вставка:
void Target_THREAD(DWORD* WID)
{
DWORD Id = *WID;
_asm
{
MOV EDI, Id
MOV EBX, 0x00693D60
MOV EAX, BA
MOV EAX,DWORD PTR DS:[EAX]
ADD EAX, 0x20
MOV ECX,DWORD PTR DS:[EAX]
PUSH EDI
ADD ECX,0x0EC
CALL EBX
}
}
Буду пробовать дальше разбираться.

Кроме того, переписал функцию инжекта так, что бы память выделялась в ней:

BYTE CBotDlg::InjectAndExecute(void* Func, void* Params)
{
DWORD* lpthreadid = NULL;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
DWORD* pfunc = (DWORD*)VirtualAllocEx(hProcess,NULL,512,MEM_COMMI T,PAGE_READWRITE);
WriteProcessMemory(hProcess,pfunc,Func,256,NULL);
DWORD* params = pfunc + 64;
WriteProcessMemory(hProcess,params,Params,256,NULL );
HANDLE hProcThread;


hProcThread = CreateRemoteThread(hProcess,NULL, 0,(LPTHREAD_START_ROUTINE)pfunc,params,0,lpthreadi d);
if(hProcThread==INVALID_HANDLE_VALUE) return 0;

WaitForSingleObject(hProcThread,INFINITE);
CloseHandle(hProcThread);
CloseHandle(hProcess);
VirtualFreeEx(hProcess,params,0,MEM_RELEASE);
VirtualFreeEx(hProcess,pfunc,0,MEM_RELEASE);
return 1;
}

А вы не могли бы дать ассемблерную вставку снятия таргета с моба? А то на FreeBASIC не очень понятно где что...

Последний раз редактировалось Xantrax; 29.04.2013 в 23:08.
  Ответить с цитированием
Старый 30.04.2013, 10:58   #9
 Разведчик
Аватар для des99
 
des99 никому не известный тип
Регистрация: 27.02.2013
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

код взят из соседней темы и написан на c++ bildere, но вставка ассемблера такая же

Цитата:
void Target_THREAD(DWORD* WID)
{
DWORD Id = *WID;
__asm
{
MOV EDI, Id // Помещаем WID в регистр EDI
MOV EBX, 0x00630790 // Помещаем адрес клиентской функции таргета
MOV EAX,DWORD PTR DS:[BA] //
PUSH EDI // ; /Arg1
MOV ECX,DWORD PTR DS:[EAX+0x20] // ; |
ADD ECX,0x0EC // ; |
CALL EBX // ; \elementc.00606A70
}
}

  Ответить с цитированием
Старый 30.04.2013, 19:26   #10
 Разведчик
Аватар для Xantrax
 
Xantrax никому не известный тип
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

Ребят,
1) собственно по этому гайду я бота и писал;
2) ассемблерный код у него написан с ошибкой, по крайней мере в комментариях; ( адрес функции таргета у него вызывается по одному адресу, а он заносит в регистр совсем другой адрес)... Тогда уж вот тут правильнее:
Цитата:
procedure TargetCall(aPParams:PParams);Stdcall; //StdCall - обязательно, указывает что аргументы попадают в стек в обратном (стандартном) порядке
var //
P1: DWord; //
begin //
P1:=aPParams^.WID; //
asm
MOV EDI, P1 // Вносим WID моба в регистр EDI
MOV EBX, $00606A70 // Вносим в свободный регистр адрес функции
MOV EAX,DWORD PTR DS:[$A5B90C] //
PUSH EDI // ; /Arg1
MOV ECX,DWORD PTR DS:[EAX+$20] // ; |
ADD ECX,$0EC // ; |
CALL EBX // ; \elementc.00606A70
end;
end;

Здесь он какой адрес функции таргерта получает, тот и записывает в регистр.....
3) ошибка то собственно заключается не в ассемблерном коде (скорее всего), там наверняка ошибка в передаче указателей в инжектирующую функцию;
4) прежде чем линковать, что попало вы хоть (относится к dess99) смотрели мой код? Если смотрели, так там аналогичная ассемблерная вставка.

Вывод: Я считаю, что мне надо написать инжектирующую функцию и ассемблерную вставку по-проще(где не надо предварительно получать много параметров об окружении). Например, на подобии снятия выделения с моба или еще какую... Остается только получить ассмеблерную вставку, где есть адрес функции которая вызывается при снятии таргета с моба.

Последний раз редактировалось Xantrax; 30.04.2013 в 19:29.
  Ответить с цитированием
Старый 30.04.2013, 19:50   #11
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

Xantrax, товарищ, зачем ты объединяешь код из нескольких тем под одной функцией инжекта? ;D

Вот этот код (в плане адресов, порядка команд и прочего) у меня работает без каких-либо ошибок, вылетов и прочей ерунды:

Код:
void SelectTarget(DWORD wID)
{
	DWORD func = 0x00693D60;

	__asm	{
		mov eax, dword ptr ds:[BA]
		push wID	// arg1
		mov ecx, dword ptr ds:[eax+0x20]
		add ecx, 0xEC
		call func
	}
}
Но вызываю я его прямиком из DLL, без создания в процессе удалённого потока.
Это протестировано на последней на сегодняшний день версии РуОфа.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Старый 30.04.2013, 20:16   #12
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

Цитата:
Сообщение от XantraxПосмотреть сообщение
Остается только получить ассмеблерную вставку, где есть адрес функции которая вызывается при снятии таргета с моба.

Ассемблерная вставка та же, только вместо WID моба передаешь 0
________________
MultiXBot
MultiX_POT
  Ответить с цитированием
Старый 30.04.2013, 20:27   #13
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

Цитата:
Сообщение от fds255Посмотреть сообщение
Ассемблерная вставка та же, только вместо WID моба передаешь 0

Как вариант (причём вполне логичный).
Но на самом деле в клиенте для этого есть отдельная функция (и отдельный пакет), так что в принципе можно и такую ассемблерную вставку сделать. :D
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Старый 30.04.2013, 20:37   #14
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

Цитата:
Сообщение от BritishColonistПосмотреть сообщение
так что в принципе можно и такую ассемблерную вставку сделать.

Сделать то можно, только не понятно, зачем так заморачиваться
________________
MultiXBot
MultiX_POT
  Ответить с цитированием
Старый 06.05.2013, 01:07   #15
 Разведчик
Аватар для Xantrax
 
Xantrax никому не известный тип
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Вылетает клиент при инжекте

Ох, бяда, бяда.
Сделал инжектируемую функцию как рекомендовал BritishColonist, подставил в нее wid моба равным 0(т.е. пишем простейшую ф-цию снятия выделения с моба).
И опять вылет на создании потока в процессе((. Вроде бы все просто, но вылетает зараза и не могу разобраться почему.((
Может попробовать под библиотекой QT тоже самое написать? Только боюсь результат один и тот же будет.

Может кто-нибудь знающий посмотреть мой код в конце концов, откомпилировать, запустить и посмотреть в чем проблема? Ведь это же не сложно...
Вложения
Тип файла: rar NewBot.rar (40.4 Кб, 4 просмотров)

Последний раз редактировалось Xantrax; 06.05.2013 в 12:57.
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Подсказка] L2Walker IG вылетает клиент jonnny23 Заявки на настройку бота 2 03.10.2012 16:52
[Подсказка] Вылетает из игры при инжекте Dll!! soniktema Общение и обсуждение, архив Point Blank 2 04.11.2011 17:55

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

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

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