-
Постов
29 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные NubZilla
-
-
Норм видео, я посмотрел полностью.
-
Приветствую хочу представить вам мой TrainMe, начального уровня.
Скриншот:
Правила:
Вы попали в лабиринт Ω, вам необходимо добратся до выхода ».
Еда + , яд #.
Начальное здоровье 3.
Начальные координаты (2, 2).
Осторожно вас ожидают ловушки!
Цели:
Базовый уровень.
Бесконечное здоровье.
При употреблении еды здоровье увеличивалось на +10.
При употреблении яда здоровье не уменьшалось.
Про уровень.
Ходить сквозь стены " █ ".
Найти и обезвредить ловушку.
- 3
-
18 часов назад, Конунг сказал:
Да, я новичок. Но суть в том, что когда ее в коде нопишь, значения у персонажей становится максимальными и не падают. Вот оригинальный код на всякий случай. Там стоят комментарии, где такой же скрипт нопами, делает максимальное значение параметров. А вот через newmem не получается. Мне кажется через него правильнее будет, чем через code. А про cmp прочитаю, спасибо за наводку.
00460115: 8B CE - mov ecx,esi
00460117: E8 BE B2 FC FF - call 0042B3DA
0046011C: 3B D8 - cmp ebx,eax //Религия
0046011E: 7D 02 - jnl 00460122
00460120: FF 07 - inc [edi]
00460122: 33 ED - xor ebp,ebp
00460124: A1 EC 7B 4F 00 - mov eax,[004F7BEC]
00460129: 8B C8 - mov ecx,eax
0046012B: D1 F9 - sar ecx,1
0046012D: 03 C1 - add eax,ecx
// ---------- INJECTING HERE ----------
0046012F: 39 86 A8 0A 00 00 - cmp [esi+00000AA8],eax //Энергия
// ---------- DONE INJECTING ----------
00460135: 7E 06 - jle 0046013D
00460137: 89 86 A8 0A 00 00 - mov [esi+00000AA8],eax
0046013D: A1 F0 7B 4F 00 - mov eax,[004F7BF0]
00460142: 8B C8 - mov ecx,eax
00460144: D1 F9 - sar ecx,1
00460146: 03 C1 - add eax,ecx
00460148: 39 86 AC 0A 00 00 - cmp [esi+00000AAC],eax //Стамина
0046014E: 7E 06 - jle 00460156
00460150: 89 86 AC 0A 00 00 - mov [esi+00000AAC],eax
00460156: A1 F4 7B 4F 00 - mov eax,[004F7BF4]Тебе или наверное всем(и мне тоже)) нужен справочник команд ассемблера; про NOP - http://www.club155.ru/x86cmd/NOP , про CMP http://www.club155.ru/x86cmd/CMP . Дело в том что когда ты нопишь инструкцию CMP. проверка не происходит и значение не меняется.
-
35 минут назад, Around сказал:
В консоли игры? Можно по подробнее?
Сначала в обычную консоль выведи количество ботов вместе с тобой или игроков в обычную консоль винды. В консоль куда новички пишут Hello World ты выведи на экран количество игроков.
Желательно в цикле чтобы ты перезаходил с различными количествами ботов, и у тебя в консоли выводилось количество игроков. То есть постоянно считывалось и выводилось.
Если выведешь количество игроков значит что ты нашел правильный указатель(наверное многоуровневый) по которому показывается количество игроков.
-
Сначала выведи в консоль количество игроков и твои координаты, удостоверся что твои оффсеты правильные.
-
Что раз никто не отвечает, отвечю я своей умной головой).
Я просто не отвечаю потому что мои сообщение часто удаляют и снижают репутацию, Так сказать указывают мне мое место а я не хочу в это место!
Михаил Ремизов Вот на этом канале ведущий сделал ESP, интернал то есть DLL который нужно заинжекить карбюратором.
Ты, как я понял хочешь сделать экстернал то есть exe файл запускаешь и у тебя отрисовывается ESP.
Ты запустил игру в оконном режиме? Такой способ будет мерцать в оконном а в полноэкранном вроде вообще отрисовыватся не будет.
Ты ввел команду -insecure вроде так? что бы отключить античит вроде VAC славится без защитностю но не настолько) Что бы так просто считывать данные из игры.
Надо понять проблемма в твоем коде или с оффсетами и нетварами.
Если сами так называемые нетвары да оффсеты и смещениями погоняющие верные, попробуй старые шутеры КС1.6 запусти с ботами и ищи нужные данные с помощю CE: Количество игроков, твою структуру, структуру врагов.
В каждой структуре хп координаты здоровье и также направление камеры X и Y, если ничего не забыл.
Сначала попробуй на КС1.6, если получится переходи на КС ГО.
Легче всего сделать на assaultcube
Спойлер#include <stdio.h> #include <stdlib.h> #include <Windows.h> #include <gdiplus.h> #include <math.h> #define FLT_MAX 3.40282347E+38F typedef struct { float x, y, z, w; } Vec4; //2 Dimensional Vector(Screen) typedef struct { float x, y; } Vec2; //3 Dimensional Vector(Ingame) typedef struct { float x, y,z; } Vec3; typedef struct { Vec3 Pos; Vec3 HeadPos; int Health,Team; char Name[20]; } Entities; typedef struct { Vec3 Pos; int Health,Team,Base; } LocalPlayer; DWORD LocalPlayerOffset=0x509B74; DWORD RVSF_Team=0x32C; DWORD Viewx=0x40; DWORD Viewy=0x44; DWORD EntityBaseOffset=0x50F4F8; DWORD PlayerCountAddress=0x50F500; DWORD xPosOffset=0x34; DWORD yPosOffset=0x38; DWORD zPosOffset=0x3c; DWORD pistolMag=0x70; DWORD RifleMag=0x128; DWORD RifleAmmo=0x150; DWORD GrenadeAmmount=0x158; DWORD PlayerSpeed=0x80; DWORD ViewMatrixAddress=0x501AE8; DWORD Health=0xF8; DWORD ForceAttack=0x224; int handle; int pid; HDC hdcAC; HWND hwndAC_Client; void MemStart(); int ReadMem(LPCVOID Address,LPVOID ReadVar,int SizeDataType); int WriteMem(LPCVOID Address,LPVOID WriteVar,int SizeDataType); int WorldToScreen(Vec3 pos, Vec2 *screen, float matrix[16], int windowWidth, int windowHeight); void DrawFilledRect(int x, int y, int w, int h,HBRUSH color); void DrawBorderBox(int x, int y, int w, int h, int thickness); void DrawHealthESP(int x, int y, int w, float h, int thickness,int Health); void DrawString(int x, int y, COLORREF color, const char* text); void ESP(Vec3 EnemyPosition,Vec3 enemyHeadPos,float Matrix[16],int PlayerHealth,char PlayerName[20]); void ReadEntityInfo(int i,Entities *ent); void ReadLocalPlayerInfo(LocalPlayer *local); Vec2 CalcAngles(Vec3 CoordsToEnemy, float distance); Vec2 vScreen, vHead; HBRUSH color; HBRUSH HealthESPColor; COLORREF TextCOLOR; HFONT Font; int EntityBase; int main() { TextCOLOR = RGB(255, 255, 255); HealthESPColor=CreateSolidBrush(RGB(0,255,0)); color=CreateSolidBrush(RGB(255,0,0)); float hypo; float newDistance; int playercountread; //Finding the PID of the process via WindowName and getting permissions to read the addresses in this process MemStart(); //if we cant get permissions while(handle==0) { printf("Start AssaultCube!\n"); getchar(); printf("Retrying...\n"); MemStart(); } Vec2 angle; while(1) { printf("\rThank you for using Rainy's Shitty Assault Cube Hack | https://github.com/RainyPT/ACHack"); hypo=FLT_MAX; newDistance=0; ReadMem(PlayerCountAddress,&playercountread,sizeof(int)); Entities entity[playercountread]; LocalPlayer local; for(int i=4; i<(playercountread*4); i+=4) { ReadLocalPlayerInfo(&local); ReadEntityInfo(i,&entity[i/4]); int newammo=1337; WriteMem(local.Base+RifleAmmo,&newammo,sizeof(int)); float viewMatrix[16]; ReadMem(ViewMatrixAddress, &viewMatrix, sizeof(viewMatrix)); if(local.Team!=entity[i/4].Team) { if(entity[i/4].Health>0) { ESP(entity[i/4].Pos,entity[i/4].HeadPos,viewMatrix,entity[i/4].Health,entity[i/4].Name); Vec3 CoordsToEnemy= {entity[i/4].Pos.x-local.Pos.x,entity[i/4].Pos.y-local.Pos.y,entity[i/4].Pos.z-local.Pos.z}; newDistance=sqrt((CoordsToEnemy.x*CoordsToEnemy.x)+(CoordsToEnemy.y*CoordsToEnemy.y)+(CoordsToEnemy.z*CoordsToEnemy.z)); if (newDistance < hypo) { hypo = newDistance; angle=CalcAngles(CoordsToEnemy,newDistance); } } } } if(GetAsyncKeyState(VK_LBUTTON)) { WriteMem(local.Base+Viewx,&angle,sizeof(angle)); } } CloseHandle(handle); return 0; } void ReadLocalPlayerInfo(LocalPlayer *local) { ReadMem(LocalPlayerOffset,&local->Base,sizeof(int)); ReadMem(local->Base+RVSF_Team,&local->Team,sizeof(int)); ReadMem(local->Base+xPosOffset,&local->Pos,sizeof(local->Pos)); } void ReadEntityInfo(int i,Entities *ent) { ReadMem(EntityBaseOffset,&EntityBase,sizeof(int)); ReadMem(EntityBase+i,&EntityBase,sizeof(int)); if(EntityBase!=0) { ReadMem(EntityBase+RVSF_Team,&ent->Team,sizeof(int)); ReadMem(EntityBase+xPosOffset, &ent->Pos, sizeof(ent->Pos)); ReadMem(EntityBase+Health, &ent->Health, sizeof(int)); ReadMem(EntityBase+0x225,&ent->Name,20); ReadMem(EntityBase+0x4, &ent->HeadPos, sizeof(ent->HeadPos)); } } Vec2 CalcAngles(Vec3 CoordsToEnemy, float distance) { Vec2 angle; angle.x = -atan2f(CoordsToEnemy.x, CoordsToEnemy.y) / M_PI * 180.0f + 180.0f; angle.y = asinf((CoordsToEnemy.z) / distance) * 180.0f / M_PI; return angle; } void ESP(Vec3 EnemyPosition,Vec3 enemyHeadPos,float Matrix[16],int PlayerHealth,char PlayerName[20]) { if(WorldToScreen(EnemyPosition,&vScreen,Matrix,1024,768)) { if(WorldToScreen(enemyHeadPos,&vHead,Matrix,1024,768)) { float height=vHead.y-vScreen.y; float width=height / 2.4f; DrawBorderBox(vScreen.x - (width / 2), vScreen.y, width, height, 2); DrawHealthESP(vScreen.x - (width / 2), vScreen.y, width, height, 3,PlayerHealth); DrawString(vScreen.x, vScreen.y, TextCOLOR, PlayerName); } } } int WorldToScreen(Vec3 pos, Vec2 *screen, float matrix[16], int windowWidth, int windowHeight) // 3D to 2D { //Matrix-vector Product, multiplying world(eye) coordinates by projection matrix = clipCoords Vec4 clipCoords; clipCoords.x = pos.x*matrix[0] + pos.y*matrix[4] + pos.z*matrix[8] + matrix[12]; clipCoords.y = pos.x*matrix[1] + pos.y*matrix[5] + pos.z*matrix[9] + matrix[13]; clipCoords.z = pos.x*matrix[2] + pos.y*matrix[6] + pos.z*matrix[10] + matrix[14]; clipCoords.w = pos.x*matrix[3] + pos.y*matrix[7] + pos.z*matrix[11] + matrix[15]; if (clipCoords.w < 0.1f) return 0; //perspective division, dividing by clip.W = Normalized Device Coordinates Vec3 NDC; NDC.x = clipCoords.x / clipCoords.w; NDC.y = clipCoords.y / clipCoords.w; NDC.z = clipCoords.z / clipCoords.w; //Transform to window coordinates screen->x=(windowWidth / 2 * NDC.x) + (NDC.x + windowWidth / 2); screen->y=-(windowHeight / 2 * NDC.y) + (NDC.y + windowHeight / 2); return 1; } void DrawFilledRect(int x, int y, int w, int h,HBRUSH color) { RECT rect = { x, y, x + w, y + h}; FillRect(hdcAC, &rect, color); } void DrawBorderBox(int x, int y, int w, int h, int thickness) { DrawFilledRect(x+2, y, w-2, thickness,color); DrawFilledRect(x, y, thickness, h,color); DrawFilledRect((x + w), y, thickness, h,color); DrawFilledRect(x, y + h, w + thickness, thickness,color); } void DrawHealthESP(int x, int y, int w, float h, int thickness,int health) { h=h*((float)health/100); DrawFilledRect(x+5, y, thickness, h,HealthESPColor); } void DrawString(int x, int y, COLORREF color, const char* text) { SetTextAlign(hdcAC, TA_CENTER | TA_NOUPDATECP); SetBkColor(hdcAC, RGB(0, 0, 0)); SetBkMode(hdcAC, TRANSPARENT); SetTextColor(hdcAC, color); SelectObject(hdcAC, Font); TextOutA(hdcAC, x, y, text, strlen(text)); DeleteObject(Font); } void MemStart() { hwndAC_Client=FindWindow(0, "AssaultCube"); hdcAC=GetDC(hwndAC_Client); GetWindowThreadProcessId(hwndAC_Client,&pid); handle=OpenProcess(PROCESS_ALL_ACCESS,0,pid); } int ReadMem(LPCVOID Address,LPVOID ReadVar,int SizeDataType) { return ReadProcessMemory(handle,Address,ReadVar,SizeDataType,0); } int WriteMem(LPCVOID Address,LPVOID WriteVar,int SizeDataType) { return WriteProcessMemory(handle,Address,WriteVar,SizeDataType,0); }
Просто компилишь и работает нашел на Гуидед ХАКИНГ) .
-
Это как два пальца об асвальт
Начни с этого Взлом игр от "А" до "Я" , практикуйся. Это уроки от разработчиков.
Так же можно это тоже посмотреть Михаил Ремизов .
До wallhackaim еще долго, надо сначала понять основы.
-
Ты можешь найти начало структуры оружия а там и его урон и другие характеристики: точность, разброс, урон, количество патронов. Мб тебе попробовать найти патроны и найти структуру оружия и увеличить урон оружия.
-
Попробуй изменить тип отладчика в настройках и убрать галочки с перезаписью, исполняемая, запусти от админа. Игру вообще можно сканировать через CE(Cheat Engine)?
Можно сбросить настроки CE в папке программы запустив ceregreset, попробуй на крайняк.
Ты выбрал точно нужный процесс? может игра на самом деле называется другим процессом.
Возможно античит мешает сканировать?
-
Хорошо, я даже и не знал что так можно искать указатель +репу если бы мог.)
-
В 30.01.2021 в 14:23, Arimor сказал:
Спасибо, как будет возможность поставить лайк, сделаю :))
Привет я очень рад помочь)))
CETrainer.CEButton1.Caption = readInteger("50F500")
Это означает прочитать 32-битный int(readInteger) и присвоить его названию кнопке. Если бы надо прочитать строку то нужно readString.
0x50F500 это просто статический адресс где хранится количество игроков в матче.
В 30.01.2021 в 16:08, Arimor сказал:Можно поподробнее? Как внедрить это в код что выше?
openProcess("ac_client.exe")
Почему именно в процессе этого файла нужно искать данные?
Потому что мы сначала открываем нужный нам процесс, а потом читаем память этого процесса.
-
4 часа назад, Arimor сказал:
Как добавить на трейнер отображение значений найденных в памяти игры по найденным адресам?
У меня вот так получилось
function CETrainer_CEButton1Click(sender) openProcess("ac_client.exe") CETrainer.CEButton1.Caption = readInteger("50F500") end
Показывает количество игроков.
- 1
-
1 час назад, DBCooper сказал:
а xor это что?
Замудренная команда.
Цитатаxor приёмник, источник – логическое исключающее ИЛИ. Выполняет побитое логическое исключающее ИЛИ над приёмником и источником, результат заносится в приёмник. Часто используется для обнуления регистров. Например, xor ax, ax обнуляет регистр ax, и делает это быстрее, чем mov ax, 0. Этой командой следует пользоваться для обнуления регистров. Можете не бояться экзотичности этой команды. Она будет эффективно работать на любом Intel-совместимом компьютере. Эта команда официально поддерживается Intel как каманда обнуления регистра
-
У меня получилось для своей игры, теперь думаю как убрать гравитацию.
-
Впечатляет без условно, поставил бы лайк если мог.
-
Могу и сам попробовать слепить аим на эту игру.
-
Надеюсь поймешь пасту могу скинуть поделку на Си для ASSAULTCUBA.
-
Спойлер
<?xml version="1.0" encoding="utf-8"?> <CheatTable CheatEngineTableVersion="26"> <CheatEntries> <CheatEntry> <ID>0</ID> <Description>"Aimbot"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} -- Offsets local FLAG_TEAM = 0x32C local HEALTH = 0xF8 local NEXT_PLAYER = 0x4 -- The offset of the structure from one player to another local COORDINATE_X = 0x34 local COORDINATE_Y = 0x38 local COORDINATE_Z = 0x3C local ANGLE_X = 0x40 local ANGLE_Y = 0x44 local BASE_PLAYERS = getAddress('[ac_client.exe+0010F4F8]') local BASE_MY_PLAYER = getAddress('[ac_client.exe+0010F4F4]') -- Declaration of other variables local player -- Structure with all my data local enemy -- Structure with the enemy players, the targets. local amount_players -- Number of players local my_team -- Contains the necessary information to know who is on my team. local MAX_ATTEMPTS = 1000 -- Help the "UpdatePlayersData" function not to enter an infinite loop. -- To understand why this is necessary, you need to study how the player structures work in the Assalt Cube game. -- Function that updates my player information local function UpdateMyData() player = {x = readFloat(BASE_MY_PLAYER + COORDINATE_X), y = readFloat(BASE_MY_PLAYER + COORDINATE_Y), z = readFloat(BASE_MY_PLAYER + COORDINATE_Z), viewMatrix = {x = BASE_MY_PLAYER + ANGLE_X, y = BASE_MY_PLAYER + ANGLE_Y } } my_team = readInteger(BASE_MY_PLAYER + FLAG_TEAM) end --Function that updates information about players --And it's different from my team. local function UpdatePlayersData() amount_players = readInteger("ac_client.exe+10A22C")-1 enemy = {} local OFFSET = NEXT_PLAYER -- This variable contains the offset value of the current player being processed local current_player = 0 -- Contains the player base in process local counter = 0 local countPlayer = 0 while(countPlayer <= amount_players) do counter = counter + 1 if counter > MAX_ATTEMPTS then print(#enemy) return end current_player = readInteger(BASE_PLAYERS + OFFSET) if readInteger(current_player + HEALTH) then countPlayer = countPlayer + 1 if readInteger(current_player + HEALTH) >= 1 and readInteger(current_player + HEALTH) <= 1000 then -- The player exists and is alive. if readInteger(current_player + FLAG_TEAM) ~= my_team then -- If the player is my enemy enemy[#enemy+1] = {} enemy[#enemy].x = readFloat(current_player + COORDINATE_X) enemy[#enemy].y = readFloat(current_player + COORDINATE_Y) enemy[#enemy].z = readFloat(current_player + COORDINATE_Z) end end end OFFSET = OFFSET + NEXT_PLAYER end end function Aimbot() if #enemy == 0 then return end -- Returns if no address could be obtained. local differenceX = {} local differenceY = {} local differenceZ = {} local lenght = {} local lenghtXY = {} local targetX = 0 local targetY = 0 for i=1, #enemy do differenceX = enemy.x - player.x differenceY = enemy.y - player.y differenceZ = enemy.z - player.z lenght = math.sqrt(differenceX ^ 2 + differenceY ^ 2 + differenceZ ^ 2) lenghtXY = math.sqrt(differenceX ^ 2 + differenceY ^ 2) end local temp = lenght[1] local idx_bot = 1 for i=2,#lenght do if lenght < temp then idx_bot = i temp = lenght end end targetX = math.deg(math.atan2(differenceY[idx_bot], differenceX[idx_bot])) targetY = math.deg(math.atan2(differenceZ[idx_bot], lenghtXY[idx_bot])) writeFloat(player.viewMatrix.x, targetX + 90) writeFloat(player.viewMatrix.y, targetY) end function checkKeyAimbot() if isKeyPressed( VK_Q ) then if not readInteger('[ac_client.exe+0010F4F8]') then return end--The function returns if the address does not exist. UpdateMyData() UpdatePlayersData() Aimbot() end end if t1 then t1.destroy(); t1=nil end t1 = createTimer() t1.Interval = 1 t1.onTimer = checkKeyAimbot {$asm} [DISABLE] {$lua} if t1 then t1.destroy(); t1=nil end {$asm} </AssemblerScript> </CheatEntry> <CheatEntry> <ID>28</ID> <Description>"ESP"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} local window_name = "AssaultCube" local screen_width, screen_height = 0, 0 if form then form.destroy(); form=nil end form = createForm(false) form.DoubleBuffered = true form.Caption = "EspHack" form.FormStyle = "fsSystemStayOnTop" form.BorderStyle = "bsNone" form.Color = 0x000001 form.setLayeredAttributes(0x000001, 0xFF, LWA_COLORKEY | LWA_ALPHA ) form.Show() pic = createPicture() local img = createImage(form) local canvas = pic.Bitmap.Canvas -- Removes window interaction with user autoAssemble([[ alloc(mem, 100) createthread(mem) label(win_name) mem: push esi push win_name push 00 call USER32.FindWindowA mov esi,eax push -14 push esi call USER32.GetWindowLongA push 00080020 push -14 push esi call USER32.SetWindowLongA pop esi ret win_name: db 'EspHack',0 ]], true) autoAssemble([[ alloc(code, 100) registersymbol(code) ]]) --Defines the position and size of the ESP hack window. local function UpdatePos() local function UpdateForm() if t_upd_frm then t_upd_frm.destroy(); t_upd_frm=nil end local left = readInteger(getAddress("left")) local top = readInteger(getAddress("top")) local right = readInteger(getAddress("right")) local bottom = readInteger(getAddress("bottom")) local width = right - left local height = bottom - top screen_width = width screen_height = height form.Top = top + 22 form.Left = left + 3 form.Width = width - 6 form.Height = height - 25 pic.Bitmap.Width = form.Width pic.Bitmap.Height = form.Height img.Width = form.Width img.Height = form.Height end --Get information about the game window. autoAssemble([[ createthread(code) label(win_name) label(target) label(left) label(top) label(right) label(bottom) registersymbol(left) registersymbol(top) registersymbol(left) registersymbol(right) registersymbol(bottom) code: push win_name push 00 call FindWindowA push target push eax call GetWindowRect xor eax,eax ret win_name: db ']] .. window_name .. [[',0 target: left: dd 0 top: dd 0 right: dd 0 bottom: dd 0]]) if t_upd_frm then t_upd_frm.destroy(); t_upd_frm=nil end t_upd_frm = createTimer() t_upd_frm.interval = 1000 t_upd_frm.OnTimer = UpdateForm end UpdatePos() -------------------------------------------------------------------------------- -- Offsets local FLAG_TEAM = 0x32C local HEALTH = 0xF8 local NEXT_PLAYER = 0x4 local COORDINATE_X = 0x34 local COORDINATE_Y = 0x38 local COORDINATE_Z = 0x3C local ANGLE_X = 0x40 local ANGLE_Y = 0x44 local BASE_PLAYERS = getAddress('[ac_client.exe+0010F4F8]') local BASE_MY_PLAYER = getAddress('[ac_client.exe+0010F4F4]') local player -- Structure with all my data local enemy -- Structure with the enemy players, the targets. local amount_players -- Number of players local my_team -- Contains the necessary information to know who is on my team. local MAX_ATTEMPTS = 1000 -- Function that updates my player information local function UpdateMyData() player = {x = readFloat(BASE_MY_PLAYER + COORDINATE_X), y = readFloat(BASE_MY_PLAYER + COORDINATE_Y), z = readFloat(BASE_MY_PLAYER + COORDINATE_Z), viewMatrix = {x = BASE_MY_PLAYER + ANGLE_X, y = BASE_MY_PLAYER + ANGLE_Y } } my_team = readInteger(BASE_MY_PLAYER + FLAG_TEAM) end --Function that updates information about players --And it's different from my team. local function UpdatePlayersData() amount_players = readInteger("ac_client.exe+10A22C")-1 enemy = {} local OFFSET = NEXT_PLAYER -- This variable contains the offset value of the current player being processed local current_player = 0 -- Contains the player base in process local counter = 0 local countPlayer = 0 while(countPlayer <= amount_players) do counter = counter + 1 if counter > MAX_ATTEMPTS then print(#enemy) return end current_player = readInteger(BASE_PLAYERS + OFFSET) if readInteger(current_player + HEALTH) then countPlayer = countPlayer + 1 if readInteger(current_player + HEALTH) >= 1 and readInteger(current_player + HEALTH) <= 1000 then -- The player exists and is alive. if readInteger(current_player + FLAG_TEAM) ~= my_team then -- If the player is my enemy enemy[#enemy+1] = {} enemy[#enemy].x = readFloat(current_player + COORDINATE_X) enemy[#enemy].y = readFloat(current_player + COORDINATE_Y) enemy[#enemy].z = readFloat(current_player + COORDINATE_Z) end end end OFFSET = OFFSET + NEXT_PLAYER end end local function ESP() --Clean screen canvas.Brush.Color = 0x000001 canvas.fillRect(0, 0, 1000, 1000) if #enemy == 0 then return end -- Returns if no address could be obtained. for i=1, #enemy do local differenceX = enemy.x - player.x local differenceY = enemy.y - player.y local differenceZ = -(enemy.z - player.z) local lenght = math.sqrt(differenceX ^ 2 + differenceY ^ 2, differenceZ ^ 2) local lenghtXY = math.sqrt(differenceX ^ 2 + differenceY ^ 2) local targetX = math.deg(math.atan2(differenceY, differenceX)) local targetY = math.deg(math.atan2(differenceZ, lenghtXY)) local tx = targetX local ty = targetY local mx = readFloat(player.viewMatrix.x)-90 local my = -readFloat(player.viewMatrix.y) local dx = 0 local dy = 0 -- Convert an angle ranging from 0 -> 360. To an angle ranging from -180 -> 180. if mx > 180 then mx = -(360 - mx) end -- Calculate dx (destiny X) if (tx < 0 and mx < 0) or (tx >= 0 and mx >= 0) then dx = -(tx - mx) elseif tx < 0 and mx > 0 then if player.x > enemy.x and player.y > enemy.y then dx = -(360+(tx - mx)) else dx = -(tx - mx) end elseif tx > 0 and mx < 0 then if player.x > enemy.x and player.y < enemy.y then dx = 360-(tx - mx) else dx = -(tx - mx) end end -- Calculate dy (destiny Y) dy = ty - my dx = -dx --Draw nothing if the enemy is behind me. if dx < -90 or dx > 90 then goto continue end if dy < -90 or dy > 90 then goto continue end --Strange calculation, to transform the differences between angles, in the coordinates of the screen. --I used values 37 and 74 for AssaultCube because the hack worked better this way. In Counter Strike I used 45 and 90. dy = dy + 37 dy = dy*(screen_height / 74) dx = dx + 37 dx = dx*(screen_width / 74) -- draw in picture canvas.Brush.Color = 0xFF canvas.Pen.Color = 0xFF canvas.line(form.Width / 2, form.Height / 2, dx, dy) canvas.textOut(dx-10, dy-5, math.ceil(lenght / 4) .. "m") ::continue:: end --Displays on the screen. img.Picture = pic end local function checkKeyESP() UpdateMyData() UpdatePlayersData() ESP() end if t_ESP then t_ESP.destroy(); t_ESP=nil end t_ESP = createTimer() t_ESP.Interval = 100 t_ESP.onTimer = checkKeyESP {$asm} [DISABLE] {$lua} if t_ESP then t_ESP.destroy(); t_ESP=nil end if form then form.destroy(); form=nil end pic.destroy() {$asm} </AssemblerScript> </CheatEntry> <CheatEntry> <ID>9</ID> <Description>"Teleport Bot (In front of you)"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} -- Offsets local FLAG_TEAM = 0x32C local HEALTH = 0xF8 local NEXT_PLAYER = 0x4 -- The offset of the structure from one player to another local COORDINATE_X = 0x34 local COORDINATE_Y = 0x38 local COORDINATE_Z = 0x3C local ANGLE_X = 0x40 local ANGLE_Y = 0x44 local BASE_PLAYERS = getAddress('[ac_client.exe+0010F4F8]') local BASE_MY_PLAYER = getAddress('[ac_client.exe+0010F4F4]') -- Declaration of other variables local player -- Structure with all my data local enemy = {}-- Structure with the enemy players, the targets. local amount_players -- Number of players local my_team -- Contains the necessary information to know who is on my team. local MAX_ATTEMPTS = 1000 -- Help the "UpdatePlayersData" function not to enter an infinite loop. -- To understand why this is necessary, you need to study how the player structures work in the Assalt Cube game. -- Function that updates my player information local function UpdateMyData() player = {x = readFloat(BASE_MY_PLAYER + COORDINATE_X), y = readFloat(BASE_MY_PLAYER + COORDINATE_Y), z = readFloat(BASE_MY_PLAYER + COORDINATE_Z), viewMatrix = {x = readFloat(BASE_MY_PLAYER + ANGLE_X)-90, y = readFloat(BASE_MY_PLAYER + ANGLE_Y) } } my_team = readInteger(BASE_MY_PLAYER + FLAG_TEAM) end --Function that updates information about players --And it's different from my team. local function UpdatePlayersData() amount_players = readInteger("ac_client.exe+10A22C")-1 enemy = {} local OFFSET = NEXT_PLAYER -- This variable contains the offset value of the current player being processed local current_player = 0 -- Contains the player base in process local counter = 0 local countPlayer = 0 while(countPlayer < amount_players) do counter = counter + 1 if counter > MAX_ATTEMPTS then print(#enemy) return end current_player = readInteger(BASE_PLAYERS + OFFSET) if readInteger(current_player + HEALTH) then countPlayer = countPlayer + 1 if readInteger(current_player + HEALTH) >= 1 and readInteger(current_player + HEALTH) <= 1000 then -- The player exists and is alive. if readInteger(current_player + FLAG_TEAM) ~= my_team then -- If the player is my enemy enemy.x = current_player + COORDINATE_X enemy.y = current_player + COORDINATE_Y enemy.z = current_player + COORDINATE_Z return end end end OFFSET = OFFSET + NEXT_PLAYER end end local function TeleportBot() local destinyX local destinyY local destinyZ local max_lenght local lenght = 10 destinyZ = math.sin(math.rad(player.viewMatrix.y)) * lenght max_lenght = math.cos(math.rad(player.viewMatrix.y)) * lenght destinyY = math.sin(math.rad(player.viewMatrix.x)) * max_lenght destinyX = math.cos(math.rad(player.viewMatrix.x)) * max_lenght writeFloat(enemy.x, player.x + destinyX) writeFloat(enemy.y, player.y + destinyY) writeFloat(enemy.z, player.z + destinyZ) end local function CheckKeyTeleportBot() if isKeyPressed( VK_F ) then if not readInteger('[ac_client.exe+0010F4F8]') then return end--The function returns if the address does not exist. UpdateMyData() UpdatePlayersData() TeleportBot() end end if t2 then t2.destroy(); t2=nil end t2 = createTimer() t2.Interval = 1 t2.onTimer = CheckKeyTeleportBot {$asm} [DISABLE] {$lua} if t2 then t2.destroy(); t2=nil end {$asm} </AssemblerScript> </CheatEntry> <CheatEntry> <ID>10</ID> <Description>"Fly Mode"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} -- Offsets local COORDINATE_X = 0x34 local COORDINATE_Y = 0x38 local COORDINATE_Z = 0x3C local ANGLE_X = 0x40 local ANGLE_Y = 0x44 local BASE_MY_PLAYER = getAddress('[ac_client.exe+0010F4F4]') -- Declaration of other variables local player -- Structure with all my data -- Function that updates my player information local function UpdateMyData() player = {x = BASE_MY_PLAYER + COORDINATE_X, y = BASE_MY_PLAYER + COORDINATE_Y, z = BASE_MY_PLAYER + COORDINATE_Z, viewMatrix = {x = readFloat(BASE_MY_PLAYER + ANGLE_X)-90, y = readFloat(BASE_MY_PLAYER + ANGLE_Y) } } end local speed_forward = 0 local speed_back = 0 local speed_left = 0 local speed_right = 0 local direction1 = "none" local direction2 = "none" local speed_transaction = 0.02 local speed = 0.6 function FlyMode() --if not readInteger('[ac_client.exe+0010F4F8]') then return end--The function returns if the address does not exist. UpdateMyData() local destinyX local destinyY local destinyZ local max_lenght destinyZ = math.sin(math.rad(player.viewMatrix.y)) max_lenght = math.cos(math.rad(player.viewMatrix.y)) destinyY = math.sin(math.rad(player.viewMatrix.x)) * max_lenght destinyX = math.cos(math.rad(player.viewMatrix.x)) * max_lenght if direction1 == "forward" then writeFloat(player.x, readFloat(player.x) + destinyX * speed_forward) writeFloat(player.y, readFloat(player.y) + destinyY * speed_forward) writeFloat(player.z, readFloat(player.z) + destinyZ * speed_forward) elseif direction1 == "back" then writeFloat(player.x, readFloat(player.x) - destinyX * speed_back) writeFloat(player.y, readFloat(player.y) - destinyY * speed_back) writeFloat(player.z, readFloat(player.z) - destinyZ * speed_back) end if direction2 == "left" then writeFloat(player.x, readFloat(player.x) + destinyY * speed_left) writeFloat(player.y, readFloat(player.y) - destinyX * speed_left) elseif direction2 == "right" then writeFloat(player.x, readFloat(player.x) - destinyY * speed_right) writeFloat(player.y, readFloat(player.y) + destinyX * speed_right) end end local function CheckKeyFlyMode() if isKeyPressed(VK_W) then if speed_back > 0 then speed_back = speed_back - speed_transaction * 2 else if speed_forward < speed then speed_forward = speed_forward + speed_transaction end direction1 = "forward" end elseif isKeyPressed(VK_S) then if speed_forward > 0 then speed_forward = speed_forward - speed_transaction * 2 else if speed_back < speed then speed_back = speed_back + speed_transaction end direction1 = "back" end else if speed_forward <= 0 and speed_back <= 0 then direction1 = "none" end if speed_forward > 0 then speed_forward = speed_forward - speed_transaction * 2 end if speed_back > 0 then speed_back = speed_back - speed_transaction * 2 end end if isKeyPressed(VK_A) then if speed_right > 0 then speed_right = speed_right - speed_transaction * 2 else if speed_left < speed then speed_left = speed_left + speed_transaction end direction2 = "left" end elseif isKeyPressed(VK_D) then if speed_left > 0 then speed_left = speed_left - speed_transaction * 2 else if speed_right < speed then speed_right = speed_right + speed_transaction end direction2 = "right" end else if speed_left <= 0 and speed_right <= 0 then direction2 = "none" end if speed_left > 0 then speed_left = speed_left - speed_transaction * 2 end if speed_right > 0 then speed_right = speed_right - speed_transaction * 2 end end FlyMode() end if t3 then t3.destroy(); t3=nil end t3 = createTimer() t3.Interval = 1 t3.onTimer = CheckKeyFlyMode {$asm} [DISABLE] {$lua} if t3 then t3.destroy(); t3=nil end {$asm} </AssemblerScript> </CheatEntry> <CheatEntry> <ID>1</ID> <Description>"No Recoil"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] ac_client.exe+5BAA2: db 90 90 90 [DISABLE] ac_client.exe+5BAA2: db D8 4B 50 </AssemblerScript> </CheatEntry> <CheatEntry> <ID>8</ID> <Description>"Rapid Fire"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] ac_client.exe+637E4: db 90 90 [DISABLE] ac_client.exe+637E4: db 89 0A </AssemblerScript> </CheatEntry> <CheatEntry> <ID>7</ID> <Description>"Infinite Ammo"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] ac_client.exe+637E9: db 90 90 [DISABLE] ac_client.exe+637E9: db FF 0E </AssemblerScript> </CheatEntry> <CheatEntry> <ID>15</ID> <Description>"Infinite Health / One Hit Kill"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] alloc(health, 100) label(enemy) label(exit) label(return) health: push eax push ecx mov ecx,ac_client.exe mov eax,[ecx+0010F4F4] add eax,F8 add ebx,4 cmp eax,ebx jne enemy jmp exit enemy: mov [ebx],0 exit: sub ebx,4 pop ecx pop eax jmp return ac_client.exe+29D1F: jmp health return: [DISABLE] dealloc(health) ac_client.exe+29D1F: db 29 7B 04 8B C7 </AssemblerScript> </CheatEntry> <CheatEntry> <ID>27</ID> <Description>"Infinite grenade"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] ac_client.exe+63378: db FF 00 [DISABLE] ac_client.exe+63378: db FF 08 </AssemblerScript> </CheatEntry> <CheatEntry> <ID>29</ID> <Description>"Teleport Bot Position"</Description> <LastState Activated="1"/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} -- Offsets local FLAG_TEAM = 0x32C local HEALTH = 0xF8 local NEXT_PLAYER = 0x4 -- The offset of the structure from one player to another local COORDINATE_X = 0x34 local COORDINATE_Y = 0x38 local COORDINATE_Z = 0x3C local ANGLE_X = 0x40 local ANGLE_Y = 0x44 local BASE_PLAYERS = getAddress('[ac_client.exe+0010F4F8]') local BASE_MY_PLAYER = getAddress('[ac_client.exe+0010F4F4]') -- Declaration of other variables local player = {}-- Structure with all my data local enemy = {}-- Structure with the enemy players, the targets. local amount_players -- Number of players local my_team -- Contains the necessary information to know who is on my team. local MAX_ATTEMPTS = 1000 -- Help the "UpdatePlayersData" function not to enter an infinite loop. -- To understand why this is necessary, you need to study how the player structures work in the Assalt Cube game. -- Function that updates my player information local function UpdateMyData() player.x = BASE_MY_PLAYER + COORDINATE_X player.y = BASE_MY_PLAYER + COORDINATE_Y player.z = BASE_MY_PLAYER + COORDINATE_Z my_team = readInteger(BASE_MY_PLAYER + FLAG_TEAM) end --Function that updates information about players --And it's different from my team. local function UpdatePlayersData() amount_players = readInteger("ac_client.exe+10A22C")-1 local OFFSET = NEXT_PLAYER -- This variable contains the offset value of the current player being processed local current_player = 0 -- Contains the player base in process local counter = 0 local countPlayer = 0 while(countPlayer < amount_players) do counter = counter + 1 if counter > MAX_ATTEMPTS then print(#enemy) return end current_player = readInteger(BASE_PLAYERS + OFFSET) if readInteger(current_player + HEALTH) then countPlayer = countPlayer + 1 if readInteger(current_player + HEALTH) >= 1 and readInteger(current_player + HEALTH) <= 1000 then -- The player exists and is alive. if readInteger(current_player + FLAG_TEAM) ~= my_team then -- If the player is my enemy enemy.x = readFloat(current_player + COORDINATE_X) enemy.y = readFloat(current_player + COORDINATE_Y) enemy.z = readFloat(current_player + COORDINATE_Z) t=true return end end end OFFSET = OFFSET + NEXT_PLAYER end t = false end local function TeleportBotPosition() if not t then return end writeFloat(player.x, enemy.x) writeFloat(player.y, enemy.y) writeFloat(player.z, enemy.z) end local function CheckKeyTeleportBot() if not readInteger('[ac_client.exe+0010F4F8]') then return end--The function returns if the address does not exist. UpdateMyData() UpdatePlayersData() TeleportBotPosition() end if t2 then t2.destroy(); t2=nil end t2 = createTimer() t2.Interval = 1 t2.onTimer = CheckKeyTeleportBot {$asm} [DISABLE] {$lua} if t2 then t2.destroy(); t2=nil end {$asm} </AssemblerScript> </CheatEntry> </CheatEntries> <CheatCodes> <CodeEntry> <Description>Change of dec [esi]</Description> <Address>004637E9</Address> <ModuleName>ac_client.exe</ModuleName> <ModuleNameOffset>637E9</ModuleNameOffset> <Before> <Byte>E9</Byte> <Byte>17</Byte> <Byte>C8</Byte> <Byte>57</Byte> <Byte>01</Byte> </Before> <Actual> <Byte>FF</Byte> <Byte>0E</Byte> </Actual> <After> <Byte>57</Byte> <Byte>8B</Byte> <Byte>7C</Byte> <Byte>24</Byte> <Byte>14</Byte> </After> </CodeEntry> <CodeEntry> <Description>Change of mov [edx],ecx</Description> <Address>004637E4</Address> <ModuleName>ac_client.exe</ModuleName> <ModuleNameOffset>637E4</ModuleNameOffset> <Before> <Byte>00</Byte> <Byte>00</Byte> <Byte>8B</Byte> <Byte>56</Byte> <Byte>18</Byte> </Before> <Actual> <Byte>89</Byte> <Byte>0A</Byte> </Actual> <After> <Byte>8B</Byte> <Byte>76</Byte> <Byte>14</Byte> <Byte>FF</Byte> <Byte>0E</Byte> </After> </CodeEntry> <CodeEntry> <Description>Change of mov [ebp+00000210],ebx</Description> <Address>0045F5C6</Address> <ModuleName>ac_client.exe</ModuleName> <ModuleNameOffset>5F5C6</ModuleNameOffset> <Before> <Byte>01</Byte> <Byte>75</Byte> <Byte>EE</Byte> <Byte>5F</Byte> <Byte>5E</Byte> </Before> <Actual> <Byte>89</Byte> <Byte>9D</Byte> <Byte>10</Byte> <Byte>02</Byte> <Byte>00</Byte> <Byte>00</Byte> </Actual> <After> <Byte>5D</Byte> <Byte>C3</Byte> <Byte>CC</Byte> <Byte>CC</Byte> <Byte>A1</Byte> </After> </CodeEntry> <CodeEntry> <Description>Change of mov [edx],ebx</Description> <Address>019E0005</Address> <ModuleName/> <ModuleNameOffset>0</ModuleNameOffset> <Before> <Byte>BB</Byte> <Byte>00</Byte> <Byte>00</Byte> <Byte>00</Byte> <Byte>00</Byte> </Before> <Actual> <Byte>89</Byte> <Byte>1A</Byte> </Actual> <After> <Byte>8B</Byte> <Byte>56</Byte> <Byte>08</Byte> <Byte>E9</Byte> <Byte>25</Byte> </After> </CodeEntry> <CodeEntry> <Description>Change of add [eax],000000FA</Description> <Address>004636CA</Address> <ModuleName>ac_client.exe</ModuleName> <ModuleNameOffset>636CA</ModuleNameOffset> <Before> <Byte>03</Byte> <Byte>00</Byte> <Byte>8B</Byte> <Byte>46</Byte> <Byte>18</Byte> </Before> <Actual> <Byte>81</Byte> <Byte>00</Byte> <Byte>FA</Byte> <Byte>00</Byte> <Byte>00</Byte> <Byte>00</Byte> </Actual> <After> <Byte>8B</Byte> <Byte>56</Byte> <Byte>08</Byte> <Byte>89</Byte> <Byte>9A</Byte> </After> </CodeEntry> <CodeEntry> <Description>Change of sub [ebx+04],edi</Description> <Address>00429D1F</Address> <ModuleName>ac_client.exe</ModuleName> <ModuleNameOffset>29D1F</ModuleNameOffset> <Before> <Byte>05</Byte> <Byte>09</Byte> <Byte>00</Byte> <Byte>2B</Byte> <Byte>F8</Byte> </Before> <Actual> <Byte>29</Byte> <Byte>7B</Byte> <Byte>04</Byte> </Actual> <After> <Byte>8B</Byte> <Byte>C7</Byte> <Byte>5F</Byte> <Byte>5E</Byte> <Byte>8B</Byte> </After> </CodeEntry> <CodeEntry> <Description>Change of fmulp st(1),st(0)</Description> <Address>0045BAA5</Address> <ModuleName>ac_client.exe</ModuleName> <ModuleNameOffset>5BAA5</ModuleNameOffset> <Before> <Byte>D9</Byte> <Byte>CB</Byte> <Byte>D8</Byte> <Byte>4B</Byte> <Byte>50</Byte> </Before> <Actual> <Byte>DE</Byte> <Byte>C9</Byte> </Actual> <After> <Byte>D8</Byte> <Byte>4B</Byte> <Byte>4C</Byte> <Byte>D8</Byte> <Byte>43</Byte> </After> </CodeEntry> <CodeEntry> <Description>Change of fmul st(3),st(0)</Description> <Address>0045BA9E</Address> <ModuleName>ac_client.exe</ModuleName> <ModuleNameOffset>5BA9E</ModuleNameOffset> <Before> <Byte>05</Byte> <Byte>44</Byte> <Byte>E4</Byte> <Byte>4E</Byte> <Byte>00</Byte> </Before> <Actual> <Byte>DC</Byte> <Byte>CB</Byte> </Actual> <After> <Byte>D9</Byte> <Byte>CB</Byte> <Byte>D8</Byte> <Byte>4B</Byte> <Byte>50</Byte> </After> </CodeEntry> <CodeEntry> <Description>Change of fmul dword ptr [ebx+50]</Description> <Address>0045BAA2</Address> <ModuleName>ac_client.exe</ModuleName> <ModuleNameOffset>5BAA2</ModuleNameOffset> <Before> <Byte>00</Byte> <Byte>DC</Byte> <Byte>CB</Byte> <Byte>D9</Byte> <Byte>CB</Byte> </Before> <Actual> <Byte>D8</Byte> <Byte>4B</Byte> <Byte>50</Byte> </Actual> <After> <Byte>DE</Byte> <Byte>C9</Byte> <Byte>D8</Byte> <Byte>4B</Byte> <Byte>4C</Byte> </After> </CodeEntry> <CodeEntry> <Description>Change of fmul dword ptr [ebx+4C]</Description> <Address>0045BAA7</Address> <ModuleName>ac_client.exe</ModuleName> <ModuleNameOffset>5BAA7</ModuleNameOffset> <Before> <Byte>D8</Byte> <Byte>4B</Byte> <Byte>50</Byte> <Byte>DE</Byte> <Byte>C9</Byte> </Before> <Actual> <Byte>D8</Byte> <Byte>4B</Byte> <Byte>4C</Byte> </Actual> <After> <Byte>D8</Byte> <Byte>43</Byte> <Byte>44</Byte> <Byte>D9</Byte> <Byte>5B</Byte> </After> </CodeEntry> <CodeEntry> <Description>Change of fadd dword ptr [ebx+44]</Description> <Address>0045BAAA</Address> <ModuleName>ac_client.exe</ModuleName> <ModuleNameOffset>5BAAA</ModuleNameOffset> <Before> <Byte>DE</Byte> <Byte>C9</Byte> <Byte>D8</Byte> <Byte>4B</Byte> <Byte>4C</Byte> </Before> <Actual> <Byte>D8</Byte> <Byte>43</Byte> <Byte>44</Byte> </Actual> <After> <Byte>D9</Byte> <Byte>5B</Byte> <Byte>44</Byte> <Byte>D9</Byte> <Byte>05</Byte> </After> </CodeEntry> <CodeEntry> <Description>Change of fstp dword ptr [ebx+44]</Description> <Address>0045BAAD</Address> <ModuleName>ac_client.exe</ModuleName> <ModuleNameOffset>5BAAD</ModuleNameOffset> <Before> <Byte>4B</Byte> <Byte>4C</Byte> <Byte>D8</Byte> <Byte>43</Byte> <Byte>44</Byte> </Before> <Actual> <Byte>D9</Byte> <Byte>5B</Byte> <Byte>44</Byte> </Actual> <After> <Byte>D9</Byte> <Byte>05</Byte> <Byte>80</Byte> <Byte>E4</Byte> <Byte>4E</Byte> </After> </CodeEntry> </CheatCodes> <UserdefinedSymbols/> </CheatTable>
Это таблица на Cheat engine для игры AssaultCube
Аим работает 100%
Я написал свой на СИ , кидать лайнокод соромно.
Короче работает так:
1)Ищешь кол-во игроков включая себя.
2)В этот игре Указатели на структуры идут по списку то есть смещение по 4.
3)Ищешь адреса координат по X,Y,Z у них одинаковые смещение от начала структуры.
4)Так же ищешь угол поворота камеры по X,Y.
5)Сравниваешь дистанцию от себя до врага циклом и выбираешь ближайшего
6)Вычисляешь сколько надо повернуть до врага и записываешь значение.
Вроде такая хурма
c++ и указатели
in Низкоуровневое программирование
Опубликовано
1)Скопируй эту строку ["XR_3DA.exe" + 0010E58C]
2)Открой Memory View, нажми ПКМ выбери Go to address, вставь эту стороку.
3)В меню перейди View, сними галочку Show module address, адреса будут показыватся без модулей.
На этом все. Скорее всего адресс 0050E588C.