misha5343 Опубликовано 29 июля, 2017 Поделиться Опубликовано 29 июля, 2017 Всем привет, хочу взломать деньги на уровне в Turmoil, чтобы каждый раз не искать их значение, но проблема в том что тип данных у денег Double и у меня возникают проблемы с написанием скрипта. Я также нашёл на форуме тему с такой же проблемой, там я нашёл 3 способа от MasterGH как можно записать значение в Double, на 1-ом способе я и писал скрипт. При бряке на чтение на значение денег есть одна инструкция которая работает всегда, писал скрипт я именно на неё попутно посмотрел работает ли она ещё с чем, а работает она ещё с 8-ю адресами, посмотрел структуру этих адресов но значений которые бы никогда не менялись не нашёл. В игре начальный баланс на уровне всегда 2000$, поэтому решил делать фильтр сравнивая с 2000, получился вот такой скрипт, но игру при запуске скрипта крашит, что именно мне сделать/поправить чтобы игру не крашило? Скрытый текст { Game : TurmoilSteam.exe Version: Date : 2017-07-27 Author : misha This script does blah blah blah } [ENABLE] aobscanmodule(INJECT,TurmoilSteam.exe,DD 45 00 5F DD 1E 5E 5D B0 01 5B 59 C3 8B 55) // should be unique alloc(newmem,$1000) label(code) label(return) label(money) newmem: cmp [ebp+00],(double)2000 jne code fld qword ptr [money] fstp qword ptr [ebp+00] code: fld qword ptr [ebp+00] pop edi fstp qword ptr [esi] jmp return money: dq (double)10000 INJECT: jmp newmem nop return: registersymbol(INJECT) [DISABLE] INJECT: db DD 45 00 5F DD 1E unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "TurmoilSteam.exe"+12881C "TurmoilSteam.exe"+12880C: 39 78 08 - cmp [eax+08],edi "TurmoilSteam.exe"+12880F: 75 5E - jne TurmoilSteam.exe+12886F "TurmoilSteam.exe"+128811: 5F - pop edi "TurmoilSteam.exe"+128812: 89 70 08 - mov [eax+08],esi "TurmoilSteam.exe"+128815: 5E - pop esi "TurmoilSteam.exe"+128816: 5D - pop ebp "TurmoilSteam.exe"+128817: B0 01 - mov al,01 "TurmoilSteam.exe"+128819: 5B - pop ebx "TurmoilSteam.exe"+12881A: 59 - pop ecx "TurmoilSteam.exe"+12881B: C3 - ret // ---------- INJECTING HERE ---------- "TurmoilSteam.exe"+12881C: DD 45 00 - fld qword ptr [ebp+00] "TurmoilSteam.exe"+12881F: 5F - pop edi "TurmoilSteam.exe"+128820: DD 1E - fstp qword ptr [esi] // ---------- DONE INJECTING ---------- "TurmoilSteam.exe"+128822: 5E - pop esi "TurmoilSteam.exe"+128823: 5D - pop ebp "TurmoilSteam.exe"+128824: B0 01 - mov al,01 "TurmoilSteam.exe"+128826: 5B - pop ebx "TurmoilSteam.exe"+128827: 59 - pop ecx "TurmoilSteam.exe"+128828: C3 - ret "TurmoilSteam.exe"+128829: 8B 55 00 - mov edx,[ebp+00] "TurmoilSteam.exe"+12882C: 5F - pop edi "TurmoilSteam.exe"+12882D: 89 16 - mov [esi],edx "TurmoilSteam.exe"+12882F: 5E - pop esi } Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 29 июля, 2017 Поделиться Опубликовано 29 июля, 2017 В [ebp+00], может быть все что угодно, т.к это: Регистры ESP и EBP соответственно указатель стека (stack pointer) и указатель базы (base pointer). Эти регистры используются для управления вызовами функций и операциями со стеком. Когда функция вызвана, аргументы функции перемещаются (проталкиваются) в стек и следуют по адресу возврата. Регистр ESP указывает на самый верх стека, поэтому он будет указывать на адрес возврата. Регистр EBP указывает на самый низ стека вызовов. В некоторых случаях компилятор может использовать оптимизацию для удаления регистра EBP как указателя кадра, в этих случаях регистр EBP освобождается и может использоваться точно так же, как любой другой регистр общего назначения. Ищи где кладется значение в ebp+00, в том месте и пиши скрипт. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 июля, 2017 Поделиться Опубликовано 29 июля, 2017 Попробуй так, хотя не уверен 409F4000 - это вторая часть от double значения. Первая часть забита нулями. Для второй части смещение ebp+04. Регистр edi свободный, т.к. идет в оригинале pop edi. Скрытый текст [ENABLE] aobscanmodule(INJECT,TurmoilSteam.exe,DD 45 00 5F DD 1E 5E 5D B0 01 5B 59 C3 8B 55) alloc(newmem, $1000) alloc(newmem2, $1000) newmem2: money: dq (double)10000 newmem: cmp [ebp+04],409F4000 mov edi, ebp jne code mov edi, money code: fld qword ptr [edi] pop edi fstp qword ptr [esi] jmp return INJECT: jmp newmem nop return: registersymbol(INJECT) [DISABLE] INJECT: db DD 45 00 5F DD 1E unregistersymbol(INJECT) dealloc(newmem) Ссылка на комментарий Поделиться на другие сайты Поделиться
misha5343 Опубликовано 29 июля, 2017 Автор Поделиться Опубликовано 29 июля, 2017 32 минуты назад, MasterGH сказал: Попробуй так, хотя не уверен 409F4000 - это вторая часть от double значения. Первая часть забита нулями. Для второй части смещение ebp+04. Регистр edi свободный, т.к. идет в оригинале pop edi. Показать содержимое [ENABLE] aobscanmodule(INJECT,TurmoilSteam.exe,DD 45 00 5F DD 1E 5E 5D B0 01 5B 59 C3 8B 55) alloc(newmem, $1000) alloc(newmem2, $1000) newmem2: money: dq (double)10000 newmem: cmp [ebp+04],409F4000 mov edi, ebp jne code mov edi, money code: fld qword ptr [edi] pop edi fstp qword ptr [esi] jmp return INJECT: jmp newmem nop return: registersymbol(INJECT) [DISABLE] INJECT: db DD 45 00 5F DD 1E unregistersymbol(INJECT) dealloc(newmem) Работает, большое спасибо! В структуре ebp+00 первая часть забита нулями, если поставить тип на double то значение 2000, получается 409F4000 это те же 2000 только другим значением? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 июля, 2017 Поделиться Опубликовано 29 июля, 2017 Да. Я посмотрел в CE на dobule как на 4 байта и 4 байта. Первые 4 байта из нулей. Вторые 4 байта имеют значение 409F4000. Поэтому можно сравнить 4 байта вместо заморочек с double сравнением. Ссылка на комментарий Поделиться на другие сайты Поделиться
misha5343 Опубликовано 29 июля, 2017 Автор Поделиться Опубликовано 29 июля, 2017 13 минуты назад, MasterGH сказал: Да. Я посмотрел в CE на dobule как на 4 байта и 4 байта. Первые 4 байта из нулей. Вторые 4 байта имеют значение 409F4000. Поэтому можно сравнить 4 байта вместо заморочек с double сравнением. Понятно, ещё раз спасибо, почему я не могу добавить никому репутацию за помощь? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 июля, 2017 Поделиться Опубликовано 29 июля, 2017 49 минут назад, misha5343 сказал: Понятно, ещё раз спасибо, почему я не могу добавить никому репутацию за помощь? Я думаю, это могут делать форумчане из группы Разработчики Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения