SergBrNord Опубликовано 16 ноября, 2019 Поделиться Опубликовано 16 ноября, 2019 Салют всем. После некоторого перерыва на квесты решил кое-что поломать. Возникла проблема с добавлением определённого количества очков, на которые можно совершать покупки. Вот код. Код вылетает, причём ещё до попытки записи значения, которое почему-то равно нулю, хотя в коде не так. Спойлер { Game : DP.exe Version: 1.0 Date : 2019-11-16 Author : SergBrNord } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(DPOINTS,DP.exe,DD 5F 04 5F 5E 8B) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: cmp [edi+90], #6 //Main filter jne code cmp [flag], 0 //Check flag jne code fstp st(0) mov [edi+04], value //Write DP value fld qword ptr [edi+04] mov byte ptr [flag], 1 //Set flag code: fstp qword ptr [edi+04] pop edi pop esi jmp return flag: db 00 value: dq (double)3000000 DPOINTS: jmp newmem return: registersymbol(DPOINTS) [DISABLE] //code from here till the end of the code will be used to disable the cheat DPOINTS: db DD 5F 04 5F 5E unregistersymbol(DPOINTS) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "DP.exe"+A1AE17 "DP.exe"+A1AE04: 89 77 04 - mov [edi+04],esi "DP.exe"+A1AE07: FF 46 08 - inc [esi+08] "DP.exe"+A1AE0A: 5B - pop ebx "DP.exe"+A1AE0B: 5F - pop edi "DP.exe"+A1AE0C: 5E - pop esi "DP.exe"+A1AE0D: 8B E5 - mov esp,ebp "DP.exe"+A1AE0F: 5D - pop ebp "DP.exe"+A1AE10: C2 04 00 - ret 0004 "DP.exe"+A1AE13: DD 46 04 - fld qword ptr [esi+04] "DP.exe"+A1AE16: 5B - pop ebx // ---------- INJECTING HERE ---------- "DP.exe"+A1AE17: DD 5F 04 - fstp qword ptr [edi+04] "DP.exe"+A1AE1A: 5F - pop edi "DP.exe"+A1AE1B: 5E - pop esi // ---------- DONE INJECTING ---------- "DP.exe"+A1AE1C: 8B E5 - mov esp,ebp "DP.exe"+A1AE1E: 5D - pop ebp "DP.exe"+A1AE1F: C2 04 00 - ret 0004 "DP.exe"+A1AE22: 8B 56 04 - mov edx,[esi+04] "DP.exe"+A1AE25: 5B - pop ebx "DP.exe"+A1AE26: 89 57 04 - mov [edi+04],edx "DP.exe"+A1AE29: 5F - pop edi "DP.exe"+A1AE2A: 5E - pop esi "DP.exe"+A1AE2B: 8B E5 - mov esp,ebp "DP.exe"+A1AE2D: 5D - pop ebp } А вот как это дело выглядит в отладчике. Спойлер P.S. Не понимаю, почему в моменте проверки флага отладчик секции комментариев пишет, что флаг уже вроде как равен 1, хотя это не так. P.P.S. Пошёл спать, благодарен за помощь ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 16 ноября, 2019 Поделиться Опубликовано 16 ноября, 2019 1 час назад, SergBrNord сказал: Не понимаю Попробуй так: Спойлер { Game : DP.exe Version: 1.0 Date : 2019-11-16 Author : SergBrNord Correction: Garik66 } [ENABLE] aobscanmodule(DPOINTS,DP.exe,DD 5F 04 5F 5E 8B) // should be unique alloc(newmem,$1000) label(code) label(return) label(flag) label(value) registersymbol(DPOINTS) newmem: cmp [edi+90], #6 //Main filter jne code cmp [flag],0 //Check flag jne code fstp qword ptr [esi+04] fld qword ptr [value] //Write DP value mov [flag],1 //Set flag code: fstp qword ptr [edi+04] pop edi pop esi jmp return flag: dd 0 value: dq (double)3000000 DPOINTS: jmp newmem return: [DISABLE] DPOINTS: db DD 5F 04 5F 5E unregistersymbol(DPOINTS) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "DP.exe"+A1AE17 "DP.exe"+A1AE04: 89 77 04 - mov [edi+04],esi "DP.exe"+A1AE07: FF 46 08 - inc [esi+08] "DP.exe"+A1AE0A: 5B - pop ebx "DP.exe"+A1AE0B: 5F - pop edi "DP.exe"+A1AE0C: 5E - pop esi "DP.exe"+A1AE0D: 8B E5 - mov esp,ebp "DP.exe"+A1AE0F: 5D - pop ebp "DP.exe"+A1AE10: C2 04 00 - ret 0004 "DP.exe"+A1AE13: DD 46 04 - fld qword ptr [esi+04] "DP.exe"+A1AE16: 5B - pop ebx // ---------- INJECTING HERE ---------- "DP.exe"+A1AE17: DD 5F 04 - fstp qword ptr [edi+04] "DP.exe"+A1AE1A: 5F - pop edi "DP.exe"+A1AE1B: 5E - pop esi // ---------- DONE INJECTING ---------- "DP.exe"+A1AE1C: 8B E5 - mov esp,ebp "DP.exe"+A1AE1E: 5D - pop ebp "DP.exe"+A1AE1F: C2 04 00 - ret 0004 "DP.exe"+A1AE22: 8B 56 04 - mov edx,[esi+04] "DP.exe"+A1AE25: 5B - pop ebx "DP.exe"+A1AE26: 89 57 04 - mov [edi+04],edx "DP.exe"+A1AE29: 5F - pop edi "DP.exe"+A1AE2A: 5E - pop esi "DP.exe"+A1AE2B: 8B E5 - mov esp,ebp "DP.exe"+A1AE2D: 5D - pop ebp } Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 16 ноября, 2019 Поделиться Опубликовано 16 ноября, 2019 (изменено) 15 часов назад, SergBrNord сказал: Не понимаю, почему в моменте проверки флага отладчик секции комментариев пишет, что флаг уже вроде как равен 1 Потому что он у тебя не 1 байт, а захватывает кусочек твоего double, надо писать cmp byte ptr [],* если хочешь проверятть байт Попробуй вот такой скрипт: Спойлер { Game : DP.exe Version: 1.0 Date : 2019-11-16 Author : SergBrNord } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(DPOINTS,DP.exe,DD 5F 04 5F 5E 8B) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: cmp [edi+90], #6 //Main filter jne code cmp byte ptr [flag], 0 //Check flag jne code mov byte ptr [flag], 1 //Set flag fstp st(0) fld dword ptr [value] code: fstp qword ptr [edi+04] pop edi pop esi jmp return flag: db 00 value: dd (float)3000000 DPOINTS: jmp newmem return: registersymbol(DPOINTS) [DISABLE] //code from here till the end of the code will be used to disable the cheat DPOINTS: db DD 5F 04 5F 5E unregistersymbol(DPOINTS) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "DP.exe"+A1AE17 "DP.exe"+A1AE04: 89 77 04 - mov [edi+04],esi "DP.exe"+A1AE07: FF 46 08 - inc [esi+08] "DP.exe"+A1AE0A: 5B - pop ebx "DP.exe"+A1AE0B: 5F - pop edi "DP.exe"+A1AE0C: 5E - pop esi "DP.exe"+A1AE0D: 8B E5 - mov esp,ebp "DP.exe"+A1AE0F: 5D - pop ebp "DP.exe"+A1AE10: C2 04 00 - ret 0004 "DP.exe"+A1AE13: DD 46 04 - fld qword ptr [esi+04] "DP.exe"+A1AE16: 5B - pop ebx // ---------- INJECTING HERE ---------- "DP.exe"+A1AE17: DD 5F 04 - fstp qword ptr [edi+04] "DP.exe"+A1AE1A: 5F - pop edi "DP.exe"+A1AE1B: 5E - pop esi // ---------- DONE INJECTING ---------- "DP.exe"+A1AE1C: 8B E5 - mov esp,ebp "DP.exe"+A1AE1E: 5D - pop ebp "DP.exe"+A1AE1F: C2 04 00 - ret 0004 "DP.exe"+A1AE22: 8B 56 04 - mov edx,[esi+04] "DP.exe"+A1AE25: 5B - pop ebx "DP.exe"+A1AE26: 89 57 04 - mov [edi+04],edx "DP.exe"+A1AE29: 5F - pop edi "DP.exe"+A1AE2A: 5E - pop esi "DP.exe"+A1AE2B: 8B E5 - mov esp,ebp "DP.exe"+A1AE2D: 5D - pop ebp } Изменено 17 ноября, 2019 пользователем imaginary Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 16 ноября, 2019 Поделиться Опубликовано 16 ноября, 2019 55 минут назад, imaginary сказал: Потому что он у тебя не 1 байт, а захватывает кусочек твоего double Не поэтому первый байт это flag, следующие 8 это value (double)3000000. Как видищь - там ноль. А потому, что скорее всего через фильтр проскакивает ещё что-то и флаг успевает замениться на 1. а количество очков уже не меняется. Ну ещё вариант, что так как скрипт у ТС не верен (но например верен фильтр), то происходит вылет, а флаг успевает смениться. Да и @imaginary ты же своим скриптом не записываешь нужного значения. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 16 ноября, 2019 Поделиться Опубликовано 16 ноября, 2019 1 час назад, SergBrNord сказал: Код вылетает Конечно вылетает, посмотри на эту строчку: mov [edi+04],value //Write DP value value - это адрес [value] - вот это DP value И ты же знаешь, что из памяти в память писать напрямую нельзя, либо через регистры, либо через стек. Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 16 ноября, 2019 Поделиться Опубликовано 16 ноября, 2019 (изменено) 22 минуты назад, Garik66 сказал: не записываешь нужного значения А, ты полностью прав, я перепутала edi и метку Изменено 16 ноября, 2019 пользователем imaginary Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 17 ноября, 2019 Поделиться Опубликовано 17 ноября, 2019 10 часов назад, SergBrNord сказал: Возникла проблема с добавлением определённого количества очков А очки разве там не по такой сигнатуре.... ? CC CC CC CC CC F3 0F * * * * * * * * F3 0F 11 81 08 05 00 00 + 15 байт.. не hex movss [ecx+0508h],xmm0 Это я к тому, что там же не какие фильтра то и не нужны... Я просто эту игру когда то смотрел.. таблицы уж нет.. А исход остался. Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 17 ноября, 2019 Автор Поделиться Опубликовано 17 ноября, 2019 (изменено) 4 часа назад, LIRW сказал: А очки разве там не по такой сигнатуре.... ? CC CC CC CC CC F3 0F * * * * * * * * F3 0F 11 81 08 05 00 00 + 15 байт.. не hex movss [ecx+0508h],xmm0 Это я к тому, что там же не какие фильтра то и не нужны... Я просто эту игру когда то смотрел.. таблицы уж нет.. А исход остался. Если не секрет, то как ты вышел на эту сигнатуру? Я искал очки банальным отсеиванием по значению, подбирая в комнате значки на 250 очков. 13 часов назад, Garik66 сказал: Конечно вылетает, посмотри на эту строчку: mov [edi+04],value //Write DP value value - это адрес [value] - вот это DP value И ты же знаешь, что из памяти в память писать напрямую нельзя, либо через регистры, либо через стек. Оно-то так, но при попытке сохранить скрипт начинается ругань именно на таким образом написанную строку. Что странно, как по мне. Изменено 17 ноября, 2019 пользователем SergBrNord Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 17 ноября, 2019 Автор Поделиться Опубликовано 17 ноября, 2019 (изменено) 14 часов назад, Garik66 сказал: Попробуй так: Показать контент { Game : DP.exe Version: 1.0 Date : 2019-11-16 Author : SergBrNord Correction: Garik66 } [ENABLE] aobscanmodule(DPOINTS,DP.exe,DD 5F 04 5F 5E 8B) // should be unique alloc(newmem,$1000) label(code) label(return) label(flag) label(value) registersymbol(DPOINTS) newmem: cmp [edi+90], #6 //Main filter jne code cmp [flag],0 //Check flag jne code fstp qword ptr [esi+04] fld qword ptr [value] //Write DP value mov [flag],1 //Set flag code: fstp qword ptr [edi+04] pop edi pop esi jmp return flag: dd 0 value: dq (double)3000000 DPOINTS: jmp newmem return: [DISABLE] DPOINTS: db DD 5F 04 5F 5E unregistersymbol(DPOINTS) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "DP.exe"+A1AE17 "DP.exe"+A1AE04: 89 77 04 - mov [edi+04],esi "DP.exe"+A1AE07: FF 46 08 - inc [esi+08] "DP.exe"+A1AE0A: 5B - pop ebx "DP.exe"+A1AE0B: 5F - pop edi "DP.exe"+A1AE0C: 5E - pop esi "DP.exe"+A1AE0D: 8B E5 - mov esp,ebp "DP.exe"+A1AE0F: 5D - pop ebp "DP.exe"+A1AE10: C2 04 00 - ret 0004 "DP.exe"+A1AE13: DD 46 04 - fld qword ptr [esi+04] "DP.exe"+A1AE16: 5B - pop ebx // ---------- INJECTING HERE ---------- "DP.exe"+A1AE17: DD 5F 04 - fstp qword ptr [edi+04] "DP.exe"+A1AE1A: 5F - pop edi "DP.exe"+A1AE1B: 5E - pop esi // ---------- DONE INJECTING ---------- "DP.exe"+A1AE1C: 8B E5 - mov esp,ebp "DP.exe"+A1AE1E: 5D - pop ebp "DP.exe"+A1AE1F: C2 04 00 - ret 0004 "DP.exe"+A1AE22: 8B 56 04 - mov edx,[esi+04] "DP.exe"+A1AE25: 5B - pop ebx "DP.exe"+A1AE26: 89 57 04 - mov [edi+04],edx "DP.exe"+A1AE29: 5F - pop edi "DP.exe"+A1AE2A: 5E - pop esi "DP.exe"+A1AE2B: 8B E5 - mov esp,ebp "DP.exe"+A1AE2D: 5D - pop ebp } Попробовал. Вылетает всё также непонятно где, до точки останова. Но это уже не особо важно, буду использовать вариант Лирва. Только сначала надо узнать секреты мастерства ? Изменено 17 ноября, 2019 пользователем SergBrNord Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 17 ноября, 2019 Поделиться Опубликовано 17 ноября, 2019 14 минут назад, SergBrNord сказал: вариант Лирва Вот этот адрес в игре на какую инструкцию выводит "DP.exe"+427F2A Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 17 ноября, 2019 Автор Поделиться Опубликовано 17 ноября, 2019 Только что, Garik66 сказал: Вот этот адрес в игре на какую инструкцию выводит "DP.exe"+427F2A DP.exe+427F2A - movss xmm0,[esp+08] Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 17 ноября, 2019 Поделиться Опубликовано 17 ноября, 2019 1 минуту назад, SergBrNord сказал: DP.exe+427F2A Хотя все ещё проще F3 0F 11 81 08 05 00 00 есть и сигна в скрипте. 19 минут назад, SergBrNord сказал: Только сначала надо узнать секреты мастерства ? Так что секреты мастерства Женьки просты. Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 17 ноября, 2019 Автор Поделиться Опубликовано 17 ноября, 2019 (изменено) 21 минуту назад, Garik66 сказал: Хотя все ещё проще F3 0F 11 81 08 05 00 00 есть и сигна в скрипте. Так что секреты мастерства Женьки просты. Насколько я понял, когда не нашлось целочисленное значение, он сразу начал поиск по всем значениям. У него нашлась строковая переменная, которая на самом деле является числом с точкой, но CE при поиске её так почему-то не определяет. Я же сразу перешёл к поиску чисел с точкой и пролетел. Изменено 17 ноября, 2019 пользователем SergBrNord Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 17 ноября, 2019 Поделиться Опубликовано 17 ноября, 2019 5 часов назад, SergBrNord сказал: Если не секрет, то как ты вышел на эту сигнатуру? Я на неё выходил как и всё.. отладчиком.. Адрес над просто правильный найти и всё... Так что @Garik66 у него просто даже адрес не правильный.. От того и делает в обще на другой инструкции.. которая с очками не чего общего не имеет. А тут всего то 2 отсева надо. Кстати можешь и вот так накатывать очки... За раз количество сам указывай.. Спойлер [ENABLE] aobscanmodule(_unlimited_score_,DP.exe,D8 44 24 0C D9 EE) alloc(_score_mem,$1000) label(_unlimited_score_back_) label(_super_score_) _score_mem: fadd dword ptr [_super_score_] fldz jmp _unlimited_score_back_ _super_score_: dd (float)10000 _unlimited_score_: jmp _score_mem db 90 _unlimited_score_back_: registersymbol(_unlimited_score_) registersymbol(_super_score_) [DISABLE] _unlimited_score_: db D8 44 24 0C D9 EE unregistersymbol(_unlimited_score_) unregistersymbol(_super_score_) dealloc(_score_mem) Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 18 ноября, 2019 Автор Поделиться Опубликовано 18 ноября, 2019 В 17.11.2019 в 17:44, LIRW сказал: Я на неё выходил как и всё.. отладчиком.. Адрес над просто правильный найти и всё... Так что @Garik66 у него просто даже адрес не правильный.. От того и делает в обще на другой инструкции.. которая с очками не чего общего не имеет. А тут всего то 2 отсева надо. У меня CE упорно определяет это значение до выноса в таблицу как строковый тип. Я искал как вещественный тип и в мои отсевы нужный адрес не попадал. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения