-
Постов
2 999 -
Зарегистрирован
-
Победитель дней
129
Тип контента
Профили
Форумы
Загрузки
Блоги
Весь контент MasterGH
-
>>Не знаете ли где можно почитать подробнее про операции с FPU регистрами и командами на примере игр Я думаю, что нигде. Приложив усилий надо немного понять ассемблер по работе с fpu числами. Найти в Интернете справочник по FPU инструкциям, найти базовые объяснения как и что. Сложение, вычитание, умножение, деление, запись, чтение, выталкивание из стека fpu, добавление в стек fpu, преобразования из одного типа в другой, понимание смены состояния флагов при операциях с fpu (иногда флаги меняются, а игра это может неправильно понять). Вот и все. Один из туторов по асму из справки по Cheat Engine с некоторыми инструкциями FPU (в разделе туторов по асму):
-
Ссылок у меня нет. Пиши в гугль и в соответствующие специализированные форумы по программированию и отладке. Отладочная информация в виде наличия названий функций это рудимент от дебажной версии. Иными словами это мусор, который от версии к версии игры может меняться не понятно как или вообще может быть удален в локализованных играх. Это нужно для ведения логов, поиска багов и прочей рутины как обратная связь в случаях критических ошибок. Это информация может быть полезна для исследования кода, но для читов, для поиска адресов инъекций это сомнительно на мой взгляд. Требуются проверки на разных играх, версиях, ломалок, официалок, локализациях и прочего. Предположительно поиск по сигнам без статик адресов и смещений в сигнах дает правильный результат в большинстве игр и патчах к ним. В редких случаях код значительно меняется, тогда сигна не находиться. Если сигну построить по первым байтам инструкций размером больше трех байт, то можно строить инъекции АА автоматически, не зная какие регистры на адресе, а зная шаблон инструкции. Например, шаблоны: левая и правая части дизассемблированной интсрукции (mov r32, r32, mov [r32],r, mov r, [r32]), только одна часть fld [r32], или несколько частей (imul r32,r32,h)...
-
073B107B - F2 0F10 45 D0 - movsd xmm0,[ebp-30]073B1080 - F2 0F2C C0 - cvttsd2si eax,xmm0073B1084 - 89 86 90000000 - mov [esi+00000090],eaxВ стеке проскакивает double тип и преобразуется инструкций cvttsd2si в float тип (или integer, фиг его поймешь сходу). Два варианта 1. Искать double число в промежутке от число-1 до число+1. "Увеличилось", "уменьшилось". Лучше не использовать "равно", "изменилось", "не изменилось", если не уверен в этом 2. Идти вверх по коду (можно по стеку или через трейс после бряка с остановкой проецесса). Бряки с остановкой можно делать в CE или в OllyDbg, или других отладчиках. В общем если второй пункт сложный, то смотри первый пункт.
-
Тут 4 варианта: 1. Адрес через поиск байт по сигнатуре 2. Получение адреса из getAddress(string, local OPTIONAL). Это если на CE трейнер ваяешь 3. Отключить символы/метки как я писал, включить модульную адресацию. Тогда будет game.exe+offset 4. Отключить символы/метки как я писал, отключить модульную адресацию. Тогда будет тупо адрес Если пишешь на С++ смотри хелп по получению имени функции и адресов. Там вроде по отладочной информации из файла рядом. Да, если не ошибаюсь на АА будет SimSalabim.Game::SuperMagic+15: // тут твой код Да и еще можно юзать новые директивы Переменные Lua в АА скриптах с префиксом доллара $ (если я перепутал, давно не юзал)
-
1. Сумму значений я встречал в трех играх. Две не помню. Одна Тибериум какой-то версии. Там были кристаллы (общее количество было суммой из двух адресов). В одной из игр в шутере здоровье было у отдельных частей тела (руки, ноги, голова, торс) и складывалось в общее здоровье и в броню 2. Сумма количества структур. На моей памяти Сталкер, патроны. Я как-то ломал на Чернобыля, но на другой версии Сталкера не прокатило. Гранаты в Sniper: Ghost Warrior (я так и не взломал). В какой-то старой игре стрелы из лука (тоже не получилось). Чтобы увеличить до максимума можно попытаться исследовать перезарядку оружия или поднятие в инвентарь. В теории надо бы вызывать функцию "взятия" патронов в инвентарь. Можно еще поднятия оружия с земли, вызвав предварительно функцию создания его по id предмета (названия, или указателя на структуру предмета), координатами и кватернион углами. На Unreal Engine 3 движке спавн игрового объекта вызывается например такой функцией AActor* UWorld::SpawnActor ( UClass* Class, FName InName, FVector const* Location, FRotator const* Rotation, AActor* Template, bool bNoCollisionFail, bool bRemoteOwned, AActor* Owner, APawn* Instigator, bool bNoFail, ULevel* OverrideLevel, bool bDeferConstruction ) Пример AKAsset* SpawnedActor1 = (AKAsset*) GetWorld()->SpawnActor(AKAsset::StaticClass(), NAME_None, &Location); В UDK главные классы это акторы и компоненты. От Акторов наследуют пользовательские классы, а компоненты связываются с ними для визуализации объекта, создания поведения и прочего. 3. Шированное значение мне помниться в игре Loki. Там float шифровался и расшифровывался через xor. Больше игр не припоминаю.
-
Если удалось найти только адрес с видимым значением в игре, то можно изучить отладочный код того как значение записывается в этот адрес (через бряк на запись). В одной из игр я так определил, что значение рассчитывалось из суммы других значений через цикл. В этот цикл я подставлял максимальные значения. Вот и все. В другой игре подсчитывалась сумма из количества структур и эта сумма выводилась как видимое значение. В другой игре значение поступало как расшифрованное из зашифрованного. Зашифрованное значение найти было довольно трудно, очень долго, бесконечные поиски изменилось/не изменилось.
-
Лив, не в обиду, но тебе бы попробовать так хорошо писать не посты, а музыку. Так же весело со смайлами. Тогда, возможно, сможешь насладиться самокритикой желательно на видео, на ютубе Xipho молодец, т.к. это большое творчество. У меня как таковых музыкальных навыков не было или я их не развивал Я музыку могу слушать практически любую, она у меня постоянно фоном играет. Другое дело когда слышишь живой голос, песню и хоть какой-то смысл.
-
Думаю, вам очень интересно узнать какие файлы просматривались самое большое количество раз. Начнем с 5-го места и до 1-го. 5. Место. Картинка к статье. Просмотров 974 раз Безымянный_16.jpg 974 Grom-Skynet Как найти идентификатор игр... 27 Ноя 2011 23:08 4. Место. Картинка "Вид трейнера". Просмотров 1118. 0628aa5b3efe46575a2894c99035ea4a.jpg 1118 Grom-Skynet Gta Vice City Trainers 18 Апр 2011 19:40 3. Место. Картинка "Вид трейнера". Просмотров 1270 раз Безымянный.jpg 1270 Grom-Skynet Need For Speed Underground 2 23 Окт 2011 14:54 2. Место Архив с трейнером. Обращение 1611 раз Трейнер Deus Ex.Human Revolution.v 1.0.618.8 +7.rar 1611 Grom-Skynet Deus Ex.Human Revolution 30 Авг 2011 02:39 1. Место. Картинка к статье. Просмотров 1616 раз 1.png 1616 MasterGH Туторы по CE Autoassembler... 20 Апр 2011 10:09 Подводим итоги. В топ попали файлы только двух авторов. 2 скрина из статей, 2 скрина трейнеров, 1 архив с трейнером. Наибольший спрос почему-то на первую картинку занявшую 1-е место из моей статьи по туторам CE Autoassembler. Видимо АА-скрипты волнуют пользователей не на шутку. Наверно, это тема очень многих интересует. Хочется отметить очень удачную статью Grom-Skynet, скриншот, которой занял 5-е место. Была бы эта статья написана не в ноябре, а апреле, то думаю это был бы топ. Места со второго по пятое занимают файлы от Grom-Skynet. Из файлов Grom-Skynet наиболее популярен файл Трейнер Deus Ex.Human Revolution занявший 2-е место. Это файл архив, а не картинка. Его именно решили скачать и запустить. Видимо, трейнер был очень нужным. И остается пара картинок-скринов трейнеров к очень популярным играм Need For Speed Underground 2 - 3-е место и занявшая 4-е место Gta Vice City Trainers .
-
Ты уверен что там Float переменная? Выполняй в консоли отладку для проверки чтения адресов и их существования: A = getAddress('"Game.exe"') print(A) B = getAddress('["Game.exe"+01D9CC08]') print(В) C = getAddress('["Game.exe"+01D048D0]') print(С) //для новых экспериментов увелчивай вложенность скобок, пока не найдешь ошибку в чтении адреса D = getAddress('[[[[["Game.exe"+01D9CC08]+1c8]+240]+70]+238]+f4') print(D) E = getAddress('[[[[["Game.exe"+01D048D0]+f8]+28]+1b0]+30]+1c4') print(E) Смотри не будет ли ошибок. *На будущее. Используй createHotkey вместо таймера. Твой тамер очень часто выполняется при удерживании клавиши. *На будущее. Не повторяй чтение указателей за один проход, когда можно сделать за раз. Повторяется три раза [[[[["Game.exe"+01D9CC08]+1c8]+240]+70]+238] и три раза [[[[["Game.exe"+01D048D0]+f8]+28]+1b0]+30], а могло бы по одному разу
-
По аналогии посмотри тему форума /* How enemies will be shown Close enemy: - Red: In front - Orange: Behind object Far enemy: - Lime Green: In front - Dark Green: behind object Very far enemy: - Light Blue: in front - Dark Blue: behind object */ DWORD old_render; if (ENEMY_1 || ENEMY_2 || ENEMY_3 && Stride == 56){ //pDevInter->GetTexture(0, &textC); //[option 2] -> to let very close enemies have their correct texture pDevInter->SetRenderState(D3DRS_ZENABLE, false); pDevInter->SetTexture(0,texOrange); pDevInter->GetRenderState(D3DRS_ZFUNC, &old_render); pDevInter->SetRenderState(D3DRS_ZFUNC, D3DCMP_NEVER); ((pDrawIndexedPrimitive)api_DrawIndexedPrimitive.adr_new_api) (pDevInter, device, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount); pDevInter->SetRenderState(D3DRS_ZENABLE, true); pDevInter->SetRenderState( D3DRS_ZFUNC, old_render); pDevInter->SetTexture(0,texRed); //[option 1] //pDevInter->SetTexture(0,textC); [option 2] }//...
-
Имеет смысл не меняя этот код (на видео) попробовать его на той же игре, что на видео. Обязательно! Первым делом! Только тот код и только та игра. Проверь внимательно совпадает ли он с тем что на видео. Если не успешно, то искать причину логируя в файл ключевые моменты, а именно, проверка на null текстуру, прохождение тех или иных условий. Все пусть логируется. Если логи слишком частые, то хотя бы первые пару тысяч строк лога. Если успешно, то пробовать на разных играх. Если опять не успешно, то обязательно разобраться с тем что и какая строчка кода делает (вообще желательно в любом случае разобраться), какой результат должна возвратить, сравнить логи. Попробуй использовать визуальный отладчик этой dll в чужом процессе игры. Мне что-то помниться, что реально прямо из студии. Поставишь бряк, да и посмотришь состояние переменных и регистров. Если не знаешь как, то придется вести логи в файл или в текст в gui.
-
Нашел пару багов. 1. В одной из своих тем внутри первого спойлера не открываются в полный размер две последние картинки. При наведении на них не видно полной ссылки. Что-то случилось. Либо конфликт с именами файлов, либо с типами поддерживаемых файлов (jpg или png) какой-то запрет, либо ссылки утеряны с запрещенными символами, либо файлы удалились из хранилища. 2. Этот баг давний. Старый тег cod и новый code из списка доступных BB специальных тегов. Список можно вызывать создавая пост, по третьему верхнему значку "Специальные BB-коды" . Тег cod не работает. Его можно удалить из списка возможных. Но это так, если есть желание править.
-
Я так понял проблема перевода с С++ на С# Список из List<BaseTexture> BASETEX перед началом цикла каждый раз инициируется и уже абсолютно пустой. Судя по коду цикл ищет текстуру и естественно не может найти. Поэтому found всегда будет false. На C# у шаблонного класса List<T> есть функция проверки вхождения bool List<T>.Contains<T>(), которая возвратит результат. Вот так бы это выглядело на движке Unity3D List<Texture2D> listTexture2d = new List<Texture2D>();void TryAddTexture(Texture2D texture2D){ if(!listTexture2d.Contains(someTexture)){ listTexture2d.Add(); } }void Start(){ // Запускается один раз var someTexture1 = new Texture2D(10,10); var someTexture2 = new Texture2D(10,10); TryAddTexture(someTexture1); TryAddTexture(someTexture2);}
-
Полностью поддерживаю Xipho и Coder-a. Много раз обсуждалось. Хотя бы напиши что делал, что не получилось. Хоть лисстинги инструкций, данных регистров. Я вижу два способа: точный и не точные. Точный Игра всегда знает кто чужой, а кто свой. Одни игроки по этому условию (бинарному или иному) могут или не могут что-то делать с другими игроками. Твоя задача найти это условие и использовать его в инъекции кода. Не точные (или экспериментальные) Сравнивая структуры между игроками. Или же поиск инструкций, которые бы работали с одной группой юнитов и не работали бы с другой группой. Тут теоретизировать особо смысла нет, надо ковыряться с игрой. Так что ковыряйсо пока не получится. Пиши сюда в тему, что и как делал
-
Спасибо автору за публикацию своих трудов. Для следующей темы видео могу предложить "Вызов игровых функций с параметрами". Например, можно найти функцию, которая поднимает валяющийся предмет и кладет в инвентарь. Задача найти эту функцию и принудительно вызывать её с нужными параметрами. В трейнере создать какой-нибудь несложный интерфейс пользователя, который позволяет класть в инвентарь разные предметы, оружие. Так что довольно интересная тема. Конечно, в функцию может передаваться указатель на структуру данных - предмета, который уже был создан в игровом мире. Опять, же должна быть функция, которая этот предмет создавала ранее. Также интересная задача найти и её. Значит надо уже вызывать две последовательные функции "создание предмета в мире" и функцию "положить в инвентарь" передав указатель на структуру данных предмета.
-
После рута мой девайс переставал получать обновления. Прошивку придется ставить другими способами. О них можно найти в Интернете. После установки рута, можно его убрать поставив официальную прошифку через специальный официальный софт. Название уже не помню. С его помощью можно не только обновлять прошифку, но и синхронизировать данные между компом и девайсом.
-
Сводится к замене одной цепочки байт на другую (или другие цепочки байт по адресам). Цепочки получаются через дизассемблер/ассемблер. Запись в память на С++, изменение и возвращение прав на запись у страницы памяти, открытие и поиск процесса. Все что достаточно знать. Подробности можно поискать в Интернете или примерах исходников трейнеров.
-
Без рут прав: 1. Распаковка апк, изменение, сохранение, перепаковка, переподписывание, установка на планшет/телефон. Софт 100% есть в Интернете, сам юзал, но давно. А для Андроид игр созданных на Юнити3д игровом движке игровую логику можно редактировать более просто и даже добавить свой огромный шмат кода, данных и т.п. В чужие апк-игры я свой код не добавлял, но вроде ничего не мешает. 2. Андроид эмуляторы на ОС Винды + тач экран + сканер памяти. Мультитач эмуль может не поддерживать, "я не в курсе ребят". Вариант наиболее предпочтительнее для сканера CE, Артмани и т.п. 3. Редактирование сохранялок на внешней памяти, если такие сохранялки есть. Насчет внутренней памяти не помню, нужен рут или нет (скорее всего да). Значит, редактировать сохранялки можно как внешней программой-апк, так и в самом измененном апк (из пункта 1, в этом случае доступна внутренняя память для сохранялок без рут режима). Сохранялки, скорее всего ,шифруются, так что велком в пункт2 за инфой по расшифровке.Файлы сохранения обычно не меняются при обновах. Инфа о покупках обычно сохраняется локально в зашифрованном виде. В играх, которые без Интернета не работают, данные о покупках могут хранится удаленно... 4. Еще есть способ, который я бы не рекомендовал использовать. Ведь надо же поддерживать автора апк, а не тырить. Поставить все-таки рут и патчи-хаки на создание фейковых покупок. Но я никогда это не делал. Если это будите делать, то на свою совесть, можно на отдельном планшете, на котором не страшно схватить вирус, не засветится ваш акк с паролем и картой оплаты, не снимут деньги с симки. Если не проканало, то сканером мема прочесать адреса и поправить. Вообще посоветовал бы два планшета (или чего-то еще) как минимум. Один с рутом, другой без рута, вот и тести свои эксперименты включая обновы с гугл плей. Третий девайс специально для тестов чужих хаков от добрых дядей на рут прошивке У меня три планшета все с рутами и ни чего вроде. Какая-то игра была про грибы. Около 50 лвл тупо делаешь одно и тоже. Ждешь, собираешь, варишь... и так можно на полгода. А если надоест, то либо бросай, либо плати за игровые монетки, либо хакай. Ставишь рут, сканер памяти, ищешь, меняешь и все, все уровни открыть не проблема. Игра перестает быть интересной в тчении 10-20 минут. Бедные дети...
-
Хорошая обнова, мне нравится. Пока багов я не видел.
-
Предположительно есть множество способов выяснить дистанцию. Первый способ для нуба, второй для не нуба. Способ 1. Когда дистанция поражения постоянная или постоянная для определенного оружия 1. Находим адрес координат противника 2. Находит адрес координат героя 3. Находим адрес здоровья противника 4. Вычисляем по формуле дистанцию от точки а до точки b public static float Distance (Vector3 a, Vector3 b ) { Vector3 vector = new Vector3 (a.x - b.x, a.y - b.y, a.z - b.z); return Mathf.Sqrt (vector.x * vector.x + vector.y * vector.y + vector.z * vector.z); } 5. Далее смотрим на здоровье противника, отходим, подходим, пытаемся поразить противника по метру меняя положение. Надеюсь противник сразу не умрет. Если умрет, то поставить ему заморозку на адрес здоровья. 6. Так для каждого оружия дистанцию и запоминаем. Способ 2. Когда дистанция определяется через Отладчик 1. Ставим в Олли бряк на функцию выстрела 2. Ставим бряк на функцию уменьшения здоровья 3. Стреляем. Прерываемся на функции выстрела. 4. Ставим трейс по ретам. 5. Отпускаем процесс по F5 6. Попадем в противника, прерываемся на его адресе здоровья. 7. Отпускаем по F5 и должны оказаться на развилке условия, которое ведет в рутину нанесения урона. Скорее всего ты будешь в цикле, в котором сравниваются позиции по дистанции, ну или где-то выше при выходе из call-ов В случае со стрельбой, то массивы коллизий собираются лучом через рейкаст.Пример. (на основе PhysX Nvidia встроенного в Unity3d) Один из них будет адресом координат героя, второй вектор направления, а третий дистанция луча. Вот эта дистанция и будет искомой. using UnityEngine; using System.Collections; public class example : MonoBehaviour { void Update() { RaycastHit[] hits; hits = Physics.RaycastAll(transform.position, transform.forward, 100.0F); //100.0F - дистанция int i = 0; while (i < hits.Length) { RaycastHit hit = hits[i]; Renderer renderer = hit.collider.renderer; if (renderer) { renderer.material.shader = Shader.Find("Transparent/Diffuse"); renderer.material.color.a = 0.3F; } i++; } } В дизассемблерном представлении будет, конечно, иначе. Если какие-то трудности, то пиши примеры на С++ DirectX с либами от PhysX Nvidia и исследуй их в отладке студии. Там все будет и код высокого уровня и код низкого уровня. Это будет подсказкой в исследовании своего же примера по дистанции для обучения с Олли.
-
-Ставить глобальный хук SetWindowsHookEx на запуск процесса -Запускаем игру -Выбираем процесс по названию или сигне в его памяти -Ищем там dll-ку какой-либо версии -Создаешь пустышку версии D3DX и ищешь по vtable адрес EndScene IDirect3DDevice9* pTempDev = ...; const int EndSceneIndex = 26 (?); typedef HRESULT (IDirect3DDevice9::* EndSceneFunc)( void ); BYTE* pVtable = reinterpret_cast<void*>( pTempDev ); EndSceneFunc = pVtable + sizeof(void*) * EndSceneIndex; - Патчишь EndScene на свою функцию c рисованием и затем вызываешь EndScene ориниальную - Под разные версии d3dx в том числе 32 разрядные или 64 разрядные писать дополнительные условия Об этом способе и также кратко о других можно найти здесь или в поисковике в Интернете. Надо просто хотеть найти и все найдешь. Ничего спрашивать не придется, делать молча и все получится. День, два, три... ну не знаю неделю добиться цели... все получится. Примеры в сети можно найти, они рабочие. Самостоятельно разобраться и все.