partoftheworlD
-
Постов
2 687 -
Зарегистрирован
-
Посещение
-
Победитель дней
172
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные partoftheworlD
-
-
Ничего не понял ты как я погляжу... Ок объясню: там где процесс для трейнера выберается можно и руками ввести процесс это 1, 2 для игр в браузере процесс ищется с помощью combobox а для него нафиг не нужен работающий браузер. Достаточно иметь нужный и работающий скрипт!
Забавно написано, либо я не понял что тут написано, либо не понимаю как работают скрипты с браузерными играми.
-
Кто-нибудь пользовался radare 2 под виндой, а то все расхваливают этот фреймворк? И нет готовых сборок? А то не хочется виртуалку ставить ради сборки под win.
-
partoftheworlD, пока не уловил, как это использовать, если сможешь, пример на моём скрипте сделай ПЖЛСТа
Скажу глупость скорее всего, но вроде как тебе надо сделать проверку по ESP. в него записываются 4 байта которые и есть адрес возврата, если условие проверки не выполнится, то сделать переход или что-нибудь вывести.
Наверное будет проще написать на C++ программу которая проверяет исключения и выводит адрес и текущее значение, а потом уже подходящие значения добавить в СЕ.
-
partoftheworlD, вроде мой, но ни чё к сожалению не понял.
partoftheworlD, интересно, а можно его переделать на LUA, чтобы вставить в СE-скрипт?
Вот нашел, передача аргументов через стек наиболее часто используется для передачи аргументов при вызове процедур. Суть этого способа заключается в том, что вызывающая процедура самостоятельно заносит в стек передаваемые данные, после чего передает управление вызываемой процедуре. При передаче управления процедуре микропроцессор автоматически записывает в вершину стека 4 байта. Эти байты являются адресом возврата в вызывающую программу. Если перед передачей управления процедуре командой call в стек были записаны переданные процедуре данные или указатели на них, то они окажутся под адресом возврата.
Стек обслуживается тремя регистрами:
- ESS - указатель дна стека (начала сегмента стека);
- ESP - указатель вершины стека;
- EBP - указатель базы.
-
2-й пример написан на C++ и это обработчик ошибок.
Вроде твой случай тык.
-
won day of defeat
Не нашел в гугле эту игру.Но предположу, эта та которая на соурс движке игра?
-
Время для ночной статьи .Последнее время, я заинтересовался не просто поиском значение и созданием трейнера, а тем как работает функция, которую я нашел. В этой статье я расскажу, как сделать использование телепорта без перезарядки и изменение дальности прыжка при телепортации.
Для поиска
Перезарядка: F3 0F 11 81 ? ? ? ? F3 0F 10 48 ? 0F 2F C1 76 0D F3 0F 11 89 ? ? ? ?Дальность : D8 86 ? ? ? ? D9 9E ? ? ? ? D9 40 08 D9 9E ? ? ? ? D8 48 08 D8 86 ? ? ? ? D9 9E ? ? ? ?
Сразу покажу коды.
Скрытый текстСкрытый текстФункция перезарядки для телепорта это значение типа float от 0 до 1. На скриншоте можно увидеть, условие если Current_time больше, чем v1, то устанавливаем значение 1 и ждем пока перезарядится умение. Для того чтобы сделать телепорт без перезарядки установим 1 по адресу (BaseAddress + 0x138).
Следующая функция выглядит куда интересней. Как я понял она отвечает, только за дальность использования телепорта и подсветку того места куда мы собираемся переместиться. По адресу [pBase + 0x90] храниться максимальное расстояние(1600), для телепорта которое загружается с загрузкой игры. [pBase + 0x104] реальное значение. Базовый адрес у перезарядки и дальности одинаковый. И так результаты.
Скрытый текст- 2
-
вопрос к моему же взлому.ну в общем скрипты основаны на сравнении по смещению.
как написать скрипт,чтобы было все в одном скрипте?
у меня 3 отдельных скрипта,которые сравниваются с одной и той же инструкцией.
как все это забацать в один скрипт?
ну типо
кмп с этим
и
кмп с тем
и
кмп с этим
то прыжок на хак
хак:
сам хак.
пытался писать and,но не компилиться так.
Почитай про условные переходы на ассемблере. Если не ошибаюсь, то должно выглядеть примерно так. Не силен в ассемблере)
alloc(newmem,2048)label(returnhere)label(originalcode)label(check1)label(editvalue)label(exit)newmem:cmp ...je check1 //если значение равноcheck1:cmpjne editvalue //если значение не равноeditvalue:mov [eax+00], 1000
-
Возможно, записываешь в экранное значение и из-за этого проблемы Или фильтр надо создать, чтобы другие функции работающие с этим адресом не крашились.
-
Спасибо, попробую.
У меня не CS:S, а в CS:GO, но в CS:S тоже должно работать. Я создавал новый поток для RCS, в нем уже все манипуляции с ViewAngles
// C##region RCSif (rcs) { if (localPlayer.m_iShotsFired > 0) { Vector3 currentPunch = localPlayer.m_vecPunch - vecPunch; Vector3 viewAngles = Memory.Read<Vector3>((IntPtr)(setViewAnglesAddress), Vector3.Zero); Vector3 newViewAngles = viewAngles - (currentPunch * (2f / 100f * rcsval)); newViewAngles = newViewAngles.ClampAngle(); Memory.Write<Vector3>((IntPtr)(setViewAnglesAddress), newViewAngles); } //vecPunch = localPlayer.m_vecPunch; }#endregion
https://www.youtube.com/watch?v=Vl_jqBADp3s
P.S. У меня external-чит, без инжекта, только чтение-запись памятиКстати если надо, чтобы игроки отрисованные glow не лежали на земле сделай проверку
if (entity->isDormant()){ mem->WriteMem<bool>((GlowBase + ((entity->getGlowIndex() * 0x38) + 0x24)), false);}else{ mem->WriteMem<bool>((GlowBase + ((entity->getGlowIndex() * 0x38) + 0x24)), true);}
Спасибо, помог откорректировать значения и будет прекрасно работать. +Rep обязательно
- 1
-
В С++ не силен, прошу не пинать если ошибка будет
Если я не ошибаюсь, то Ang[2] всегда будет равно 0, ну в CS:GO аккаунт сразу банят, если Z-координата ViewAngles равна не нулю.
Чтоб медленней двигался можно подавлять отдачу не на 100% (*2), а например на 80
Вроде так должно работать нормально:
Ang[0] -= Ang[0] + ((Punch[0] * 2)*RCSval); //RCSval = 1; - 100% RCSval = 0.8; - 80% Ang[1] -= Ang[1] + ((Punch[1] * 2)*RCSval);
По этому коду получается, что Ang будет всегда отрицательный и около нуля, анти-отдача будет работать, но тогда я не смогу двигать прицелом. Уже все что можно перепробовал, осталось только через центр экрана попробовать и с помощью CreateMove) Да Ang[2] всегда 0. Видел как в других читах работает, и как у меня, хотя код одинаковый, значения правильные, единственное где может быть ошибка это в записи Ang.
-
Как хорошо, когда античит OpenSource
Если смотреть сорцы античита, то можно наоборот извлекать для себя идеи функций чита, хех
Одно дело идеи, а другое ограничение со стороны сервера и VAC
-
Админы, пожалуйста смените название игры в заголовке и посте с Darkness 2 на Darksiders 2.
NullAlex: Изменено. -
Раз нашел экранные это уже хорошо, возможно они зашифрованные, помню видел видео по взлому ресурсов в героях меча и магии. Может быть твой случай. Раз вызовов много, то можешь внутри покопаться.
- 1
-
Часть 1 К 4 утра нашлось все-таки свободное время
Скрытый текстВ этой статье нам понадобится найти адрес прыжка, базовый адрес игрока, смещение m_fFlags которое возвращает значение в каком положении находится игрок. Начнем со смещения открываем любой отладчик и ищем строку m_fFlags.
Видим push 350h это наше смещение, буква h значит, что смещение типа DWORD(HEX). Все закрываем отладчик.
Теперь найдем адрес прыжка, заходим в игру, создаем сервер. Все команды прописываются без кавычек. открываем консоль пишем “+jump” и enter в CE будем искать 5 типа int, дальше снова открываем консоль и пишем “-jump” в CE пишем 4 и сканируем. Продолжаем так пока не останется как можно меньше адресов. Если найдется статический(зеленый) используйте его, если нет, то придется искать поинтер.
Когда закончили пишем в консоль sv_cheats 1; cl_pdump 1. Находим строку m_iFlags integer() и переписываем только те значение пока игрок находится в воздухе. Они у всех одинаковые, так что можете переписать из статьи (256,258,260,262,1280).
Остался базовый адрес, но как его находить можно посмотреть в видео-уроках keng’а.
Скрытый текстДля начала напишем функцию по которой будем определять находимся мы в воздухе или нет. Используем для этого найденное ранее значение fFlags и LocalBase
Теперь приступим к написанию Bunnyhop. Назначим клавишей активации пробел.
Используем наш адрес прыжка, который мы искали в самом начале.
Что делает у нас код и почему нас не банит SMAC? Из первой части мы узнали, что SMAC проверяет время от приземления игрока и до следующего прыжка, если время равно 0 и у вас 5 прыжков (идеальных прыжков) с таким результатом мы получим бан. Счетчик анти-чита работает таким образом, что счет идет от приземления до приземления, но наш прыжок в воздухе подходит под условие, при котором счетчик сбрасывается.
Скрытый текстint in_air(){ int fFlag; ReadProcessMemory(hProcess, (LPCVOID)(LocalBase + 0x350), &fFlag, 4, 0); return fFlag == 256 || fFlag == 258 || fFlag == 260 || fFlag == 262 || fFlag == 1280; }
void Bunnyhop() { int on = 5; int off = 4; if (GetAsyncKeyState(VK_SPACE) & 0x8000 && !in_air) { WriteProcessMemory(hProcess, (LPCVOID)(ClientDLL + 0x4F3B3C), &on, 4, 0); //5 } else if (GetAsyncKeyState(VK_SPACE) & 0x8000 && in_air) { WriteProcessMemory(hProcess, (LPCVOID)(ClientDLL + 0x4F3B3C), &off, 4, 0); //4 WriteProcessMemory(hProcess, (LPCVOID)(ClientDLL + 0x4F3B3C), &on, 4, 0); // 5 WriteProcessMemory(hProcess, (LPCVOID)(ClientDLL + 0x4F3B3C), &off, 4, 0); //4 } else { WriteProcessMemory(hProcess, (LPCVOID)(ClientDLL + 0x4F3B3C), &off, 4, 0); //4 } }
- 3
-
В этот раз статья будет состоять из 2 частей, постараюсь дописать сразу как появится свободное время.
В первой у нас будет теория о том как работает анти-чит и как можно его обмануть, во второй напишем простейший Bunnyhop.
Часть 1. Теория.
Немного теории о том как работает SMAC анти-чит на примере Bunnyhop.Ссылка на репозиторий анти-чита.
SMAC это довольно не плохой анти-чит и к тому-же c исходным кодом.Как же анти-чит вычисляет читера? Ниже под спойлером функция обнаружения использования Bhop.Скрытый текстЭта функция проверяет время от приземления игрока и до следующего прыжка, если время равно 0 и у вас 5 прыжков(идеальных прыжков) с таким результатом вы получаете бан.
Как это можно обойти? Например, создать таймер который задает рандомное время простоя до следующего прыжка, но добавление дополнительного времени в выполнение функции сказывается на качестве распрыга.
Так, что мы создадим двойной прыжок т.е. 1-й прыжок основной будет происходить когда мы на земле,2-й прыжок когда мы находимся в воздухе и это никак не влияет на основной распрыг, но путает анти-чит./* BunnyHop */ static Float:fCheckTime[MAXPLAYERS + 1]; // Игрок не прыгает сразу после последнего прыжка. if (!(buttons & IN_JUMP) && (GetEntityFlags(client) & FL_ONGROUND) && fCheckTime[client] > 0.0){ fCheckTime[client] = 0.0; } // Игнорировать прыжок, если игрок находится в ограниченном пространстве или застрял в земле if ((buttons & IN_JUMP) && !(iPrevButtons[client] & IN_JUMP)) { // Игрок находится на земле и выполняет прыжок. if (GetEntityFlags(client) & FL_ONGROUND) { new Float:fGameTime = GetGameTime(); // Игрок прыгнул на точном кадре, что разрешено. Не уверен, что перевел правильно. Оригинал: Player jumped on the exact frame that allowed it. if (fCheckTime[client] > 0.0 && fGameTime > fCheckTime[client]) { AutoTrigger_Detected(client, METHOD_BUNNYHOP); } else { fCheckTime[client] = fGameTime + MIN_JUMP_TIME; } } else { fCheckTime[client] = 0.0; } }
- 3
-
partoftheworlD, всё что выложил - очень круто!!!
Спасибо, дальше думаю написать статью про создание Bunnyhop с обходом SMAC
-
Простите если что, но не путайте людей, это НЕ Darkness 2 , a Darksiders 2.
Упс...спасибо надо будет исправить
-
Надеюсь кому-нибудь это поможет. Несколько лет назад я делал RapidFire для Darksiders 2. и выкладывал таблицу под ником Alexander-mx. Но искал я очень долго значение, отвечающее за время между выстрелами, искал способом изменилось/не изменилось и тогда мне очень повезло, потому что повторить это я не смог. Сегодня решил восстановить функцию выстрела для этой игры.Не полностью восстановленная функция, но для создания RapidFire этого хватит. Остается только найти WeaponBase через патроны.
int *__thiscall m_Shoot(void *this, float Shot_Time){ int WeaponBase; // esi@1 int ReturnIdWeapon; // edi@1 DWORD IDKBase; // ecx@4 int ShootingState; // eax@6 unsigned int Recoil; // eax@9 int *result; // eax@12 bool BulletCountEqual_0; // zf@20 bool BulletCountLess_0; // sf@20 int v10; // eax@20 void *IDWeapon; // [sp+10h] [bp-14h]@1 int SetShootingState; // [sp+17h] [bp-Dh]@17 int v13; // [sp+20h] [bp-4h]@16 WeaponBase = this; ReturnIdWeapon = *sub_460D85(&IDWeapon); if ( IDWeapon ) sub_1017(IDWeapon); // //Проверка кончился выстрел или нет. Если кончился предыдущий выстрел (значение WeaponBase + 0x420 будет равно 0), то можно делать следующий if ( *(WeaponBase + 0x420) > 0.0 // IDKBase + 0xD8 типа bool, при значении 1 стрельба немного быстрее, чем при 0. Возможно при значении 1 функция игнорирует остальные проверки || (IDKBase = *(WeaponBase + 0x438), !*(IDKBase + 0xD8)) && flt_1177D60 < *(WeaponBase + 0x41C) || (ShootingState = *(IDKBase + 0xD4), ShootingState != -1) && *(WeaponBase + 0x418) >= ShootingState || *(IDKBase + 0x2C) > *(WeaponBase + 0x43C) // v6 не понятно что делает,значение типа int которое меняется при стрельбе побитовым сдвигом вправо на 6, максимальное значение которого 31 с включенным rapidfire и 27 при стандартной стрельбе || (Recoil = *(WeaponBase + 0x444), (*(WeaponBase + 0x444) >> 6) & 1) ) { result = *(WeaponBase + 0x438); if ( *(result + 0x30) && *(WeaponBase + 0x3F4) > -1 ) result = sub_35C641(*(*(WeaponBase + 0x400) + 32)); } else { *(WeaponBase + 0x43C) = 0.0; if ( *(ReturnIdWeapon + 0x384) && *(WeaponBase + 0x340) <= 0 ) { result = (Recoil >> 9); if ( result & 1 ) { if ( *(WeaponBase + 0x3F4) > -1 ) result = sub_35C641(*(*(WeaponBase + 0x400) + 0x54)); } } else { if ( !(v157A220 & 1) ) { v157A220 |= 1u; v13 = 0; sub_96CB1(&unk_121C4D4, 0); sub_9B886C(&unk_114544D); v13 = -1; } // Result Возможно зашифрованное значние result = sub_35BD87(WeaponBase, 0x157A218, &Shot_Time, &SetShootingState, 0); if ( !result ) LOBYTE(SetShootingState) = 1; if ( SetShootingState ) { BulletCountEqual_0 = *(WeaponBase + 0x418) == 0; BulletCountLess_0 = *(WeaponBase + 0x418) < 0; v10 = *(WeaponBase + 0x438); Shot_Time = *(v10 + 36); *(WeaponBase + 0x420) = Shot_Time; if ( !BulletCountLess_0 && !BulletCountEqual_0 ) // Установить значение 0 для времени между выстрелами [WeaponBase + 0x420] // v10 + 40 количество выстрелов *(WeaponBase + 0x420) = *(v10 + 40) * Shot_Time; (*(*WeaponBase + 0x30C))(WeaponBase); result = sub_361811(WeaponBase); } } } return result;}
- 2
-
Я об этом уже давно говорил с Xipho, и насколько я помню - мы так ни к чему не пришли, по этому вопросу.Но чтобы было спокойнее, вот маленький спойлер: скоро все будет.
Может сделать ограничение по размеру загружаемых картинок?
-
Раньше вроде тема была про баги сайта. не смог найти её Длинные картинки не правильно отображаются, если браузер запущен в небольшом окне.
-
Перед началом поиска прописываем в параметры запуска " -insecure".
Скрытый текстНам нужно найти смещение максимального значения прозрачности во время взрыва флэш. Это делается в любом отладчике. Т.к. у меня сейчас нет Olly, я буду искать значение в IDA.
Загружаем client.dll в любой отладчик. Ищем строку "m_flFlashMaxAlpha".
Переходим к этой строке
Перед строкой которую мы искали располагается смещение. 0x1450 Больше нам ничего не нужно. Закрываем отладчик.
Скрытый текстДля того чтобы использовать это смещение нам необходимо найти адрес начала структуры игрока т.е себя. Как это делать вы можете найти в видео keng'a по созданию ESP.
Значение которое мы получим в игре статическое и всегда равно 255(float). Надо изменить его на 0. (Для лучше производительности кода, можно добавить проверку,чтобы просто так он не перезаписывался постоянно в цикле.)
Скрытый текстСкрытый текстvoid NoFlash() { DWORD LocalBase; float disable = 0; ReadProcessMemory(hProcess, (LPCVOID)(Client.dll + 0x4C6708), &LocalBase, sizeof(LocalBase), 0); WriteProcessMemory(hProcess, (LPCVOID)(LocalBase + 0x1450), &disable, sizeof(disable), 0); Sleep(1); }
- 5
-
(Впервые пишу статью, так что критика приветствуется. Многие наверное знают этот способ.)
Итак, для начала нам нужно зайти в свойства игры в Steam Параметры запуска и прописать –insecure. «-insecure» отключает VAC, и мы можем спокойно начинать взлом, не боясь, что нас забанят. Не забудьте удалить это иначе не пустит на сервера.
В поиске мы должны будем найти игроков, которые отражаются на карте в момент приближения к ним. Искать лучше тип «Byte» 1 видим противника на радаре, 0 не видим.
У меня нашелся 1 адрес.
Выделяем адрес и нажимаем F5 или ПКМ по адресу и Find out what accesses this address.
Вызывается всего одна инструкция. Что же она делает? Она записывает в 8 битный регистр AL значение 1 или 0 в зависимости от того виден ли противник на радаре или нет. Так же видим регистры EDI и ESI.ESI используется как адрес источника. Значит это базовый адрес. EDI- адрес назначения в этой инструкции и по его значению видим, что это ID игрока.
Структура инструкции выглядит следующим образом [Базовый адрес + ID игрока + 0xD8D] и пишется в нее значение типа BYTE. Что с этим можно сделать? Например запустить цикл с перебором всех игроков.
void DrawingPlayers() { DWORD esi; bool enable = true; ReadProcessMemory(hProcess, (LPVOID)(ClientDll + 0x4CC068), &esi, sizeof(DWORD), 0); for (int index = 0; index < 64; ++index) { WriteProcessMemory(hProcess, (LPVOID)(esi + index + 0xD8D), &enable, sizeof(bool), 0); } }
- 5
-
Нашел свои старые проекты и решил закончить.Проблема заключается в том, что прицел опускается слишком быстро. Вдруг кто-нибудь делал и может подсказать в чем дело? Вроде все по туторам и должно работать прекрасно.
Если не понятно объяснил в чем проблема, вот видео.
void RCS(){ float Punch[3],Ang[3]; if (GetAsyncKeyState(0x01) & 0x8000 && local_player->getShotsFired() > 1) { Punch[0] = local_player->getPunch()[0]; Punch[1] = local_player->getPunch()[1]; Punch[2] = 0; Ang[0] = local_player->getAngles()[0]; Ang[1] = local_player->getAngles()[1]; Ang[2] = local_player->getAngles()[2]; Ang[0] -= Punch[0] * 2; //* 2 компенсация отдачи Ang[1] -= Punch[1] * 2; Ang[2] -= Punch[2] * 2; engine->clampAngles(Ang); local_player->setAngles(Ang); }}
ООП в играх и в обмане игр. Стоит ли его применять в ....
in Статьи для продвинутых
Опубликовано
Отличная статья, особенно для начинающих. Все понятно и написано доступным языком.