Перейти к содержанию

XAMAC

Стажёры
  • Постов

    14
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Сообщения, опубликованные XAMAC

  1. 13 часов назад, Xipho сказал:

    Я бы не был так категоричен. Есть вариант попробовать подменить пакет, в котором отправлется количество бабла, или другая информация. Дело это не быстрое, но попробовать можно.

    В том то и суть что количество бабла никуда не отправляется. тут нет зависимости между сервером и клиентом как таковым, тут нет скрытой от клиента или скрытой от сервера информации  как это порой происходит в большинстве онлайн игр. Укаждого игрока запускается матч. Каждый игрок имеет информацию о действиях другого, за исключением тумана войны который отключается в 1 клик через CE, и если дейсвтия одного игрока не соответсвуют дейсвтиям на пк другого игрока происходит рассинхрон. Я пытался использовать wpe, но ни к чему добротному это не привело. 
    Это будет возможно если у вас будет доступ к пк второго игрока, вы совершаете изменения информации на своем устройстве, совершаете на его устройстве и все это за время до наступления рассинхрона. В общем тухляк) Мне кажется реальнее найти какой то баг 

  2. Это технически не возможно обойти. 
    В вашем случае можно только использовать взломаные карты с определенным набором тригеров. 

    Суть в том что вы не сможете подменить значение на хосте и клиенте одновременно, это физически не возможно. Игра так устроена что все участники сетевой игры знаю все значения и если хоть у кого то значения резко изменяются и не сходятся со значениями остальных то происходит рассинхрон. Это все равно что запустить 5 таймеров одновременно, с учетом того что каждый период времени происходит сверка времени на всех таймерах. Если хотя бы у одного отстает, игра выдает рассинхрон.

  3. 22 часа назад, IX8 сказал:


    Спасибо за ответ. А в CE можно бота написать? Или мне все таки придется учить C++ , C#  или Java

    CE это очень полезный инструмент. Не стоит опираться на него как на среду разработки. Так что я скорее отвечу нет, чем да. 
    Все будет зависеть исключительно от того какого именно бота вы планируете писать, пиксельные боты могут быть написаны на autoit при этом иметь небольшой функционал но считаться поистине самыми безопасными.
    Если писать бота In game то для вас открываются огромные просторы в написании ботов. Я бы сделал это как c++ core и lua sol wraper для написание сценарие через луа и передачу их в ядро чита на c++. Но  для начала вам потребуется достаточно не мало изучить. Начните с простого поиска информации об игроке, позиции, рисвании линий от обьекта к обьекту на простом c++... Еще есть вариант написать external чит... Тут можно расписывать на целую книгу, этой информации полно в интернете. Есть огромная база знаний по всему миру хакинга на UC вики (не реклама). Начинаешь с простых assault cube, изучаешь простые основы а дальше пойдет попляшет)

    • Понравилось 2
  4. В 06.07.2020 в 06:46, IX8 сказал:

    Так-то оно так... Я это понимаю, что все данные хранятся на сервере, и что сервер, прежде чем принять от вас пакет сверяет его с своим лежащим на сервере.

    Но тут другое.... 

    Игра старая. Большинтсво дюпов пофикшены. Если дюп сделали не вы и он попал к вам в руки то скорее всего он уже не работает. Никто не станет делиться дойной коровой.
    CheatEngine это лишь инструмент для взаимодействия с клиентом, но не с сервером. Есть несколько вариантов убедить сервер принять ваши изменения со стороны клиента, но думаю что с CE в данной игре вы максимум можете поискать смещения или написать простые сценарии. Многим проще написать бота для взаимодействия с игровыми пакетами отправляемыми на сервер. Бот действительно может принести какую то пользу, а его написание продвинет ваши навыки программирования.  Дюпы почти всегда очень быстро обнаруживают, фиксят, а валюту откатывают, еще сверху бан могут прописать. Да и для поиска дюпа нада обладать очень большим набором знаний, порой приходиться разобрать игру по мельчайшим кусочкам ради небольших приемуществ. 

  5. Несколько советов:
    1. Забудьте про pubg lite или pubg. Таблицу к CE либо уже пофиксили либо скоро пофиксят, потому что она основывается на глупости разработчиков которые позволили вручную отключить античит. 
    2. Трейнер что вы используете не имеет ничего общего с полноценным ESP.
    3. Античит и игра катастровически тяжелая если использовать её как точку входа в написание читов, лучше начать с чего то более простого - esp в кс. 

    4. Любое есп построено на чтении информации из игры и выведении её на экран например через d3d9, через CE вы можете узнать необходимые смещения для взаимодействия и чтения данных из игры.
    5. internal в pubg это самоубийство.

    6. на 90% уверен что ваш чит окажется detect до тех пор пока вы не напишите собственный драйвер.
    PS Лично разработкой под пабг не занимаюсь, но есть знакомые которые очень красочно расказывают с какими трудностями приходиться столкнуться.
    Выбери другую игру для тренировок, посмотри видеоуроки кодера, разберись как устроен external esp от кенгда, досконально до каждой функции, попробуй другую игру. Написать ESP даже для пабг не сложно, но обойти BE получается только единицам

    • Понравилось 1
    • Плюс 1
  6. Если это ммо, то в таком случае ты можешь отследить пакеты которые отправляются на сервер когда игрок прожимает банку с хп. В дальнейшем пишем проверку хп, если ниже указнного отправляем пакеты на сервер. Можешь взглянуть на какие нибудь исходники ботов использующих пакеты в л2 например. Если речь идет о боте который в пасивном режиме что то делает, то придеться либо работать с пакетами либо с памятью. Эмуляция клавиш не подходит, потому что окно окажется неактивным и эмуляция будет уходить в некуда. 

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

  7. Данная игра целиком и полностью работает на стороне сервера, вся информация и т.д. храниться на сервере. В данном случае нужен не трейнер или в злом, а скорее дюп, если это в данной игре возможно. Даже в современных и старых мморпг где часть обработки происходила на клиенте нельзя было манипулировать через CE на игровую валюту, только посредством нахождения багов/дюпов/недоработок игр. И как правило разработчики тщательно отслеживают резкие скачки прироста валюты у игрока.

  8. Пытаюсь отрисовать динамичные линии от объекта до объекта внутри игры league of legends

    Со статичными линиями я разобрался. но как только потребовалось использовать world to screen началось самое интересное

    Рисовать собираюсь с помощью следующего кода
    Статичное изображение с помощью аналогичного кода отрисовать не проблема

    DrawLine(myScreenPos.x, myScreenPos.y, enemyScreenPos.x, enemyScreenPos.y, 1.0f, Colors.White)
    

     

    Однако когда я пытаюсь взаимодействовать с W2S таким образом

    	Vector2D myScreenPos = WorldToScreen(me.pos.x, me.pos.y, me.pos.z)
    	Vector2D enemyScreenPos = WorldToScreen(enemy.pos.x, enemy.pos.y, enemy.pos.z)

     

    получаю следующего рода ошибку:

     


    "не существует подходящего определяемого пользователем преобразования из D3DXVECTOR2 в Vector2D"

    Изображение ошибки

     

    worldtoscreen

    Спойлер
    
    
    	D3DXMATRIX* D3DXMatrixMultiply(D3DXMATRIX* pOut, const D3DXMATRIX* pM1, const D3DXMATRIX* pM2)
    	{
    		if (pOut == NULL) {
    			pOut = D3DXMatrixIdentity(pOut);
    		}
    
    		pOut->_11 = pM1->_11 * pM2->_11 + pM1->_12 * pM2->_21 + pM1->_13 * pM2->_31 + pM1->_14 * pM2->_41;
    		pOut->_12 = pM1->_11 * pM2->_12 + pM1->_12 * pM2->_22 + pM1->_13 * pM2->_32 + pM1->_14 * pM2->_42;
    		pOut->_13 = pM1->_11 * pM2->_13 + pM1->_12 * pM2->_23 + pM1->_13 * pM2->_33 + pM1->_14 * pM2->_43;
    		pOut->_14 = pM1->_11 * pM2->_14 + pM1->_12 * pM2->_24 + pM1->_13 * pM2->_34 + pM1->_14 * pM2->_44;
    		pOut->_21 = pM1->_21 * pM2->_11 + pM1->_22 * pM2->_21 + pM1->_23 * pM2->_31 + pM1->_24 * pM2->_41;
    		pOut->_22 = pM1->_21 * pM2->_12 + pM1->_22 * pM2->_22 + pM1->_23 * pM2->_32 + pM1->_24 * pM2->_42;
    		pOut->_23 = pM1->_21 * pM2->_13 + pM1->_22 * pM2->_23 + pM1->_23 * pM2->_33 + pM1->_24 * pM2->_43;
    		pOut->_24 = pM1->_21 * pM2->_14 + pM1->_22 * pM2->_24 + pM1->_23 * pM2->_34 + pM1->_24 * pM2->_44;
    		pOut->_31 = pM1->_31 * pM2->_11 + pM1->_32 * pM2->_21 + pM1->_33 * pM2->_31 + pM1->_34 * pM2->_41;
    		pOut->_32 = pM1->_31 * pM2->_12 + pM1->_32 * pM2->_22 + pM1->_33 * pM2->_32 + pM1->_34 * pM2->_42;
    		pOut->_33 = pM1->_31 * pM2->_13 + pM1->_32 * pM2->_23 + pM1->_33 * pM2->_33 + pM1->_34 * pM2->_43;
    		pOut->_34 = pM1->_31 * pM2->_14 + pM1->_32 * pM2->_24 + pM1->_33 * pM2->_34 + pM1->_34 * pM2->_44;
    		pOut->_41 = pM1->_41 * pM2->_11 + pM1->_42 * pM2->_21 + pM1->_43 * pM2->_31 + pM1->_44 * pM2->_41;
    		pOut->_42 = pM1->_41 * pM2->_12 + pM1->_42 * pM2->_22 + pM1->_43 * pM2->_32 + pM1->_44 * pM2->_42;
    		pOut->_43 = pM1->_41 * pM2->_13 + pM1->_42 * pM2->_23 + pM1->_43 * pM2->_33 + pM1->_44 * pM2->_43;
    		pOut->_44 = pM1->_41 * pM2->_14 + pM1->_42 * pM2->_24 + pM1->_43 * pM2->_34 + pM1->_44 * pM2->_44;
    
    		return pOut;
    	}
    
    
    	D3DXVECTOR2 WorldToScreen(D3DXVECTOR3 pos)
    	{
    		Renderer* ritorender = (Renderer*) * (DWORD*)(baseAddr + oRenderer);
    		D3DXMATRIX viewMatrix = ritorender->viewMatrix(); //1
    		D3DXMATRIX projMatrix = ritorender->projMatrix(); //2
    
    		D3DXVECTOR2 returnVec = D3DXVECTOR2();
    		D3DXVECTOR2 screen = D3DXVECTOR2(1280, 720);
    
    		D3DXMATRIX* matrix = new D3DXMATRIX();
    		D3DXMatrixMultiply(matrix, &viewMatrix, &projMatrix);
    
    
    		D3DXVECTOR4 clipCoords = D3DXVECTOR4();
    
    		clipCoords.x = pos.x * matrix->_11 + pos.y * matrix->_21 + pos.z * matrix->_31 + matrix->_41;
    		clipCoords.y = pos.x * matrix->_12 + pos.y * matrix->_22 + pos.z * matrix->_32 + matrix->_42;
    		clipCoords.z = pos.x * matrix->_13 + pos.y * matrix->_23 + pos.z * matrix->_33 + matrix->_43;
    		clipCoords.w = pos.x * matrix->_14 + pos.y * matrix->_24 + pos.z * matrix->_34 + matrix->_44;
    
    
    		if (clipCoords[3] < 0.1f)
    			return returnVec;
    
    		D3DXVECTOR3 M = D3DXVECTOR3();
    		M.x = clipCoords.x / clipCoords.w;
    		M.y = clipCoords.y / clipCoords.w;
    		M.z = clipCoords.z / clipCoords.w;
    
    		returnVec.x = (screen.x / 2 * M.x) + (M.x + screen.x / 2);
    		returnVec.y = -(screen.y / 2 * M.y) + (M.y + screen.y / 2);
    		return returnVec;
    	
    		
    	
    	}

     

     

    Vector.h

    Спойлер
    
    #pragma once
    #include <Windows.h>
    #include <math.h>
    #include <cmath>
    
    struct Vector
    {
    	float X, Y, Z;
    
    	inline Vector(void) {};
    	inline Vector(const float x, const float y, const float z)
    	{
    		X = x; Y = y; Z = z;
    	}
    
    
    
    	inline Vector operator + (const Vector& A) const
    	{
    		return Vector(X + A.X, Y + A.Y, Z + A.Z);
    	}
    
    	inline Vector operator + (const float A) const
    	{
    		return Vector(X + A, Y + A, Z + A);
    	}
    
    	inline Vector operator * (const float A) const
    	{
    		return Vector(A * X, A * Y, A * Z);
    	}
    
    	inline Vector operator * (const Vector& A) const
    	{
    		return Vector(A.X * X, A.Y * Y, A.Z * Z);
    	}
    
    	inline Vector operator - (const float A) const
    	{
    		return Vector(A * X, A * Y, A * Z);
    	}
    
    	inline Vector operator - (const Vector& A) const
    	{
    		return Vector(A.X - X, A.Y - Y, A.Z - Z);
    	}
    
    	inline Vector operator / (const float A) const
    	{
    		return Vector(A / X, A / Y, A / Z);
    	}
    
    	inline Vector operator / (const Vector& A) const
    	{
    		return Vector(A.X / X, A.Y / Y, A.Z / Z);
    	}
    
    	float dot(const Vector& vec) const
    	{
    		return X * vec.X + Y * vec.Y + Z * vec.Z;
    	}
    
    	inline float lengthSquared()
    	{
    		return X * X + Y * Y + Z * Z;
    	}
    
    	float lengthSquared() const
    	{
    		return X * X + Y * Y + Z * Z;
    	}
    
    	inline float length()
    	{
    		return (float)sqrt(lengthSquared());
    	}
    
    	float length() const
    	{
    		return (float)sqrt(lengthSquared());
    	}
    
    	Vector perpendicularTo()
    	{
    		return Vector(Z, Y, -X);
    	}
    
    	inline Vector Normalize()
    	{
    		float length = this->length();
    		if (length != 0)
    		{
    			float inv = 1.0f / length;
    			X *= inv;
    			Y *= inv;
    			Z *= inv;
    		}
    		return Vector(X, Y, Z);
    	}
    
    	inline float DistTo(const Vector& A) {
    		float out = sqrtf(powf(X - A.X, 2) + powf(Y - A.Y, 2) + powf(Z - A.Z, 2));
    		return out < 0 ? out * -1 : out;
    	}
    
    	float Dot(const Vector& vOther) const
    	{
    		return (X * vOther.X + Y * vOther.Y + Z * vOther.Z);
    	}
    
    	Vector Normalized() const
    	{
    		float length = this->length();
    		float x, y, z;
    		if (length != 0)
    		{
    			float inv = 1.0f / length;
    			x *= inv;
    			y *= inv;
    			z *= inv;
    		}
    		return Vector(x, y, z);
    	}
    
    	static Vector crossProduct(Vector a, Vector b)
    	{
    		Vector n;
    
    		n.X = a.X * b.Z - a.Z * b.Y;
    		n.Y = a.Z * b.X - a.X * b.Z;
    		n.Z = a.X * b.Y - a.Y * b.X;
    
    		return n;
    	}
    
    	Vector ProjectionOn(const Vector& vOther) const
    	{
    		Vector toProject = Vector(X, Y, Z);
    		float scale = (toProject.Dot(vOther)) / (vOther.Dot(vOther));
    		return vOther * scale;
    	}
    
    	Vector sameDirectionAs(const Vector& vOther)
    	{
    		return vOther.Normalized() * this->length();
    	}
    
    	Vector to2D()
    	{
    		return Vector(this->X, 0, this->Z);
    	}
    
    	static float angleBetween(Vector u, Vector v)
    	{
    		u.Normalized();
    		v.Normalized();
    		return std::acos(u.Dot(v));
    	}
    	float x = this->X;
    	float y = this->Y;
    	float z = this->Z;
    
    };
    struct Vector2D
    {
    	float X, Y, Z;
    
    	inline Vector2D(void) {}
    	inline Vector2D(const float x, const float y, const float z) {
    		X = x;
    		Y = y;
    		Z = z;
    	}
    
    
    	inline Vector2D operator+(const Vector& A) const {
    		return Vector2D(X + A.X, Y + A.Y, Z + A.Z);
    	}
    
    	inline Vector2D operator+(const float A) const {
    		return Vector2D(X + A, Y + A, Z + A);
    	}
    
    	inline Vector2D operator*(const float A) const {
    		return Vector2D(A * X, A * Y, A * Z);
    	}
    
    	inline Vector2D operator*(const Vector& A) const {
    		return Vector2D(A.X * X, A.Y * Y, A.Z * Z);
    	}
    
    	inline Vector2D operator-(const float A) const {
    		return Vector2D(A * X, A * Y, A * Z);
    	}
    
    	inline Vector2D operator-(const Vector& A) const {
    		return Vector2D(A.X - X, A.Y - Y, A.Z - Z);
    	}
    
    	inline Vector2D operator/(const float A) const {
    		return Vector2D(A / X, A / Y, A / Z);
    	}
    
    	inline Vector2D operator/(const Vector& A) const {
    		return Vector2D(A.X / X, A.Y / Y, A.Z / Z);
    	}
    
    	float dot(const Vector2D& vec) const {
    		return X * vec.X + Y * vec.Y + Z * vec.Z;
    	}
    
    	inline float lengthSquared() {
    		return X * X + Y * Y + Z * Z;
    	}
    
    	inline float length() {
    		return (float)sqrt(lengthSquared());
    	}
    
    	inline Vector2D perpendicularTo() {
    		return Vector2D(Z, Y, -X);
    	}
    
    	inline Vector2D Normalize() {
    		float length = this->length();
    		if (length != 0) {
    			float inv = 1.0f / length;
    			X *= inv;
    			Y *= inv;
    			Z *= inv;
    		}
    		return Vector2D(X, Y, Z);
    	}
    };

     

     

     

    Собственно вопрос как это поправить, уже пару дней голову ломаю а годных материалов так и не нашел, хотя по логике понимаю что ошибка пустяковая

    Тапками не  кидайте, learncpp уже в 3х браузерах по 40 вкладок :D 

     

  9. По уроку кодера пытаюсь получить pID процесса, но имею ошибку следующего типа "C++ аргумент типа const char* несовместим с параметром типа char*"
    Вот мой код: 

    Спойлер
    
    #include <Windows.h>
    #include <TlHelp32.h>
    #include <string>
    #include <conio.h>
    #include <iostream>
    
    using namespace std;
    
    DWORD GetProcesByName(char* pName)
    
    {
    	DWORD pID = 0;
    	HANDLE snapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    	PROCESSENTRY32 pInfo;
    	pInfo.dwSize = sizeof(PROCESSENTRY32);
    
    	if (Process32First(snapShot, &pInfo))
    	{
    		while (Process32Next(snapShot, &pInfo))
    		{
    			if (_stricmp(pName, pInfo.szExeFile) == 0)
    			{
    				pID = pInfo.th32ProcessID;
    				break;
    				CloseHandle(snapShot);
    				return pID;
    			}
    		}
    	}
    	CloseHandle(snapShot);
    	return 0;
    }
    	
    
    int main() {
    	
    	DWORD pID = GetProcesByName("calculator.exe");
    	cout << pID ;
    	return 0;
    }
    
    
    

     

    Проверил несколько раз, у кодера написано так же и никаких синтактических ошибок нет, у меня же в этом месте какая то ошибка GetProcesByName("calculator.exe");
    Пытался гуглить, но таки не смог понять истинную причину

    Вроде бы понимаю каждую строчку написаного кода, но что то явно пошло не так)

    UPD!
    Нашел решение добавлением const в  DWORD GetProcesByName(const char* pName)
    Надеюсь это не внесет существенных ошибок в следующий код
     

  10. 51 минуту назад, partoftheworlD сказал:

    Нет, мне кажется даже глупо спрашивать о таком. Язык лишь инструмент автоматизации, а не супер-пупер инструмент позволяющий взламывать игры.

     

    Я имел ввиду направленность урока, хотя вы совершенно правы.

     

    52 минуты назад, partoftheworlD сказал:

    В интернете их полно, тем более для CSS, каждый кому не лень пишет и выкладывает esp. Первый результат в поиске.

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

     

    53 минуты назад, partoftheworlD сказал:

    Не самый разумный подход, если есть желания и дальше продолжать в этой области, надо знать возможности языка, чтобы использовать именно так как тебе нужно. А если это спонтанное желание у которого нет будущего, то проще посмотреть на исходники читов на гитхабе и не тратить  впустую время. И с чего у всех какие-то странные временные отрезки по изучению языка в 5 лет, тот же C++ и за 10 лет выучить не удастся, и изучить все его возможности.

    На самом деле желание не спонтанное, а достаточно долгое время вынашиваемое в голове, вопрос был лишь в количестве знаний, времени и усидчивости, ну и зрелости наверно, совсем недавно понял, что вполне повзрослел как психологически так и с точки зрения усваиваемого материала к серьезным разработкам. Раньше занимался исключительно автоматизацией игрового процесса в ММО, но совсем недавно написал тригер на AutoIT за 5 строчек "условно" ну и как то пошло поехало)

    Большое спасибо за советы, учту замечания)

  11. Загорелся желанием попробовать свои навыки в разработке читов, за свою жизнь пару раз сталкивался с CE, но дальше взлома денег и патронов  сингл играх не ушел. Практиковал свои навыки с помощью старенькой WPE PRO в WOW и L2 (Ботоводство и прочие прелести перехвата пакетов между сервером и игроков). Для начал решил взять что то более простенькое для начала, выбор пал на CS:S v34, из соображений большого количества материала по его предкам. 

     

    Перечитал кучу материала на вашем форуме, а так же посмотрел видео курсы G66

    Из видеокурса кенга, научился выходить на структуру игрока, а так же считать смещения.

    Дальнейшим этапом стало написание кода для чтения памяти и вывода её в консольное приложение

    Была скачана VS2019
    К большому несчастью обнаружил что код кенга реализован на C в то время когда я собрался програмировать на C++ и первоначальные попытки загнать его код в свое консольное приложение выдало десятки ошибок.

    Собственно из вышесказанного прошу подсказать относительно следующих моментов:

    1. Есть ли в сети видеокурсы (Желательно на русском ) по ЯП С++ нацеленные на область взлома игр, если есть прошу скинуть ссылку т.к. уже 4й день поисков и гугления морочит голову а все что я обнаружил это английский видеокурс по созданию aimbot"a
    2. Возможно у кого то есть готовый код ESP на source версию игры, что бы я мог проанализировать каждый шаг.
    Собственно застопорился на моменте написания на C++, какие то основы были изучены в университете, но их явно не достаточно для нынешних задач, поэтому хотелось бы разбираться на конкретном примере,  а не учить C++ с нуля в течении лет 5 , я не ленив и готов тратить много времени на изучение, но в пределах разумного

    Готов ответить на любые вопросы, к критике полностью готов.

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.