|
Вылетает клиент при инжекте - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
06.05.2013, 13:34
|
#16
|
|
|
|
Рыцарь-капитан
|
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
|
Re: Вылетает клиент при инжекте
вот
http://zhyk.ru/forum/showthread.php?t=207760
тут вроде подробно для новичков расписано
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
|
|
|
06.05.2013, 13:58
|
#17
|
|
|
|
Разведчик
|
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Вылетает клиент при инжекте
Да ё моё. Ginrey неужели вы думаете, что я не смотрел эту тему?
Там Делфи, но тем не менее я попробую все это привести сегодня к Visual C++. Но, лучше бы сказать, что конкретно на примере моего кода не так. Почему он вызывает вылет клиента игры?
|
|
|
06.05.2013, 15:22
|
#18
|
|
|
|
Рыцарь-капитан
|
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
|
Re: Вылетает клиент при инжекте
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
|
|
|
06.05.2013, 19:55
|
#19
|
|
|
|
Разведчик
|
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Вылетает клиент при инжекте
Если вы смотрели мой код, то там фактически тот же код, что и в рекомендуемом вами примере.
Еще меня убивает фраза о том, что вы не знакомы с С++. Ну что значит не знаком? Вы же в Делфи используете WinApi? Так а в программе исключительно 3 функции, первая определяет PID клиента, вторая это ассемблерная вставка, ну и третья использует исключительно WinApi функции, итого 2 из трех функции как минимум вы знаете. Что там разбираться то? Я же в Делфи могу разобраться.
Очередной проект и очередные вылетания клиента.
|
|
|
06.05.2013, 21:00
|
#20
|
|
|
|
Разведчик
|
Регистрация: 27.11.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Вылетает клиент при инжекте
|
Цитата: |
|
|
|
|
|
|
|
|
|
Если вы смотрели мой код, то там фактически тот же код, что и в рекомендуемом вами примере.
Еще меня убивает фраза о том, что вы не знакомы с С++. Ну что значит не знаком? Вы же в Делфи используете WinApi? Так а в программе исключительно 3 функции, первая определяет PID клиента, вторая это ассемблерная вставка, ну и третья использует исключительно WinApi функции, итого 2 из трех функции как минимум вы знаете. Что там разбираться то? Я же в Делфи могу разобраться.
Очередной проект и очередные вылетания клиента.
|
|
|
|
|
|
могли бы не заморачиваться на эту тему,в этой теме прочитайте раздел пакеты http://zhyk.ru/forum/showthread.php?t=414162 там все работает,но вот к сожалению движение пакетами тяжко осуществлять,но это уже моя история)
|
|
|
06.05.2013, 21:35
|
#21
|
|
|
|
Разведчик
|
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Вылетает клиент при инжекте
|
|
|
06.05.2013, 22:09
|
#22
|
|
|
|
Разведчик
|
Регистрация: 27.11.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Вылетает клиент при инжекте
|
|
|
07.05.2013, 00:22
|
#23
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Вылетает клиент при инжекте
|
Цитата: |
|
|
|
|
|
|
|
|
|
Еще меня убивает фраза о том, что вы не знакомы с С++. Ну что значит не знаком? Вы же в Делфи используете WinApi? Так а в программе исключительно 3 функции, первая определяет PID клиента, вторая это ассемблерная вставка, ну и третья использует исключительно WinApi функции, итого 2 из трех функции как минимум вы знаете. Что там разбираться то? Я же в Делфи могу разобраться.
|
|
|
|
|
|
Зря тебя это убивает, это равносильно, например, знанию английского языка: прочитать и перевести могу, а вот самому составить предложение по всем правилам грамматики врядли получится.
Я например тоже не знаю С++, прочитать код могу, составить на Дельфи похожий тоже, но исправить ошибку на С++, даже если ее увижу скорее всего не смогу.
Для начала, если уж ты решил инжектить асмокод, проверь все ли переменные правильно передаются в функцию, например pid. Попробуй считать характеристики своего перса и т.д.
|
Цитата: |
|
|
|
|
|
|
|
|
|
Я же в Делфи могу разобраться.
|
|
|
|
|
|
Тогда не вижу проблемы переписать функции из моего предыдущего поста, под свои нужды. То, что они рабочие и содержат адреса под текущую версию руофа я тебе гарантирую на 100%
Последний раз редактировалось fds255; 07.05.2013 в 00:25.
|
|
|
07.05.2013, 08:22
|
#24
|
|
|
|
Разведчик
|
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Вылетает клиент при инжекте
PID передается точно правильный. HP, MP, LVL перса, координаты моба я уже считывал с клиента и все правильно. PID не передается в функцию, эта переменная объявлена глобально (DWORD pid; (DWORD = unsigned int)).
Последний раз редактировалось Xantrax; 07.05.2013 в 08:26.
|
|
|
07.05.2013, 09:52
|
#25
|
|
|
|
Рыцарь-капитан
|
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
|
Re: Вылетает клиент при инжекте
|
Цитата: |
|
|
|
|
|
|
|
|
|
Если вы смотрели мой код, то там фактически тот же код, что и в рекомендуемом вами примере.
Еще меня убивает фраза о том, что вы не знакомы с С++. Ну что значит не знаком? Вы же в Делфи используете WinApi? Так а в программе исключительно 3 функции, первая определяет PID клиента, вторая это ассемблерная вставка, ну и третья использует исключительно WinApi функции, итого 2 из трех функции как минимум вы знаете. Что там разбираться то? Я же в Делфи могу разобраться.
Очередной проект и очередные вылетания клиента.
|
|
|
|
|
|
я беру выше, идеально правильный инжект , как на Delphi в С++ я построить не смогу, именно перевести с одного языка на другой
|
Цитата: |
|
|
|
|
|
|
|
|
|
PID передается точно правильный. HP, MP, LVL перса, координаты моба я уже считывал с клиента и все правильно. PID не передается в функцию, эта переменная объявлена глобально (DWORD pid; (DWORD = unsigned int)).
|
|
|
|
|
|
PID вообще используют как идентификатор окна, если несколько окон игры , то через него можно выбрать к какому именно присоединяться
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
|
|
|
08.05.2013, 00:42
|
#26
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Вылетает клиент при инжекте
Xantrax,
если еще актуально, лови функцию инжекта:
Код:
BYTE Inject(void* Func, void* Params)
{
DWORD* pfunc;
DWORD* paramaddr;
DWORD* lpNumberOfBytes = NULL;
HANDLE hProcThread;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,Form1->pid);
pfunc = (DWORD*) VirtualAllocEx(hProcess,NULL,250,MEM_COMMIT,PAGE_READWRITE);
WriteProcessMemory(hProcess,pfunc,Func,250,lpNumberOfBytes);
paramaddr=(DWORD*) VirtualAllocEx(hProcess, NULL,250, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess,paramaddr,Params,250,lpNumberOfBytes);
hProcThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)pfunc,paramaddr,NULL,lpNumberOfBytes);
WaitForSingleObject(hProcThread,INFINITE);
CloseHandle(hProcThread);
CloseHandle(hProcess);
VirtualFreeEx(hProcess, paramaddr,0, MEM_RELEASE);
VirtualFreeEx(hProcess, pfunc,0, MEM_RELEASE);
return 1;
}
пришлось таки залезть в С++ для проверки.
|
|
|
09.05.2013, 10:41
|
#27
|
|
|
|
Разведчик
|
Регистрация: 27.11.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Вылетает клиент при инжекте
|
Цитата: |
|
|
|
|
|
|
|
|
|
Xantrax,
если еще актуально, лови функцию инжекта:
Код:
BYTE Inject(void* Func, void* Params)
{
DWORD* pfunc;
DWORD* paramaddr;
DWORD* lpNumberOfBytes = NULL;
HANDLE hProcThread;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,Form1->pid);
pfunc = (DWORD*) VirtualAllocEx(hProcess,NULL,250,MEM_COMMIT,PAGE_READWRITE);
WriteProcessMemory(hProcess,pfunc,Func,250,lpNumberOfBytes);
paramaddr=(DWORD*) VirtualAllocEx(hProcess, NULL,250, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess,paramaddr,Params,250,lpNumberOfBytes);
hProcThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)pfunc,paramaddr,NULL,lpNumberOfBytes);
WaitForSingleObject(hProcThread,INFINITE);
CloseHandle(hProcThread);
CloseHandle(hProcess);
VirtualFreeEx(hProcess, paramaddr,0, MEM_RELEASE);
VirtualFreeEx(hProcess, pfunc,0, MEM_RELEASE);
return 1;
}
пришлось таки залезть в С++ для проверки.
|
|
|
|
|
|
если он пишет по гайду вот этому http://zhyk.ru/forum/showthread.php?t=414162,то с функцией - инжекта у него все впорядке,там проблема с asm вставкой
|
|
|
09.05.2013, 20:25
|
#28
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Вылетает клиент при инжекте
aloned,
Я не говорю, что в указанной тобой теме неверная функция инжекта, в принципе я ее почти продублировал, т.е. просто добавил выделение памяти.
asm вставка у Xantrax верная, т.к. я начал проверять в С++ его код, не сработала как раз функция инжекта.
Для подтверждения приведу полный код:
Unit1.h
Код:
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Tlhelp32.h>
//---------------------------------------------------------------------------
#define BA 0x00B8FBCC
#define D_GA 0x1C
//Смещения до структуры моба
#define M_D1 0x1C
#define M_D2 0x24
//Начало структуры моба BA + D_GA + M_D1 + M_D2 +
#define M_STRUCT 0x18
//Параметры моба
#define TYPE_MOB 0x0B4
#define WID_MOB 0x120
#define DIST_MOB 0x284
#define Random 0x4
#define Mobname 0x260
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TListBox *ListBox1;
TButton *Button2;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
private:
// User declarations
public:
DWORD pid [200] ;
Integer i;
// User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Unit1.cpp
Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <Tlhelp32.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//=====================================================================================================
// Чтение PID значений из памяти
//=====================================================================================================
DWORD PidbyName(char* nameofprogram)
{
Form1->i=0;
HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 ProcessEntry;
ProcessEntry.dwSize = sizeof(ProcessEntry);
BOOL Loop = Process32First(pHandle,&ProcessEntry);
char str[64];
while(Loop)
{
if(strcmp(ProcessEntry.szExeFile, nameofprogram) == 0)
{
Form1->i++;
Form1->pid[Form1->i] = ProcessEntry.th32ProcessID;
Form1->ListBox1->Items->Add(itoa(Form1->pid[Form1->i], str, 10));
}
Loop = Process32Next(pHandle, &ProcessEntry);
}
CloseHandle(pHandle);
return 0;
}
//=====================================================================================================
// Функция Таргета моба
//=====================================================================================================
void Target_THREAD()
{
DWORD wid = 0;
DWORD func = 0x00693D60;
_asm
{
MOV EAX,DWORD PTR DS:[BA]
PUSH wid
MOV ECX,DWORD PTR DS:[EAX+0x20]
ADD ECX,0x0EC
CALL func
}
}
//=====================================================================================================
// Инжектирующая функция
//=====================================================================================================
BYTE Inject(void* Func, void* Params)
{
DWORD* pfunc;
DWORD* paramaddr;
DWORD* lpNumberOfBytes = NULL;
HANDLE hProcThread;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,Form1->pid[Form1->ListBox1->ItemIndex+1]);
pfunc = (DWORD*) VirtualAllocEx(hProcess,NULL,250,MEM_COMMIT,PAGE_READWRITE);
WriteProcessMemory(hProcess,pfunc,Func,250,lpNumberOfBytes);
paramaddr=(DWORD*) VirtualAllocEx(hProcess, NULL,250, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess,paramaddr,Params,250,lpNumberOfBytes);
hProcThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)pfunc,paramaddr,NULL,lpNumberOfBytes);
WaitForSingleObject(hProcThread,INFINITE);
CloseHandle(hProcThread);
CloseHandle(hProcess);
VirtualFreeEx(hProcess, paramaddr,0, MEM_RELEASE);
VirtualFreeEx(hProcess, pfunc,0, MEM_RELEASE);
return 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
PidbyName("elementclient.exe");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Inject(&Target_THREAD,0);
}
//---------------------------------------------------------------------------
На форме помещаем один ListBox, и две кнопки Button
1) По нажатии на первую кнопку в ListBox1 выводятся pid всех запущенных процессов с именем elementclient.exe
2) Выделяем в ListBoxе процесс в который будем инжектить функцию
3) Жмем кнопку Button2, при этом если у вас в таргете был кто-либо , таргет должен быть сброшен.
Последний раз редактировалось fds255; 28.05.2013 в 22:16.
|
|
|
28.05.2013, 20:38
|
#29
|
|
|
|
Разведчик
|
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Вылетает клиент при инжекте
|
|
|
28.05.2013, 22:23
|
#30
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Вылетает клиент при инжекте
Xantrax2150198,
|
Цитата: |
|
|
|
|
Сообщение от Xantrax2150198 |
|
|
|
|
|
|
|
MOV EAX,DWORD PTR DS:[BA]//0x00B3F6CC
|
|
|
|
|
|
вот здесь MOV EAX,DWORD PTR DS:[BA] //0x00B3F6CC ))))))))))))))
поправил предыдущий пост
по поводу краша клиента, посмотри внимательно вот эту строку:
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,Form1->pid[Form1->ListBox1->ItemIndex+1]);
а конкретнее, на переменную pid[Form1->ListBox1->ItemIndex+1] и проверь как у тебя передается эта переменная в функцию
попробуй запустить игру, и в С++ указать pid напрямую цифрами, скомпилируй прогу, и проверь, если клиент не вылетит, то неверно передаешь именно эту переменную
Код, который я привел в предыдущем посте на 100% рабочий, сам лично писал и проверял.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 03:11.
|
|