-
Постов
2 999 -
Зарегистрирован
-
Победитель дней
129
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные MasterGH
-
-
>> Сделал скрипт, но игра вылетает
В данной ситуации подсказать ничего не могу.
>> Где можно почитать туториалы про использование функций?
Если такие туториалы и есть, то они настолько сложны человеку который не пишет программы на C++ и не отлаживает их в отладке. Так что я думаю, даже браться не стоит. Есть какие-то документы на официальных источниках о соглашениях по передачи аргументов в функцию. Там тебе подробно опишут что происходит с esp, ebp, как они меняются, что происходит в стеке когда работает call. Но об этом лучше не читать, а видеть в пашаговой отладке твоей собственной программы.
Самый простой вариант и совет как прокачать свои скилы в области вызовов игровых функций. Это скомпилировать прожку консольную с функцией в которую передаются параметры. Возьмёшь отладчик и исследуешь её. И с Cheat Engine потренируешься с созданием CreateThread. Ещё бывают "вкусные" функции импотрируемые из dll-ок. Там по проще будет. Также найди и установи IDA с декомпилятором IDA Hex Rays. Декомпилятор возможно правильно будет определять агрументы функций... Короче тебе надо много практики чтобы понять что и как.
-
Andrey сам ввёл путаницу) В этой теме пишет про ТЧ, в статье речь идёт об ЗП 1.6... а не может так быть, что статья началась про ЗП, а закончилась ТЧ?)) Я пока тоже сижу разбираюсь с этой инструкцией...
Ой... я извиняюсь
Я видимо очень спешил... Вообще я совершенно не помню как я писал ту статью. Я исследовал обе игры и кажется в одном документе. А потом всё кусками слепил. Ну вот и получилось, что получилось. Жаль...
Так что я сам не помню что это ТЧ или ЗП.
-
Очень сложно дать точный ответ. Возможно, сместился стек и на 100% как именно он сместился непонятно.
Возможно, нужно сделать так
[ENABLE]
alloc(newmem,1024)
label(exitThread)
newmem:
mov eax,[esp]
mov [exitThread],eax
push 01
push 005F6298
call 0052C7E0
push eax
call 005052C0
mov eax,[exitThread]
push eax
ret
exitThread:
dd 0
createthread(newmem)
[DISABLE]
dealloc(newmem) -
Попробуй так:
[ENABLE]
alloc(newmem,1024)
newmem:
push 64
push 02
call 004A1240 // отсюда мы получаем eax по параметрам 0x64 и 0x02
mov ecx,eax
call 004CFA50
ret
createthread(newmem)
[DISABLE]
dealloc(newmem)Если что-то не получается, то смотри другие регистры и стек. Если не понял в чём прчина, то придётся тебе пробежаться по этим коллам, посмотреть в них глобальные переменные, т.к. вполне возможно от них что-то зависит. Вообще, всё надо проверять в отладчике при срабатывании исключения. Скорее всего ты сразу поёмёшь на каком участке был "сбой"...
-
В категории "Наши релизы"
1) Добавлен форум "Для Эмуляторов: трейнеры, скрипты, таблицы"
2) Форум с названием "Запрос", т.е. запросы трейнеров и т.п. перемещён вверх
3) К некоторым форумам добавлено уточнение о том, что в них могут писать только пользователи из группы "Разработчики"
-
Найди адрес патронов. Поставь бряк на доступ. Выстрели и поищи инструкцию что на рисунке. Адрес инструкции может отличаться.
Желательно чтобы версия игры была той же что и в статье.
-
Регистрация переменных удобнее через Lua.
onOpenProcess(processid)
reinitializeSymbolhandler()
pClassHero = getAddress("[00410000] + 40")
registerSymbol("pClassHero", pClassHero)
endДля версии CE 6.2
Лучше использовать без сохранения переменной
registerSymbol("pClassHero", pClassHero , false)
Теперь можно в АА скриптах или в Lua скриптах использовать символ "pClassHero"
Но если всё-таки нужен АА-скрипт, то можно и так
[ENABLE]
alloc(Init, 256)
label(pPointer)
label(TheEnd)
registersymbol(pPointer)
Init:
mov eax, 00410000
lea eax, [eax+40]
mov [pPointer], eax
ret
pPointer:
dd 0
createthread(Init)
[DISABLE]
dealloc(Init)
unregistersymbol(pPointer)Если где ошибка, то надо поправить. Я же не могу всё помнить и нет времени проверять
И ещё кое-что. Сомневаюсь, что в процессе игры речь может идти о "классах". Класс это тип данных. Структура в программировании это тоже тип данных, однако "структура данных" это уже не тип, а реализация. Чтобы не писать длинное словосочетание "структура данных" можно писать просто "структура". "Структура игрока", "структура врага", "структура оружия", "указатель на структуру оружия", "указатель на структуру врага" и т.п. Всё - структуры.
-
Попробуй искать тип float как "неизвестное" в промежутке от 0.0 до 1.0. Первый поиск как неизвестное значение. Второй и последующие как уменьшилось/увеличилось/интервал от нуля до единицы.
-
Cheat Engine 6.2 Beta 1 (Wed Jan 18, 2012)
Ссылка для скачивания:скачать
Fixes:Fixed the first plugin from not getting activated at restart
Custom types can now do an unknown initial value scan
Fixed the auto assembler highlighter from hiding some text while typing
Additions and changes:
Added a profiler so you can find function entry points and see how often they are called
Deleting a plugin now calls FreeLibrary on it
Ctrl+enter in the luaengine form now automatically executes the command
Added direct 3d hook functions (can be used to show trainers inside games)
Plugins settings between the 32 and 64-bit executable are now seperated
Recalculate addresses with only one selection now only updates the siblings and children. Doesn't touch the parent node
Addresslist entries can have the notation +xxx and -xxx, which will calculate the address based on the parent address (If the parent address changes, these change automatically
The structure dissect has been rewritten from scratch, and the functions have been exposed to lua as well
Structure dissect now supports custom types
Added a new step to the tutorial (step9) showing how to deal with shared code
Made the tutorial translatable as well
Added a new trainer type which generates trainer that are a lot smaller in size (прим. тоже exe-трейнер, но без CE не запускается. Я думаю, что рекомендуется использовать этот новый формат тогда, когда файлы .CT и .CETRAINER имеют большой размер xml-разметки в не сжатом виде. Новый exe-формат содержит эту разметку внутри себя в упакованном виде и работает как автораспаковщик и лаунчер)
Added a groupscan type which you can use to scan for different things in the same block
-
Так ведь простая арифметика, смотри:
Адрес указателя = значение по адресу [eax+esi*4]
Допустим, что в eax у нас 5, а в esi у нас 7. Тогда адресом будет:
[5 + 7*4], или [5 + 28], или [33]
Штука тут в том, что значение esi может быть разным, так что нам нужно сначала прочитать его, затем домножить на 4, прибавить к полученному значение eax и только после этого ReadProcessMemory("сумма") - это и будет адресом указателя. (:
Да не это он хочет узнать
, а как многоуровневый указатель найти до статического адреса (если его вообще там можно построить). Очевидно, что регистр eax там на начало структуры, а esi может меняться от игровой сцены к сцене. И он не знает что делать с этим esi. А мы тоже не телепаты и не роботы на вопрос каждого новичка давать готовое решение.
-
>> я нашел значение в своей игре(игра warhammer40.000).хочу написать трейнер но не получается так как немогу найти стат адрес.а стат. адрес немогу найти из за неизвестного смешения.
nnzz, игра которую ты выбрал сложная для создания читов. По этой игре опубликованы скрипты на CE на форуме CE. Ищи тему по этой игре в форуме Автоассемблера и разбирайся.
-
Наверно, лучший способ встроить "виртуальную машину с чит-кодами" в процесс игры , которая работала бы только на определённом ПК. В этом случае не имеет роли как работает трейнер. Т.е. трейнер генерируемый CE это или нет это без разницы, главное то что внедряемая защита исполняется только на определённом компе. И здесь лучше привязывать исполнение виртуальной машины не только тупо к харду, а скорее к тому как одно или несколько устройств индивидуально работают. Так что ещё + драйвер варганить. Который можно сделать на CE записью в системную память через автоассемблер вроде через kernelalloc(метка, размер).
Но, цель возможно не оправдывает создание подобной защиты. Точнее совершенно не оправдывает, т.к. просто тупо хотеть чтобы трейнер работал для кого-то это глупо с такими сложностями в реализации. Эту защиту можно заказать у программистов наверно от 30-60 тыс руб и более, а если ещё совместимость с CE то и ещё больше. Так что кому надо пусть идут на фриланс и ищут талантливых кодеров и не бояться что кинут
Все остальные защиты имеют больше шансов быстрее быть взломанными. Есть правда и другой тип защит от распространения трейнеров, такой как у cheathappens. Но это скорее защита "сдерживания" распространения и завязана на деньгах за оплату аккаунта на определённое время. Если узнают что какой-то трейнер ушёл в массы, то извлекают зашифрованный код лиценции из трейнера и эту лицензию у человека "который раздал свой трейнер" обнуляют. А лицензия там
CHEAT HAPPENS UNLIMITED Only $39.95 (USD) per year or $79.95 $59.95 (USD) for three yearsИтог. Кому нужна защита, те изворачиваются как могут.
-
>> В СЕ есть возможность ставить бряки с помощью тренера?
В генерируемом *.exe трейнере вроде можно, но надо проверять. Формат *.CETRAINER совершенно точно позволяет это делать, проверено мной.
>> А какие утилиты имеют такие же функции, что и СЕ? брекпойнты и тп
GodGame, MHS, OllyDbg, IDA или любой отладчик.
-
Я абсолютно не сомневался, что у тебя получится задуманная идея.
Мне как бы похвастаться по работе с голым ДаректИКС нечем, кроме компиляций и разбора с десяток примеров как простых так и примеров из DirectX SDK. Такой хук аналогичный твоему я тоже делал, только на Дельфи. Но могу посоветовать кое-что для дальнейшего развития и исследований.
1) Посмотреть жизненный цикл пары программ из примеров из DirectX SDK. Таких моментов как потеря устройства, directX обработка ввода с клавиатуры и мышки, почитать какие события можно обработать, какие общие функции. Это может тебя заинтересовать и толкнуть на новые идеи, которые могут быть тебе будет интересны.
2) Попробовать написать свое приложение с ДаректИКС в котором обрабатывается directX ввод с клавиатуры или с мышки. Обычно это вереница кейсов в свитчах. Это тоже толкает на некоторые интересные идеи по поиску в играх в отладчике нужного участка кода по вводу от польозвателя
3) Если никогда не делал игровые сцены, то очень полезно на игровом движке посмотреть примеры игр. Советую Unity3D и пример AngryBots который идёт в комплекте. Обратить внимание на управление персонажем, управление камерой, на построение иерархии игровых объектов. Но а также советую пример сцены 3D - шутера:
Пусть там язык C#, но зато понятно как работать с материалами, анимацией и др. На других примерах можно узнать что такое и как работать с шейдерами и системами частиц. Очень познавательно. Но а затем набравшись практики можно делать серьёзные читы похожие чем-то ближе к модам.
-
Это можно поправить изменив исходники Cheat Engine. При чем это не просто пару строчек кода написать. А без знаний языка программирования почти не реально.
Так, что крупный облом вышел с "привязкой" для автономных трейнеров на CE
-
Мм, продолжу тему. В конце статьи пишется про возможность хука ендсцены, etc. Имеем адрес устройсва, найденного заранее для игры на dx9. Пробую сделать хук:
LPDIRECT3DDEVICE9 myGame;
while(!myGame)
myGame = (LPDIRECT3DDEVICE9)0x059457F8;// наш адрес д3д устройства
//насколько я знаю EndScene находится под индексом 42 в виртуальной таблице
DWORD* GameDevice = (DWORD*)myGame;
GameDevice = (DWORD*)GameDevice[0];
//тогда можно использовать кодкейв, ничего лучше ms detours для этого нету ; )
oEndScene=(tEndScene)DetourFunction((PBYTE)GameDevice[42],(PBYTE)&EndScene);...
но нифига не работает
есть у кого более глубокие знания?
Берёшь отладчик, берёшь справку, берёшь компилятор + DirectX SDK. И "получаешь более глубокие знания"
-
Я не могу дать точный ответ, потому что меня запутало представлять какие бряки и когда ставить.
Я просто прокомментирую.
Давайте вообще поймём, что в статье делается.Статья очень большая, а написать-то Автору первоисточника надо было чуть проще и статью читать с конца к началу.
Наша задача найти указатель на устройство редеринга g_pd3dDevice.Т.е. g_pd3dDevice это адрес по которому располагается адрес устройства.
LPDIRECT3D9 g_pD3D = NULL; // Используется для создания D3D устройства
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Наше устройство рендеринга
HRESULT InitD3D( HWND hWnd )
{
// Создаём D3D объект, который необходим для созданияD3D устройства.
if( NULL == ( g_pD3D =Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
if( FAILED( g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
{
return E_FAIL;
}
// Если устройство создано - возвращаем S_OK
return S_OK;
}Посмотрите последний абзац статьи, там где есть скриншот стека с выделенным последним адресом - т.е. g_pd3dDevice. Наша задача как в статье выйти на вызвов g_pD3D->CreateDevice(….,&g_pd3dDevice). Чтобы выйти на этот участок, мы должны найти указательна g_pD3D, прозвонить call [ [eax] + 3c], где eax= g_pD3D. Вот там где мы окажемся по call и будет вызов g_pD3D->CreateDevice(….,&g_pd3dDevice) и там мы снимем показания стека на бряке. Чтобы найти g_pD3D мы должны найти Direct3DCreate9 или иную смотря какая у васверсия дайректИкс dll-и.Теперь смотрим внимательно статью ещё раз и думаем как снять показания, когда и какие бряки ставить.
Но я предлагаю совершенно другой вариант. В том же ollyDbg поставить условный бряк на функцию процедуры окна на сообщение WM_PAINT и искать машинный код вот такого условия сравнения с нулём
if( NULL ==g_pd3dDevice )
return;
Где после этого сравнения будут вызовы типа call [[g_pd3dDevice]+ смещение] или g_pd3dDevice->функция(..):
//-----------------------------------------------------------------------------
// Имя: Render()
// Описание: Рисование сцены
//-----------------------------------------------------------------------------
VOIDRender()
{
if( NULL == g_pd3dDevice )
return;
// Очистка backbuffer'а в голубой цвет
g_pd3dDevice->Clear( 0, NULL,D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
// начало сцены
if( SUCCEEDED(g_pd3dDevice->BeginScene() ) )
{
//Рендеринг объектов сцены должен находиться здесь
// Конец сцены
g_pd3dDevice->EndScene();
}
// Выводим содержимое backbuffer'a на экран
g_pd3dDevice->Present( NULL, NULL, NULL,NULL );
}
//-----------------------------------------------------------------------------
// Имя: MsgProc()
// Описание: Обработка сообщений
//-----------------------------------------------------------------------------
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
Cleanup();
PostQuitMessage( 0 );
return 0;
case WM_PAINT:
Render();
ValidateRect( hWnd, NULL );
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}Для проверки g_pd3dDevice посмотрите смещения call [[g_pd3dDevice]+ смещение] где смещение равно
вызову функции Clear(), вызову BeginScene(),вызову EndScene(),Present(). Если подобную манипуляцию сделать однажды, то потом установить адрес устройства редеринга будет проще чем через способ , который автор первоисточника написал в статье. Но он-то написал это на примере работы в отладчике в режиме отладки, а если его способ автоматизировать то его способ будет даже наверно попроще моего, т.к. мой способ автоматизировать будет сложнее.
-
Ох... не будет автор модернизировать CE. Это уже обсуждалось.
-
Уважаемые пользователи, давайте не будем обсуждать CE vs Artmoney. Давайте обсуждать GodGame и конкретные вещи, и конкретные предложения. Автор программы напишет, что сделать реально, а что не реально. Вот и все
-
>>Ну это уже Cheat Engine получится, я специально делал так, что-бы окна не перекрывались.
Если окна будут "не перекрываться", то невозможно будет без переключения между окнами работать с "дизассемблером, сканером памяти, окном скриптов". Речь идёт об удобстве. Напримере в MHS есть два варианта. Хочешь можешь слипить окна в одно, а хочешь можешь их разъединить. Делается все через drag and drop. Конечно, можно оставить как есть, я только предлагаю удобный вариант который я юзаю уже года 4 на Cheat Engine, MHS( было дело).
-
Да, перевод другой. Чтобы была настройка как на рисунке
То на этом рисунке
нужно выбрать "Использовать int3 инструкции для точек останова (неограничено)"
-
Есть не очень удобная штука
1) Когда передаём фокус на адрес кликом (1) в окне дизассемблера, то в дизассемблере отображается первый адрес на который кликали(2). Было бы хорошо чтобы этот адрес(2) был не вверху окна дизассемблера, а по середине.
2) Если я передал фокус фокус на адрес(1), то пока я не передал фокус на дизассемблер, то я не могу скролить колесом мышки. Было бы хорошо, если можно было бы скроилть колесом мышки дизассемблерный код когда курсор перешёл в область панели дизассеблера.
3) Было бы удобно редактировать дизассемблерную инструкцию двойным кликом по колонке дизассемблерного кода, чтобы это не было установкой бряка на выполнение.
4) Ещё один момент. Если у меня сработало 10-20 инструкций, то я должен 10-20 раз кликать по адресам или перемещаться по ним, чтобы видеть дизассемблерный код в дизассемблере. Было бы удобно видеть список не просто "адрес - кол-во хитов", а такой
1) 00410400 mov eax, [ebx] 3
2) 00410440 mov eax, [ecx] 30И лучше это делать в отдельной форме, которая показывается как только поставили бряк на адрес.
5) Когда я работаю в окне редактора скриптов, я не могу видеть другие окна. Ни дизассемблер, ни сканер памяти. Т.е. мне надо постоянно перемещать между окнами, когда мой монитор позволяет разместить отдельные окна и видить и работать с ними. Это довольно не удобно.
6) Когда я пишу скрипт формы мне приходится переключать редактор скрипта на форму и обратно. Хотелось бы видеть форму и видеть редактор скрипта одновременно.
7) Явно какая-то проблема с выравниванием контролов (характерно для всех версий GodGame на Windows7):
-
В этой теме ведётся обсуждение технических возможностей программы GodGame.
1) Описание функционала новых и старых версии
2) Обсуждение работы программы, что работает и что не работает
3) Предложите что-то исправить или что-то сделать
Здесь пишем ближе по существующему функционалу.
Автор программы GodGame не задёт вопросы в этой теме:
1) не задаёт вопрос типа "ищу того и того человека" для того и того
2) не задаёт вопроса типа "а что если я сделаю то и то, а как вам это понравится или не понравится"
Эти вопросы он может задать в этой теме, существование которой пока не подтверждено Xipho.
-
Странности в виде "паузы в месяц" обычно ни у кого не бывает. Никто не задаёт вопросов по читингу, когда в игру попросту играть не может. Зачем же тогда заниматься читингом, если нет возможности "здесь и сейчас проверить". Сие неясности дают повод сомневаться в необходимости оказания помощи по вопросу темы. Минимум- не серьёзно, максимум - искусственное создание проблемы.
Если я узнаю, что под некой Марией сидит парень в надежде, что ему ответят, то это учётная запись будет заблокирована сразу же. Администраторы помнят и в курсе подобной гнусной деятельности одного товарища в образе пользователя "Веронички" , который сам же ей (т.е. себе) ещё и писал от других колонов для того чтобы других пользователей втягивать в беседу. Так что я на чеку
Так что Мария пиши, когда игра будет "на руках". Если через месяц, то через месяц
GTA 3, вызов процедуры
in Вопросы по созданию читов в одиночных играх
Опубликовано
Хороший вариант использовать Lua Engine. Нужно поменять Player, названия игры, проверить ошибки...