На нашем форуме вы можете получить приватный чит для игры Euro Truck Simulator 2. Подробности по ссылке ниже:
Тема с читом на Euro Truck Simulator 2

partoftheworlD

Пользователи+
  • Публикаций

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

  • Посещение

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

    171

Весь контент partoftheworlD

  1. Ты же делал уже трейнер для игры. Должен уже знать как искать/отсеивать адреса. Пробуй найти нужный адрес методом "тыка", если адреса не уменьшаются, т.е увеличивай/уменьшая значения по частям. Половину найденных значений сделай 50 например, другую 150 и т.д пока не найдешь нужный адрес.
  2. Что-то я затупил очень жестко. Даже стыдно. Спасибо за ответ, оказывается в игре есть 3 инструкции . Одну нопишь будет работать, только для одного оружия, другой нопишь для всех. Сигнатура для поиска , вдруг кто-нибудь трейнер будет делать. \xF3\x0F\x10\x87\x00\x00\x00\x00\x0F\x57\xC9\x0F\x2F\xC8\x0F\x82\x00\x00\x00\x00
  3. Нашел инструкцию отвечающую за время между выстрелами только на пистолете(выделено красным), проблема заключается в том, что просмотрев все выпадающие инструкции которые пытался найти через патроны другого оружия, не смог найти ни одной похожей инструкции или работающей с типом float, или регистрами SSE.
  4. Отличная статья, особенно для начинающих. Все понятно и написано доступным языком.
  5. partoftheworlD

    Инди кот

    Забавно написано, либо я не понял что тут написано, либо не понимаю как работают скрипты с браузерными играми.
  6. partoftheworlD

    radare 2 и Windows

    Кто-нибудь пользовался radare 2 под виндой, а то все расхваливают этот фреймворк? И нет готовых сборок? А то не хочется виртуалку ставить ради сборки под win.
  7. Скажу глупость скорее всего, но вроде как тебе надо сделать проверку по ESP. в него записываются 4 байта которые и есть адрес возврата, если условие проверки не выполнится, то сделать переход или что-нибудь вывести. Наверное будет проще написать на C++ программу которая проверяет исключения и выводит адрес и текущее значение, а потом уже подходящие значения добавить в СЕ.
  8. Вот нашел, передача аргументов через стек наиболее часто используется для передачи аргументов при вызове процедур. Суть этого способа заключается в том, что вызывающая процедура самостоятельно заносит в стек передаваемые данные, после чего передает управление вызываемой процедуре. При передаче управления процедуре микропроцессор автоматически записывает в вершину стека 4 байта. Эти байты являются адресом возврата в вызывающую программу. Если перед передачей управления процедуре командой call в стек были записаны переданные процедуре данные или указатели на них, то они окажутся под адресом возврата. Стек обслуживается тремя регистрами: ESS - указатель дна стека (начала сегмента стека);ESP - указатель вершины стека;EBP - указатель базы.
  9. 2-й пример написан на C++ и это обработчик ошибок. Вроде твой случай тык.
  10. partoftheworlD

    Won day of defeat

    Не нашел в гугле эту игру.Но предположу, эта та которая на соурс движке игра?
  11. Время для ночной статьи .Последнее время, я заинтересовался не просто поиском значение и созданием трейнера, а тем как работает функция, которую я нашел. В этой статье я расскажу, как сделать использование телепорта без перезарядки и изменение дальности прыжка при телепортации. Для поиска Перезарядка: 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 ? ? ? ? Сразу покажу коды.
  12. Почитай про условные переходы на ассемблере. Если не ошибаюсь, то должно выглядеть примерно так. Не силен в ассемблере) 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
  13. Возможно, записываешь в экранное значение и из-за этого проблемы Или фильтр надо создать, чтобы другие функции работающие с этим адресом не крашились.
  14. Спасибо, попробую. Кстати если надо, чтобы игроки отрисованные glow не лежали на земле сделай проверку if (entity->isDormant()){ mem->WriteMem<bool>((GlowBase + ((entity->getGlowIndex() * 0x38) + 0x24)), false);}else{ mem->WriteMem<bool>((GlowBase + ((entity->getGlowIndex() * 0x38) + 0x24)), true);}Спасибо, помог откорректировать значения и будет прекрасно работать. +Rep обязательно
  15. По этому коду получается, что Ang будет всегда отрицательный и около нуля, анти-отдача будет работать, но тогда я не смогу двигать прицелом. Уже все что можно перепробовал, осталось только через центр экрана попробовать и с помощью CreateMove) Да Ang[2] всегда 0. Видел как в других читах работает, и как у меня, хотя код одинаковый, значения правильные, единственное где может быть ошибка это в записи Ang.
  16. Одно дело идеи, а другое ограничение со стороны сервера и VAC
  17. Админы, пожалуйста смените название игры в заголовке и посте с Darkness 2 на Darksiders 2. NullAlex: Изменено.
  18. Раз нашел экранные это уже хорошо, возможно они зашифрованные, помню видел видео по взлому ресурсов в героях меча и магии. Может быть твой случай. Раз вызовов много, то можешь внутри покопаться.
  19. Часть 1 К 4 утра нашлось все-таки свободное время 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 } }
  20. В этот раз статья будет состоять из 2 частей, постараюсь дописать сразу как появится свободное время. В первой у нас будет теория о том как работает анти-чит и как можно его обмануть, во второй напишем простейший Bunnyhop. Часть 1. Теория. Немного теории о том как работает SMAC анти-чит на примере Bunnyhop.Ссылка на репозиторий анти-чита. SMAC это довольно не плохой анти-чит и к тому-же c исходным кодом.Как же анти-чит вычисляет читера? Ниже под спойлером функция обнаружения использования Bhop.
  21. Спасибо, дальше думаю написать статью про создание Bunnyhop с обходом SMAC
  22. Упс...спасибо надо будет исправить
  23. Надеюсь кому-нибудь это поможет. Несколько лет назад я делал 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;}
  24. Может сделать ограничение по размеру загружаемых картинок?