Перейти к содержанию

Рекомендуемые сообщения

GodGameLogo.png

Автор : Дмитрий Коротаев / Korotaev Dmitry

Версия : 1.5

Site : Открыть

E-mail : Dima_yar@mail.ru

Скачать : Скачать

Скриншоты : 1; 2; 3; 4.

Описание:

Поиграв в новую игру и дойдя до очередного босса, вы стали замечать, что приемущество не на вашей стороне и силы не равны, после очередного поражения, вам захотелось немного схитрить и поставить себе бесконечные боеприпасы и жизни. Но как такое реализовать ? если разработчики игры не предусмотрели встроенных чит кодов. Да очень просто, в этом вам поможет программа GodGame.

Программа GodGame предназначена для поиска и редактирования параметров в компьютерных играх, для получения бесконечных денег, жизней, патронов и т.п

GodGame имеет интуитивно понятный интерфейс, что-бы даже начинающие могли легко ее освоить, но при этом она обладает достоточно широкими возможностями для продвинутых пользователей, в числе которых отладка, поиск многоуровневых указателей и написание своих скрипов.

Так-же в программе присутствует удобный Wizzard для создания трейнеров, сделанные в программе трейнеры поддерживают скины, указатели, заморузку и горячии клавиши...

Ссылка на комментарий
Поделиться на другие сайты

Эта версия, полезна для более менее начинающих пользователей, которые могут попрактиковаться в:

1) создании трейнеров с ограниченными возможностями (не новинка)

2) шпионаже за writeprocessmemory чужих трейнеров (тоже не новинка)

3) сканере памяти (изобретение велосипеда, как и остальное)

Я всё-таки больше склоняюсь к более полезным возможностям. Например, было бы неплохо (и не трудно это сделать) сделать поддержку загрузчика dll-ки в процесс игры созданным потоком. В этой dll-ке специально написанной для игры можно реализовать очень и очень многое вплоть до решений больной темы "обмана количества объектных типов". И при чём написать код в dll-ке  можно на удобном языке высокого уровня поддерживающего ассемблерные вставки. Есть и ещё более гибкий способ (я о нём писал когда-то) это не использоваться код в dll-ках, а копировать код трейнера в процесс игры и исполнять его. Естественно, код трейнера компилируется в среде разработки программ. Это всё для случая, когда пишем авторские трейнеры отдельно для каждой игры.

Ссылка на комментарий
Поделиться на другие сайты

  • 4 месяца спустя...

//Лив обычно файлы на квип.ру долго не живут, насколько я знаю. По программе (не качал) и сайту:

Сайт - видимо что-то с кодировкой, по-русски не читается

Прога - уже само описание - первый абзац копипаст из описания ArtMoney. Наверное автор фанат ArtMoney, как и мы) Функционал наверное аналогичный - сканер памяти и т.п., кроме конечно делалки трейнеров и трейнер Spy (но всего остального в ArtMoney конечно намного больше - её же делают профи). Шпионитиь за чужими трейнерами вообще считаю нехорошо. Если только для общего развития - посмотреть как делают/делали какую-нибудь незнакомую опцию. А вообще была такая прога от члена команды Team-X (в которой состоял и админ Xipho), вроде так и называлась Trainer Spy.

Ссылка на комментарий
Поделиться на другие сайты

Trainer Spy не была разработкой кого-либо из Team-X. Та программа, которую ты, вероятно, имеешь в виду, обладала куда более широкими возможностями, называлась она T300 (если мне не изменяет память), и была разработана членом команды Team-X под ником CyberDoom.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
  • 6 месяцев спустя...

Давненько вышла уже более функциональная версия, прошу заценить, принимаю конструктивную критику, пишите чего не хватает, чего хотелось бы.

История версий

Версия 1.1.0.0 - 27.07.2011

  • Добавлено окно приветствия
  • Теперь программа работает и на Windows 7
  • Добавлен Поиск комманд в окне отладчика
  • Изменена цветовая схема в окне отладчика
  • Теперь статичные адреса помечаются другим цветом
  • Изменен диалог Выбор процесса, добавленна опция: не показывать системные процессы и показывать процессы только с окнами, сортировка процессов, иконки для процессов.
  • Добавлен специальный манифест для меньших конфликтов с системой защиты UAC
  • Заменены некоторые иконки в программе
  • Убранны за ненадобностью некоторые пункты меню
  • А также исправлены небольшие ошибки и недочеты

