Перейти к содержанию
Авторизация  
investigator

Запись данных лежащих в регистре в файл

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

Добрый день.

Есть необходимость записать скрытую информацию (не выводимую на экран) в файл(.txt). Исследуемая игра не важна, я хочу понять суть. Правильно ли  думаю, что это можно сделать через AOB injection ?

На данный момент прочитал книгу по ассемблеру (МАSM x86-64), понимаю что происходит в диссасемблере, но не понимаю как использовать win api для записи нужных данных в файл. Ткните носом, куда смотреть :)

В сторону dll injection  не смотрел, так как не хватает знаний по плюсам.

 

 

Поделиться сообщением


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

1. Смотришь винапи, связанные с записью файлов. 

2. Смотришь правила вызова функций по соглашению stdcall в языке ассемблера

3. Пишешь код вызова нужных функций

4. PROFIT!!!

Поделиться сообщением


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

Еще есть другой вариант.
1. Ставишь хук на нужную точку или функцию
2. При срабатывании хука запоминаешь нужные тебе регистры
3. Выписываешь все в файл
4. Возвращаешь управление игровой функции

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
49 минут назад, roma912 сказал:

Еще есть другой вариант.

В смысле "другой"? Твой третий пункт - как раз 4 пункта моего "варианта". Вопрос топикстартера был в том, как использовать винапи, а ты ему проговариваешь его же вариант, по сути ) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 26.05.2021 в 22:53, investigator сказал:

На данный момент прочитал книгу по ассемблеру (МАSM x86-64), понимаю что происходит в диссасемблере, но не понимаю как использовать win api для записи нужных данных в файл.

Зачем винапи и ассемблер в этой задаче? Мне кажется лучше поставить бряк и написать код для логгирования на lua(если мы про cheat engine говорим) .

В 26.05.2021 в 22:53, investigator сказал:

Ткните носом, куда смотреть

например на функцию lua debugger_onBreakpoint. На форуме даже где-то статья или тема про это была и скорее всего не одна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 26.05.2021 в 22:53, investigator сказал:

Правильно ли  думаю, что это можно сделать через AOB injection ?

Посмотри, может что-то и подойдет 

 

Поделиться сообщением


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

Я в свое время делал что-то подобное. Мне нужно было сохранить часть выделенной памяти в СЕ в файл в момент выполнения определенной игровой инструкции. Делал я это используя WinApi. Игра была 64 битная, поэтому было достаточно просто.

Вот большая часть кода. Я не помню сейчас уже что там и к чему в точности. Не хочется вспоминать. Но из некоторых комментарием должно быть понятно.

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

Как написал @Xipho, нужно лишь прочитать про соглашения, про правила передачи аргументов.

Спойлер

//-------------------------- Calculate Size For File
xor rax,rax
xor rcx,rcx
mov rax,r13
mov rcx,18 // 4 byte * 6 addresses of matrix
mul rcx
mov [File_Play_Write_Size],rax
//-------------------------- Get User Documents Folder Path
xor r13,r13
lea r13,[File_Folder_Ptr]
xor rdx,rdx
//---------
mov [rsp+20],r13
xor r9,r9
xor r8,r8
mov rdx,5
xor rcx,rcx
call SHGetFolderPathW
//-------------------------- Add To Path Name String "DR5Tool_Data"
xor rcx,rcx
xor r15,r15
xor r14,r14
//---------
lea r15,[File_Folder_Ptr]
lea r14,[Folder_For_Saveing_Playground_Data]
call Read_Objs_For_File_Save_scr_1_Combine_Folder_Name
//-------------------------- Check If "DR5Tool_Data" Folder Already Exist
xor rax,rax
xor rcx,rcx
//---------
lea rcx,[File_Folder_Ptr]
call PathFileExistsW
//-------------------------- Create Foler "DR5Tool_Data" If Not Exist Yet
cmp rax,1
je @f
xor rcx,rcx
//---------
xor rdx,rdx
lea rcx,[File_Folder_Ptr]
call CreateDirectoryW
//-------------------------- Combine Folder Name And FileName
@@:
xor rcx,rcx
xor r15,r15
xor r14,r14
//---------
lea r15,[File_Folder_Ptr]
lea r14,[DIRT5.exe+1E194E4] // Filename (withour path and extension)
lea r13,[File_Extension]
call Read_Objs_For_File_Save_scr_1_Combine_Folder_Name_And_FileName
//-------------------------- Create File
xor rax,rax
xor rdx,rdx
mov [rsp+28],rdx
mov [rsp+20],rdx
xor rcx,rcx
//---------
mov qword ptr [rsp+30],0
mov [rsp+28],#128
mov [rsp+20],2
xor r9,r9
xor r8,r8
mov rdx,40000000
lea rcx,[File_Folder_Ptr]
call CreateFileW
mov [File_Fandle],rax
//-------------------------- Write To File
xor r8,r8
xor rdx,rdx
xor rcx,rcx
//---------
mov qword ptr [rsp+20],0
xor r9,r9
mov r8,[File_Play_Write_Size]
lea rdx,[Obj_Data_Ram_Storage_For_Save_Load_Temp]
mov rcx,[File_Fandle]
call WriteFile
//-------------------------- Close Handle
xor rcx,rcx
//---------
mov rcx,[File_Fandle]
call CloseHandle
//-------------------------- Clear Memory Of File_Folder_Ptr
xor rcx,rcx
xor r15,r15
lea r15,[File_Folder_Ptr]
call Read_Objs_For_File_Save_scr_1_File_Folder_Ptr_Clear_Mem

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 28.05.2021 в 10:21, youneuoy сказал:

Зачем винапи и ассемблер в этой задаче? Мне кажется лучше поставить бряк и написать код для логгирования на lua(если мы про cheat engine говорим) .

например на функцию lua debugger_onBreakpoint. На форуме даже где-то статья или тема про это была и скорее всего не одна.

Правильно ли я понимаю план достижения цели (получения game state из игры) :

1. Находим по одиночке каждый интересующий параметр в игре с помощью СЕ.

2. Ставим на каждый адрес найденного параметра бряк.

3. Находим интересующее нас место в исполняемом коде (из бряка) и инжектим туда lua script , который будет сохранять нужные параметры на диск.

4. Профит ?!

 

Если так, то пошел курить lua.

Изменено пользователем investigator

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
8 часов назад, investigator сказал:

инжектим туда lua script

Это ты сможешь сделать только с помощью СЕ. Если твоя цель - достать эти данные, то вполне себе вариант. А если тебе нужно оформить это в виде отдельной программы, то лучше это делать на ассемблере.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 10.06.2021 в 22:45, investigator сказал:

Правильно ли я понимаю план достижения цели (получения game state из игры) :

ага, примерно так и есть. Очень удобно на самом деле. Пример посмотри здесь, да и вообще рекомендую почитать немного СЕ вики.

Ещё можно вызывать lua функции из СЕ ассемблера, но с брейкпоинтами проще.

17 часов назад, Xipho сказал:

А если тебе нужно оформить это в виде отдельной программы, то лучше это делать на ассемблере.

если оформлять отдельной программой, то заморачиваться с ассемблером нужды нет🤔

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 часов назад, youneuoy сказал:

если оформлять отдельной программой, то заморачиваться с ассемблером нужды нет🤔

Я имел в виду вариант экстернал чита, который делает инжект кода. А если делать интернал - то да, можно не заморачиваться.

Поделиться сообщением


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр
Авторизация  

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

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

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