Версия 1.0.0.0 - 5.05.2011

Первая полноценная версия добавленно очень много, вот некоторые из добавленных возможностей:

  • Добавлен Отладчик для продвинутых
  • Speed Hack
  • Вызов удаленных функций
  • Внедрение своих DLL
  • Поиск неизвестного значения
  • И много много других исправлений

gg_main.png gg_dissasm.png

Ссылка на комментарий
Поделиться на другие сайты

GodGame, если нужно мнение про "заценить", то моё мнение "неплохо". Только жаль, что ничего нового нет из того, что есть в других программах: CheatEngine, MHS и т.п. В кчаестве чего-то нового и полезного, советую вам создать поддержку скриптов для работы с дизассемблированием и ассемблированием. Как именно уже решайте сами.

Может быть так для инструкции 0x00410000: mov eax,[ebx+0C] :


PROCESS game.exe SCRIPT "God-mode" FOR 0x00410000,0x00420000,0x00440000
TYPE mov reg32,[reg32+varA] WHERE varA=0xC
ADDNEWASSEMBLE mov [reg32+varA], 0x10000
ADDNEWASSEMBLE mov [reg32+varA+4], 0x10000

На всех указанных адресах при условии WHERE будет создана инъекция ADDNEWASSEMBLE, которая если потребуется будет создана в новом блоке памяти с восстановлением оригинальных инструкций. Это новая фишка похожа чем-то на SQL запросы и негде не реализована. И могла быть бичом в Вашей программе, если её хорошо продумать.

Так же с помощью аналогичных SQL запросов аналогично можно извлекать структуры данных из памяти, фильтровать, соединять и делать какие-то действия.

Ссылка на комментарий
Поделиться на другие сайты

MasterGH, Да скрипты планируются в будующих версиях, только в каком виде пока не решил...

На всех указанных адресах при условии WHERE будет создана инъекция ADDNEWASSEMBLE

Фишка интересная обязательно учту.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Вышла новая версия 1.4

gg_dissasm.png

gg_script.png

Список изменений:

Версия 1.4.0.0 - 18.11.2011

  • Добавлена поддержка и поиск многоуровневых указателей, то есть ("Указатель на указатель").
  • В отладчик добавлена возможность трассировки и установки своих точек прерывания, так-же добавлено окно стека и редактор памяти.
  • Добавлен скриптовый язык, с синтаксисом Object Pascal. Пример использования можно посмотреть в папке ("Demo\Script.gst").
  • Добавлен встроенный формульный калькулятор. Теперь в поле поиска значения, можно вводить математическую формулу, поддерживаются все математические операции что и в скриптах, например, (2+2*3) shl 2, и программа будет искать результат формулы, то есть 32. Удобно использовать, если вы знаете, как кодируется значение в игре. Например, 100 жизни может хранится как - 100 xor ("число").
  • Добавлен конвертер величин.
  • В ("редакторе памяти") улучшен поиск, так-же теперь можно копировать и вставлять массивы байт.
  • Заменена иконка программы.
  • Исправлен серьезный баг! не находился не один адрес при отсеивании.

Версия 1.3.0.0 - 18.08.2011

  • Добавлен новый тип поиска ("Строка").
  • Добавлен новый тип поиска ("Массив байт").

Версия 1.2.0.0 - 08.08.2011

  • Добавлены новые настройки "Использовать свои функции для доступа к памяти". При задействовании данных функций, GodGame использует свой сервис для работы с памятью, тем самым, обходя все возможные защиты памяти. Использовать в случае, если GodGame не может открыть процесс или прочитать память процесса. платформа (x86)

Скачать http://my-soft.ucoz.ru/prog/GodGame_v1.4.zip

Ссылка на комментарий
Поделиться на другие сайты

Основные плюсы:

1) Программа имеет приятный интерфейс. Кнопки, панельки, иконки. Здорово. Меню настроек хорошо. Впрочем это было и в прошлых версиях GodGame.

2) Поддержка GUI для трейнеров на первый взгляд лучше чем у Cheat Engine.

post-3-1321643307,17_thumb.png

И я сужу не по этом скриншоту, а по тому что можно писать в коде. Поддержка GUI или VCL более широкая и наверно все функции работают. У CE проблемы со свойствами цветов похоже для всех визуальных компонентов и присутствуют многие другие косяки с VCL.

3) Весьма удобна всплывающая справочная информация когда пишем скрипт. Чего у Cheat Egnine Lua_Engine не хватает так это именно этого.

Данный код примера мне понравился.



{-----------------------------------------------------------------------------------}
// Функция автозавершения кода срабатывает, когда вы вводите "." в окне редактора.
// Вы можете в любое время вызвать функцию автозавершения кода нажатием "Ctrl+Пробел" в окне редактора.
// Попробуйте также нажать "Ctrl+Shift+Пробел", когда курсор находится между скобками, где перечислены аргументы функции...
// Зажмите клавишу "Ctrl" и наведите курсор на переменную или функцию, затем нажмите левую кнопку мыши, вы перейдете на место объявления этой функции/переменной...
// Вы можете использовать шаблоны для кода нажав "Ctrl+J" в окне редактора.
// Для того что-бы отредактировать или добавить свои шаблоны, отредактируйте файл "AComplete.dci".
{-----------------------------------------------------------------------------------}
// ShowMessage ( Msg: Variant ) - Показывает диалог с сообщением
// MessageDlg ( Msg: string, DlgType: TMsgDlgType, Buttons: TMsgDlgButtons, HelpCtx: Longint ) - Показывает диалог с сообщением
// IsProcessRunning ( void ) - Проверяет не завершился ли процесс
// StopProcess ( void ) - Останавливает текущий процесс
// ResumeProcess ( void ) - Возобновляет текущий процесс
// TerminateProcess ( void ) - Завершает текущий процесс
// ReadProcessMemory ( Address: Pointer, Buffer: string, Size: DWORD ) - Чтение памяти процесса
// ReadInteger ( Address: Pointer ) - Чтение памяти процесса
// ReadFloat ( Address: Pointer ) - Чтение памяти процесса
// ReadDouble ( Address: Pointer ) - Чтение памяти процесса
// WriteProcessMemory ( Address: Pointer, Buffer: string, Size: DWORD ) - Запись в память процесса
// WriteInteger ( Address: Pointer, Value: Integer ) - Запись в память процесса
// WriteFloat ( Address: Pointer, Value: Float ) - Запись в память процесса
// WriteDouble ( Address: Pointer, Value: Double ) - Запись в память процесса
// GetModuleName ( Address: dword ) - Возвращает имя модуля
// GetModuleAddress ( Module: string ) - Возвращает адрес модуля
// GetProcAddress ( ProcName: string ) - Возвращает адресс функции
// CallRemoteFunction ( FuncName: string, Param: DWORD ) - Вызывает удаленную функцию
// GetGodGameDir ( void ) - Возвращает папку откуда запущенна программа
// Disassemble ( Address: Pointer ) - Дизасембелирует инструкцию и возвращает ее строковое представление
// GetInstructionSize ( Address: Pointer ) - Возвращает размер инструкции
// OpenProcessByName ( Name: string ) - Открывает процесс по его имени
// VirtualAlloc ( Size: DWORD ) - Выделяет память в открытом процессе и возвращает указатель на выделенный блок памяти
// InjectDll ( FileName: string ) - Внедряет DLL в текущий процесс
// IsKeyPressed ( Key: Integer ) - Проверяет нажата ли клавиша
// DoKeyPress ( Key: Integer ) - Эмулирует нажатие клавиши
// GetPixel ( X: Integer, Y: Integer ) - Возвращает цвет точки в формате RGB
// GetMousePos ( var X: Integer, var Y: Integer ) - Возвращает позицию мыши
// SetMousePos ( X: Integer, Y: Integer ) - Устанавливает позицию мыши
// Sleep ( milliseconds: DWORD ) - Задержка выполнения в мс
// CreateProcess ( FileName: string, CommandLine: string ) - Создает процесс
{-----------------------------------------------------------------------------------}

const
PROCESS_NAME = 'Trainer_Spy.exe'; // Имя процесса
op
var
Panel : TGRTitlePanel;
btnOpenProcess : TGRButton;
btnCloseProcess : TGRButton;
btnReadProcess : TGRButton;
btnWriteProcess : TGRButton;
btnCallRemoteFunc : TGRButton;
btnPlaySound : TGRButton;
btnStopSound : TGRButton;

//------------------------------------------------------------------------------

procedure CreateProcessClick(Sender: TObject);
begin
if CreateProcess(GetGodGameDir + PROCESS_NAME, '') then
btnOpenProcess.Enabled := True
else
MessageDlg('Не удалось создать процесс: "' + PROCESS_NAME + '".', mtError, mbOK, 0)
end;

//------------------------------------------------------------------------------

procedure OpenProcessClick(Sender: TObject);
begin
if OpenProcessByName(PROCESS_NAME) then
begin
btnCloseProcess.Enabled := True;
btnReadProcess.Enabled := True;
btnWriteProcess.Enabled := True;
btnCallRemoteFunc.Enabled := True;
end else
MessageDlg('Не удалось открыть процесс: "' + PROCESS_NAME + '".', mtError, mbOK, 0)
end;

//------------------------------------------------------------------------------

procedure CloseProcessClick(Sender: TObject);
begin
TerminateProcess;
end;

//------------------------------------------------------------------------------

procedure ReadProcessClick(Sender: TObject);
var
S: string;
D: Double;
F: Float;
I: Integer;
begin
S := '$00401000';

if InputQuery('Введите адрес', 'Адрес:', S) then
begin
D := ReadDouble(S);
F := ReadFloat(S);
I := ReadInteger(S);

ShowMessage(Format('ReadDouble: %f'#13#10 +
'ReadFloat: %f'#13#10 +
'ReadInteger: %d', [D,F,I]));
end;
end;

//------------------------------------------------------------------------------
// Запись в память через указатель --- абстрактный пример ----------------------
//------------------------------------------------------------------------------

procedure WriteProcessClick(Sender: TObject);
const
Ptr = $00401000; // Указатель
Offset = $0F4; // Смещение
var
Addr: Integer;
begin
Addr := ReadInteger(Ptr); // Читаем значение указателя
Inc(Addr, Offset); // Прибавляем смещение к указателю
WriteProcessMemory(Addr, HStr('FF 00 00 00'), 4); // Пишем в память
end;

//------------------------------------------------------------------------------
// Выполнить свой код в чужом процессе
//------------------------------------------------------------------------------

procedure CallRemoteFuncClick(Sender: TObject);
var
AllocMem : Pointer;
Code : string;
AddrMB : Pointer;
begin
// Выделяем память в открытом процессе
AllocMem := VirtualAlloc($1000);
AddrMB := GetProcAddress('MessageBoxA');

// Создаем ассембелерный код
// ----------------------------------
// 6A 00 | push 00
// 6A 00 | push 00
// 6A 00 | push 00
// 6A 00 | push 00
// FF D3 | call ebx // ebx - адрес MessageBoxA
// C3 | ret
// ----------------------------------

Code := HStr('6A 00 6A 00 6A 00 6A 00 FF D3 C3');
// Внедряем код в открытый процесс
WriteProcessMemory(AllocMem, Code, Length(Code));
// Запускаем наш код
CallRemoteThread(AllocMem, AddrMB);
end;

//------------------------------------------------------------------------------

procedure PlaySoundClick(Sender: TObject);
begin
XMPlayer_Play(GetGodGameDir + 'DEMO\Sound.xm');
end;

//------------------------------------------------------------------------------

procedure StopSoundClick(Sender: TObject);
begin
XMPlayer_Stop;
end;

//------------------------------------------------------------------------------
// Создаем главную форму
//------------------------------------------------------------------------------

function MainFormCreate: TForm;
begin
Result := TForm.Create(Application);
Result.SetBounds(0, 0, 393, 283);
Result.Position := poDesktopCenter;
Result.BorderStyle := bsDialog;
Result.Caption := 'Demo Script';
Result.Font.Name := 'Tahoma';

with TImage.Create(Result) do
begin
Parent := Result;
SetBounds(0, 0, 385, 55);
Picture.LoadFromFile(GetGodGameDir + 'demo\logo.bmp');
Show;
end;

Panel := TGRTitlePanel.Create(Result);
with Panel do
begin
Parent := Result;
SetBounds(4, 60, 380, 194);
Style := vsOfficeOlive;
Title.Font.Name := Result.Font.Name;
Title.Caption := 'Settings';
Title.Picture.LoadFromFile(GetGodGameDir + 'demo\icon.ico');
Show;
end;

with TLabel.Create(Panel) do
begin
Parent := Panel;
SetBounds(15, 47, 360, 21);
Caption := 'Process name:';
Show;
end;

with TLabel.Create(Panel) do
begin
Parent := Panel;
SetBounds(90, 47, 360, 21);
Font.Style := fsBold;
Font.Color := clGreen;
Caption := PROCESS_NAME;
Show;
end;

with TGRSectionLabel.Create(Result) do
begin
Parent := Panel;
SetBounds(10, 75, 360, 10);
Font.Name := Result.Font.Name;
Caption := 'Actions';
Show;
end;

with TGRButton.Create(Result) do
begin
Parent := Panel;
SetBounds(10, 100, 100, 24);
Style := vsOfficeOlive;
Caption := 'Create process';
OnClick := @CreateProcessClick;
Show;
end;

btnOpenProcess := TGRButton.Create(Result);
with btnOpenProcess do
begin
Parent := Panel;
SetBounds(10, 130, 100, 24);
Style := vsOfficeOlive;
Caption := 'Open process';
Enabled := False;
OnClick := @OpenProcessClick;
Show;
end;

btnCloseProcess := TGRButton.Create(Result);
with btnCloseProcess do
begin
Parent := Panel;
SetBounds(10, 160, 100, 24);
Style := vsOfficeOlive;
Caption := 'Close process';
Enabled := False;
OnClick := @CloseProcessClick;
Show;
end;

btnReadProcess := TGRButton.Create(Result);
with btnReadProcess do
begin
Parent := Panel;
SetBounds(120, 100, 100, 24);
Style := vsOfficeOlive;
Caption := 'Read memory';
Enabled := False;
OnClick := @ReadProcessClick;
Show;
end;

btnWriteProcess := TGRButton.Create(Result);
with btnWriteProcess do
begin
Parent := Panel;
SetBounds(120, 130, 100, 24);
Style := vsOfficeOlive;
Caption := 'Write Memory';
Enabled := False;
OnClick := @WriteProcessClick;
Show;
end;

btnCallRemoteFunc := TGRButton.Create(Result);
with btnCallRemoteFunc do
begin
Parent := Panel;
SetBounds(120, 160, 100, 24);
Style := vsOfficeOlive;
Caption := 'Call remote func';
Enabled := False;
OnClick := @CallRemoteFuncClick;
Show;
end;

with TGRButton.Create(Result) do
begin
Parent := Panel;
SetBounds(230, 100, 100, 24);
Style := vsOfficeOlive;
Caption := 'Play sound';
OnClick := @PlaySoundClick;
Show;
end;

with TGRButton.Create(Result) do
begin
Parent := Panel;
SetBounds(230, 130, 100, 24);
Style := vsOfficeOlive;
Caption := 'Stop sound';
OnClick := @StopSoundClick;
Show;
end;

Result.ShowModal; // Показываем модально, дальше скрипт не будет выполняться, пока не закроем форму
Result.Free; // Уничтожаем форму
end;

//------------------------------------------------------------------------------
// --- Вызывается при запуске скрипта --- //
//------------------------------------------------------------------------------
begin
MainFormCreate;
end.
program Test;

Понравился мне потому, что я тут вижу привычный Дельфи с классами. У Lua в Cheat Engine с классами большая проблема. Так же вижу обилие компонентов и рабочих функций. Надеюсь что я хвалю не зря и это всё работает :)

Минусы:

1) В как бы Инспекторе объектов очень не достаёт обработчиков событий.

2) Хорошо бы иметь возможность встраивать ассемблерный код или ассемблерный скрипт, а не байты как в этом примере:


var
AllocMem : Pointer;
Code : string;
AddrMB : Pointer;
begin
// Выделяем память в открытом процессе
AllocMem := VirtualAlloc($1000);
AddrMB := GetProcAddress('MessageBoxA');

// Создаем ассембелерный код
// ----------------------------------
// 6A 00 | push 00
// 6A 00 | push 00
// 6A 00 | push 00
// 6A 00 | push 00
// FF D3 | call ebx // ebx - адрес MessageBoxA
// C3 | ret
// ----------------------------------

Code := HStr('6A 00 6A 00 6A 00 6A 00 FF D3 C3');
// Внедряем код в открытый процесс
WriteProcessMemory(AllocMem, Code, Length(Code));
// Запускаем наш код
CallRemoteThread(AllocMem, AddrMB);
end;
procedure CallRemoteFuncClick(Sender: TObject);

3. Может быть я плохо смотрел, вроде нет функций для работы с отладчиком, сканером памяти... Ну в общем чего не достаёт, но это на первый взгляд. Пока с программой не поработал как следует. Может потом что ещё прокомментирую.

Программа наверно будет в будущем платная, как я понял из соглашения дистрибутива.

Общее впечателнеие: неплохо. Просто мне надо поюзать её как-нибудь.

Ссылка на комментарий
Поделиться на другие сайты

В как бы Инспекторе объектов очень не достаёт обработчиков событий

Планируется в будущих версиях, возможно даже будет реализованно: при изменении свойств в инспекторе, они будут сразу изменятся и в редакторе кода, а не как сейчас, только копирование в буфер.

Хорошо бы иметь возможность встраивать ассемблерный код или ассемблерный скрипт, а не байты как в этом примере:

Не вопрос, будет в следующей версии.

Может быть я плохо смотрел, вроде нет функций для работы с отладчиком, сканером памяти...

Нет зрение не подвело :-D действительно пока таких возможностей нет, решаю пока как лучше реализовать, в виде классов или просто функций ?

Программа наверно будет в будущем платная, как я понял из соглашения дистрибутива

Нет, хотя! если добавить фич, перевести на английский язык, написать развернутую справку то... Все-же нет, не будет, по крайней мере в обозримом будущем.

Просто мне надо поюзать её как-нибудь

Обязательно :)

Ссылка на комментарий
Поделиться на другие сайты

решаю пока как лучше реализовать, в виде классов или просто функций ?

Это зависит всё-таки от поставленных целей. Удобно, когда в объектах нужно хранить инкапсулированные данные и работать с ними через методы. Плюсы возможности наследования и полиморфизма. Но в случае отладки, можно обойтись и без классов. Я имею ввиду там, где пишем скрипты, а не в исходниках программы GodGame.

Например, у текущей ревизии CE есть работа как с отладчиком так и с дизассеблированием/ассемблированием. Довольно важная функция-событие:

function debugger_onBreakpoint():
When a breaking breakpoint hits (that includes single stepping) and the lua function debugger_onBreakpoint() is defined it will be called and the global variables EAX, EBX, .... will be filled in
Return 0 if you want the userinterface to be updated and anything else if not (e.g: You continued from the breakpoint in your script)

Она работает всегда, когда вызывается точка останова при этом откуда-то с потолка, т.е. с глобальными переменными регистров можно работать. Хотя они могли бы передаваться в аргумент функции через переменную данных о событиях. Но, кто знает, может это сделано в целях производительности и может быть правильно.

Кстати также пригодилась бы функция-событие:

function onOpenProcess(processid) : When this function is defined it will be called each time a process has been opened (note that a process can be opened multiple times in a row, e.g when attaching the debugger it might first open it and then attach the debugger which opens it again...)

Ещё некоторые функции:

disassemble(address): Disassembles the given address and returns a string in the format of "address - bytes - opcode : extra"
splitDisassembledString(disassembledstring): Returns 4 strings. The address, bytes, opcode and extra field


getInstructionSize(address): Returns the size of an instruction (basically it disassembles the instruction and returns the number of bytes for you)
getPreviousOpcode(address): Returns the address of the previous opcode (this is just an estimated guess)

По работе со сканером памяти можно самый простой сканер по поиску адресов по сигнатурам байткода вида "FFxxxxFFAA....". Сканирование в один этап без отсеивания. Эта функция может возвращать список из адресов.

Ссылка на комментарий
Поделиться на другие сайты

Ну что-же, потихоньку работа идет.

Теперь в скриптах можно так.


//------------------------------------------------------------------------------
// Запись в память через указатель --- абстрактный пример ----------------------
//------------------------------------------------------------------------------

procedure WriteProcessClick(Sender: TObject);
const
Ptr = $00401000; // Указатель
begin
// Теперь что-бы не писать так:
// Addr := ReadInteger(Ptr);
// Addr := ReadInteger(Addr + $F4);
// Addr := ReadInteger(Addr + $A0);
// WriteProcessMemory(Addr, HStr('FF 00 00 00'), 4);

// можно все заменить одной функцией
WritePtr(Ptr, [$F4, $A0], HStr('FF 00 00 00'), 4); // Пишем в память
end;

//------------------------------------------------------------------------------
// Выполнить свой код в чужом процессе
//------------------------------------------------------------------------------

procedure CallRemoteFuncClick(Sender: TObject);
const
Msg = 'GodGame'#0'CallRemoteFunc';
var
AllocMem : Pointer;
AllocStr : Pointer;
Code : string;
AddrMB : Pointer;
begin
// Выделяем память в открытом процессе
AllocMem := VirtualAlloc($1000);
AllocStr := VirtualAlloc($1000);
AddrMB := GetProcAddress('MessageBoxA');
// Внедряем строку в открытый процесс
WriteProcessMemory(AllocStr, Msg, Length(Msg));

// Создаем ассемблерный код
// --------------------------------------------------
Code := Assemble(['push 0',
'push ' + IntToHex(AllocStr, 8), // Адрес строки GodGame
'push ' + IntToHex(AllocStr + 8, 8), // Адрес строки CallRemoteFunc
'push 0',
'call ebx', // ebx - адрес MessageBoxA
'ret']);
// --------------------------------------------------

// Внедряем код в открытый процесс
WriteProcessMemory(AllocMem, Code, Length(Code));
// Запускаем наш код
CallRemoteThread(AllocMem, AddrMB);
end;

PS: Народ! не ужели никто кроме MasterGH программу не смотрел :( или нечего сказать ? Пишите, может какие замечания предложения есть, да и вообще общее впечатление о программе.

Ссылка на комментарий
Поделиться на другие сайты

Программа неплохая, но есть свои минусы нет более расширенных возможностей дизайнера форм, вот в делфи хороший дизайнер, не поддерживает ассемблерные скрипты, конечно хотелось, чтобы поддерживала.По графической оболочки трейнеров(GUI) гораздо лучше чем CE.Да и можно хоть как-то отредактировать исходный код трейнера.Вообщем-то мне программа понравилась, но если добавить, то что я написал вышел, будет очень хорошо.

Ссылка на комментарий
Поделиться на другие сайты

Программа понравилась

но

часто вылезает такое окно с ошибкой

post-1568-1321937022,97_thumb.jpg

В ошибках указано что у меня 2048 памяти, хотя на компе больше.

Ссылка на комментарий
Поделиться на другие сайты

нет более расширенных возможностей дизайнера форм

Ну все впереди :D работаю над этим.

не поддерживает ассемблерные скрипты, конечно хотелось, чтобы поддерживала

FLS, Посмотрим что можно сделать.

часто вылезает такое окно с ошибкой

ZOCKIR, Можно подробнее, после каких действий, ну там при поиске, при работе в отладчике или в скриптах ???

В ошибках указано что у меня 2048 памяти, хотя на компе больше

Магия однако :) будет время посмотрю в чем там трабла.

Ссылка на комментарий
Поделиться на другие сайты

gg_obj.png

  • Доработан инспектор объектов, теперь отображаются все свойства компонента, так-же стало возможным назначать собития.
  • Из списка меню компонентов, убранны лишние компоненты которые нельзя создавать для дизайна.
  • Добавлены новые функции для скриптов: (Assemble, ReadPtr, WritePtr, Scan, ScanToList). Пример использования можно посмотреть в папке ("Demo\Script.gst").
  • Исправленны небольшие недочеты.

Скачать http://my-soft.ucoz.ru/prog/GodGame_v1.4.1.zip

Ссылка на комментарий
Поделиться на другие сайты

  • 5 недель спустя...

Решил сегодня сгенирить трейнер в текущей версии GodGame v 1.5

Очень обрадовало автогенерация кода функцией "Скопировать код формы".

Размер трейнера около 150 кб с демо-картинкой, которая весит 76кб. Без картинки получается 74Кб. Я так понимаю в этот размер входит поддержка функций ниже.

Не уже ли ассемблер и и дизассемблер могут вместиться в 74кб-ный трейнер?

Функции

// Assemble ( Mnemonic: string; Address: Integer; var Bytes: string ) - Преобразует ассемблерную инструкцию в байт код

// Disassemble ( Address: Pointer ) - Дизасембелирует инструкцию и возвращает ее строковое представление

// GetInstructionSize ( Address: Pointer ) - Возвращает размер инструкции

Эти функции работают с SIMD инструкциями, т.е. с инструкциями типа movsd и т.п.?

Работают ли эти функции с 64-разрядными приложениями? Вроде я читал что не работают. Тогда будет ли это дело планироваться?

Будут ли события в инспекторе объектов для формы?

Если это дело сейчас не поддерживается и возможно планируется, то когда это можно будет поюзать?

Пока я вынужден юзать Cheat Engine из-за поддержки 64-разрядных систем.

И ещё чё-то я не понял где функции обработчиков событий для трёх кнопок в демо-скине. И в каких случаях нужен демо-скин, когда вроде как мы форму должны делать ещё до создания демо скина.

Ты бы что ли тутор сделал бы на своём сайте по созданию простого трейнера с демо-скином. А то я не знаю. Демо скрипт есть, демо скин есть, а как они связаны не понятно. Я ещё еле угадал как кнопки разместить на форме демоскина.  

Ссылка на комментарий
Поделиться на другие сайты

Andrey, дело в том что у тебя смешались две не зависимых между собой реализации.

Та реализация что с демо скином и тремя кнопками, не имеет в себе поддержки скриптов. Там можно только задать горячии клавиши и байт код, который запишется по определенному адресу при нажатии на эту клавишу.

А скрипты не имеют возможности генерации в исполняемый файл, их можно запускать только из программы, вся работа происходит под капотом GodGame.

Не уже ли ассемблер и и дизассемблер могут вместиться в 74кб-ный трейнер?

Конечно могут. Трейнеры пухнут в первую очередь из за графики, и реализации GUI. Вспомним Delphi при добавлении юнита Form размер увеличивается с 15кб до 450кб.

Эти функции работают с SIMD инструкциями, т.е. с инструкциями типа movsd и т.п.?

o_0 немного не понял о чем идет речь. Есть таблицы, мнемоник и опкодов, на них и завязына вся работа. Можно посмотреть реализацию в исходникак CheatEngine.

Работают ли эти функции с 64-разрядными приложениями? Вроде я читал что не работают.

Пока нет, но будут (я надеюсь) как я перейду на Delphi XE2.

Будут ли события в инспекторе объектов для формы?

Хз... надо посмотреть что можно сделать.

Ты бы что ли тутор сделал бы на своём сайте по созданию простого трейнера с демо-скином. А то я не знаю. Демо скрипт есть, демо скин есть, а как они связаны не понятно. Я ещё еле угадал как кнопки разместить на форме демоскина.

Дело в том, что я не умею хорошо объяснять (писать туторы), да и времени на все не хватает.

Вот думал keng поможет http://forum.gamehacklab.ru/topic/1002-%d0%b4%d0%b5%d0%bb%d0%b0%d0%b5%d0%bc-map-hack-%d0%b4%d0%bb%d1%8f-warcraft-iii/page__view__findpost__p__5656 ан нет, не понравилась ему моя программа :)

Ссылка на комментарий
Поделиться на другие сайты

Ну как, лично у меня программа свою основную функцию (поиск адресов) вообще по факту не выполняет, зато мне интерфейс очень понравился. laugh.gif

Что до функционала - вряд ли сейчас есть что-то, превосходящее по возможностям CE + Olly + IDA, так что допиливать можно очень долго.

Ссылка на комментарий
Поделиться на другие сайты

В этой теме ведётся обсуждение технических возможностей программы GodGame.

1) Описание функционала новых и старых версии

2) Обсуждение работы программы, что работает и что не работает

3) Предложите что-то исправить или что-то сделать

Здесь пишем ближе по существующему функционалу.

Автор программы GodGame не задёт вопросы в этой теме:

1) не задаёт вопрос типа "ищу того и того человека" для того и того :)

2) не задаёт вопроса типа "а что если я сделаю то и то, а как вам это понравится или не понравится" :)

Эти вопросы он может задать в этой теме, существование которой пока не подтверждено Xipho

Ссылка на комментарий
Поделиться на другие сайты

Посчупал прогу

Скажу честно и сразу в лоб

Мне понравился ток интерфейс и всё

Про функционал скажу ток что до CE и плюс олги

как до Пикина раком

Всё выше сказаное не в обиду просто что я думаю то и говарю

да и тутора я не увидел (тыкни носом если я слепенький не увидел его)

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.