Karabatus Опубликовано 14 сентября, 2021 Поделиться Опубликовано 14 сентября, 2021 Добрый вечер! Я пытаюсь сделать свой первый скрипт по видео-урокам "08. Пишем первый скрипт". И у меня весь код брякается как в видео-уроке и что-то делает в выделенной памяти. Но в анализе структуры данных значение не меняется. Для теста я решил из структуры игрока (ebx) взять значение маны(int 188) по смещению FC и записать это значение в адрес хп(текущий int 3500) по смещению F4 и у меня не изменяется здоровье. Я понимаю, что его возможно перезаписывает что-то (но вроде не должно), так же я пробовал задействовать и другие смещения для записи (к которым инструкции не обращаются) И проверил эти другие адреса на запись, чтение после выполнения моего скрипта. Ничего не произошло. Этот скрипт я делаю для теста, чтобы научится писать, а по факту у меня есть задача считать адрес структуры игрока из ebx и закинуть куда-то в переменную, может быть в незадействованный адрес. И считывать потом из указанных мною адресов, структуры, которые мне интересны. Видел видео о поиске незадействованных адресов от Garik, в них он указывает скрипт, который ищет незадействованные адреса, но только со значением 0. После того как он выложил урок, он сказал, что скрипт не верно работает и поэтому я данный урок отсеял (возможно он мне подойдет, я не знаю) Очень извиняюсь за простыню слов, был бы рад с помощью моего текущего скрипта и подсказка почему может не работать. И буду рад если кто подскажет как выявить незадействованные адреса в памяти и записать в них адреса своих структур, которые я нашел в различных инструкциях (конкретно значения регистров) Спойлер код { Game : warspear.exe Version: 1.0 Date : 09-14-21 Author : [open aamaker.lua and pastle Author] This script does blah blah blah Make by aamaker Lua plagin } [ENABLE] aobscanmodule(INJECT,PPPP,8bxxxxxxxxxx85xx79xx33xxebxx8bxxxxxxxxxx3bxx0f4fxx3bxxxxxxxxxx75xx8bxxxxxxxxxx3bxxxxxxxxxx0f84xxxxxxxx8dxxxxxx8bxxe8xxxxxxxxa1xxxxxxxx8bxxxx8bxxxx0fb7xxxxxxxxxxxxc1xxxxf7xxxx0facxxxxc1xxxxc1xxxx89xxxx66xxxxxx66xxxx75xxc1xxxx66xxxxxx74xx8bxx8dxxxxxx8bxxffxxxx8bxxe8xxxxxxxxc6xxxxxx8bxxxxxxxxxx85xx79xx33xxebxx8bxxxxxxxxxx3bxx0f4fxx89xxxxxxxxxx8bxxxxxxxxxx83xxxx8dxxxx89xxxxxxxxxxe8xxxxxxxx83xxxx8dxxxxxx8dxxxxxxxxxxc7xxxxxxxxxxxxe8xxxxxxxx8bxxxx8dxxxxeb) alloc(newmem,$1000) label(code) label(return) registersymbol(INJECT) newmem: push dword ptr [ebx+000000FC] pop dword ptr [ebx+000000F4] code: mov ecx,[ebx+000000FC] jmp return INJECT: jmp newmem nop return: [DISABLE] INJECT: mov ecx,[ebx+000000FC] unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: PPPP warspear.exe+4355D9: EB 02 - jmp 008355DD warspear.exe+4355DB: B3 01 - mov bl,01 warspear.exe+4355DD: 88 5D F0 - mov [ebp-10],bl warspear.exe+4355E0: FF 75 F0 - push [ebp-10] warspear.exe+4355E3: 8D B7 54060000 - lea esi,[edi+00000654] warspear.exe+4355E9: 8B CE - mov ecx,esi warspear.exe+4355EB: E8 405EFDFF - call 0080B430 warspear.exe+4355F0: 84 DB - test bl,bl warspear.exe+4355F2: 0F84 E9000000 - je 008356E1 warspear.exe+4355F8: 8B 9F C4000000 - mov ebx,[edi+000000C4] // ---------- INJECTING HERE ---------- PPPP: 8B 8B FC000000 - mov ecx,[ebx+000000FC] // ---------- DONE INJECTING ---------- warspear.exe+435604: 85 C9 - test ecx,ecx warspear.exe+435606: 79 04 - jns 0083560C warspear.exe+435608: 33 C9 - xor ecx,ecx warspear.exe+43560A: EB 0B - jmp 00835617 warspear.exe+43560C: 8B 83 00010000 - mov eax,[ebx+00000100] warspear.exe+435612: 3B C8 - cmp ecx,eax warspear.exe+435614: 0F4F C8 - cmovg ecx,eax warspear.exe+435617: 3B 8F 684F0000 - cmp ecx,[edi+00004F68] warspear.exe+43561D: 75 12 - jne 00835631 warspear.exe+43561F: 8B 83 00010000 - mov eax,[ebx+00000100] } Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 14 сентября, 2021 Поделиться Опубликовано 14 сентября, 2021 Во 20 минут назад, Karabatus сказал: Добрый вечер! 1. Читаем правила (оформление поста - у тебя не заюзан тег кода - поэтому код плохо читается). 2. почему у тебя не работает - потому что ты взял инструкцию работающую с маной. Если ты хочешь изменить значение именно ХП. то и нужно брать инструкцию по хп. 3. лучше для записи юзать не стек, а обычной mov в твоем случае newmem: mov ecx,[ebx+000000F4] mov [ebx+000000FC],ecx code: mov ecx,[ebx+000000FC] Если ты сделаешь так к примеру в выложенном тобой скрипте, то у тебя мана станет как НР. Ссылка на комментарий Поделиться на другие сайты Поделиться
Karabatus Опубликовано 15 сентября, 2021 Автор Поделиться Опубликовано 15 сентября, 2021 Спасибо. Значения поменялись! А может кто подсказать, как мне считать регистр ebx (адрес структуры игрока) и занести в какой-нибудь незадействованный статичный адрес? Основная задача - иметь несколько адресов, к которым я могу обращаться и в которых будут адреса моих структур, даже после перезагрузки игры Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 15 сентября, 2021 Поделиться Опубликовано 15 сентября, 2021 3 часа назад, Karabatus сказал: как мне считать регистр ebx (адрес структуры игрока) и занести в какой-нибудь незадействованный статичный адрес? Полно уроков у нас на канале, смотри, во многих из них используются метки в качестве переменных, и в паре точно есть сохранение базового адреса структуры в такую метку/переменную Ссылка на комментарий Поделиться на другие сайты Поделиться
Karabatus Опубликовано 15 сентября, 2021 Автор Поделиться Опубликовано 15 сентября, 2021 (изменено) я имею в виду, можно ли записать адрес структуры в статичный адрес игры, который никак не используется. Т.е. сделать так, что по адресу 123 у меня всегда будет лежать значение - адрес структуры игрока, по адресу 456 у меня всегда будет значение - адрес на структуру мира (к примеру). Может быть можно вычислить, что адрес 123 в игре не используется и в него мы запишем любое значение какое захотим (в частности адрес структуры из инструкции) Переменная это хорошо, но я хотел бы считывать это значение из Cheat engine в C# или python, но пока только без проблем могу считать указанный адрес и его значение, а вот переменную cheat engine, думаю более проблематично будет считать (возможно я не прав) Изменено 15 сентября, 2021 пользователем Karabatus Ссылка на комментарий Поделиться на другие сайты Поделиться
youneuoy Опубликовано 15 сентября, 2021 Поделиться Опубликовано 15 сентября, 2021 3 часа назад, Karabatus сказал: Переменная это хорошо, но я хотел бы считывать это значение из Cheat engine в C# или python, но пока только без проблем могу считать указанный адрес и его значение, а вот переменную cheat engine, думаю более проблематично будет считать (возможно я не прав) а зачем тебе считывать переменные СЕ из C# или python? Делай всё что нужно сразу при помощи C# или python. А ещё удобнее(на мой взгляд) писать подобные штуки на c++(альтернатив мало, если речь идёт о чём-то крупном). Или же прямо в CE lua(lua ничуть не хуже, чем тот же python). Но кажется для начала тебе(возможно) следует немного больше попрактиковаться с CE. Если у тебя есть серьёзная причина поступить иначе то попробуй для начала просто записать адрес переменной в файл, самое быстрое решение. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 15 сентября, 2021 Поделиться Опубликовано 15 сентября, 2021 Все секции исполняемых файловы выравниваются по 4кб границе. Поищи "пустые" места на границе любой секции, и используй адрес. Разумеется, этот адрес ты просто так не вычислишь извне - тебе надо будет знать базовый адрес исполняемого модуля игры, и плюс смещение до найденного тобой неиспользуемого адреса. Если то, что я сейчас написал, непонятно, топай смотреть все уроки цикла "Взлом игр от А до Я" на нашем канале, и возвращайся только после просмотра всего цикла. Разумеется, если после просмотра у тебя еще останутся вопросы. Ссылка на комментарий Поделиться на другие сайты Поделиться
Karabatus Опубликовано 16 сентября, 2021 Автор Поделиться Опубликовано 16 сентября, 2021 (изменено) вот в том и проблема, что я это затеял из-за тех значений, базовый адрес которых я не могу найти, у меня таких адресов не более 10% из всех, но их знать мне тоже важно. Поэтому решил их брать из инструкций. Делаю это для того, потому что пишу бота для игры и считываю весь адрес с офсетами, а вот значение регистра из инструкций пока не сообразил как считывать. Решил что самым простым будет вписывание в файл, но этот скрипт почему-то не хочет работать, выдавая какую то ошибку синтаксиса. Ошибка:[string "local syntaxcheck,memrec=... ..."]:6: attempt to concatenate a nil value Спойлер { Game : warspear.exe Version: 1.0 Date : 09-15-21 Author : [open aamaker.lua and pastle Author] This script does blah blah blah Make by aamaker Lua plagin ;) } [ENABLE] {$LUA} -- запись в файл Garik66.txt function write_file() if readInteger('WriteID') == 1 then file=io.open('Garik66.txt','a+') file:write("newID - "..readInteger('IDItem66 '.."\n").."; ") file:close() writeInteger('WriteID', 0) end end -- таймер для проверки t=createTimer(nil) timer_setInterval(t, 100) timer_onTimer(t, write_file) timer_setEnabled(t, true) {$ASM} aobscanmodule(INJECT,warspear.exe+3C0088,8bxxxxxxxxxx3bxx0f4fxx8bxxxxxxxxxxxx81) alloc(newmem,$1000) label(WriteID) label(code) label(return) registersymbol(INJECT) registersymbol(WriteID) newmem: mov eax,[edi+000000F4] mov [edi+00000100],eax code: mov eax,[edi+00000100] jmp return WriteID: dd 1 IDItem66: dd 0 INJECT: jmp newmem nop return: [DISABLE] {$LUA} -- отключение таймера timer_setEnabled(t, false) {$ASM} INJECT: mov eax,[edi+00000100] unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: warspear.exe+3C0088 warspear.exe+3C0074: 83 C0 14 - add eax,14 warspear.exe+3C0077: 74 ED - je 007C0066 warspear.exe+3C0079: 80 78 34 00 - cmp byte ptr [eax+34],00 warspear.exe+3C007D: 74 E7 - je 007C0066 warspear.exe+3C007F: B0 01 - mov al,01 warspear.exe+3C0081: 5F - pop edi warspear.exe+3C0082: 5E - pop esi warspear.exe+3C0083: 59 - pop ecx warspear.exe+3C0084: 5D - pop ebp warspear.exe+3C0085: C2 0400 - ret 0004 // ---------- INJECTING HERE ---------- warspear.exe+3C0088: 8B 87 00010000 - mov eax,[edi+00000100] // ---------- DONE INJECTING ---------- warspear.exe+3C008E: 3B F0 - cmp esi,eax warspear.exe+3C0090: 0F4F F0 - cmovg esi,eax warspear.exe+3C0093: 8B 8F 9C030000 - mov ecx,[edi+0000039C] warspear.exe+3C0099: 52 - push edx warspear.exe+3C009A: 81 C1 98000000 - add ecx,00000098 warspear.exe+3C00A0: E8 5B720200 - call 007E7300 warspear.exe+3C00A5: 33 C9 - xor ecx,ecx warspear.exe+3C00A7: 3B F0 - cmp esi,eax warspear.exe+3C00A9: 5F - pop edi warspear.exe+3C00AA: 0F9D C0 - setge al } На счет делать все сразу в питоне. Я искал в гугле информацию, но там есть ясный ответ, что питон слаб для такого. В данный момент бот написан на питоне и он работает но с изображением. Я решил его переписать на работу с памятью, но переписывать с нуля его на С++ (который я пока не знаю) или C# это не тот вариант, что я бы хотел (согласен, это мои проблемы). Я подумал, что работать с регистром это не должно быть сложным, но столкнулся с проблемой с вписывания в файл, а так по сути это тот вариант, что меня бы устроил Изменено 16 сентября, 2021 пользователем Karabatus Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 16 сентября, 2021 Поделиться Опубликовано 16 сентября, 2021 1 час назад, Karabatus сказал: базовый адрес которых я не могу найти, у меня таких адресов не более 10% из всех, но их знать мне тоже важно. Поэтому решил их брать из инструкций. А я тебе говорил не про базовый адрес твоих значений. Я тебе говорил найти свободный адрес на границе секции. Относительно базового адреса исполняемого модуля смещение до найденного тобой адреса будет постоянным. Вот это и используй. Ссылка на комментарий Поделиться на другие сайты Поделиться
Karabatus Опубликовано 16 сентября, 2021 Автор Поделиться Опубликовано 16 сентября, 2021 (изменено) Вот пришел к такому, файл создаётся но значение регистра не вписывается. Спойлер { Game : warspear.exe Version: 1.0 Date : 09-14-21 Author : [open aamaker.lua and pastle Author] This script does blah blah blah Make by aamaker Lua plagin ;) } [ENABLE] aobscanmodule(INJECT,PPPP,8bxxxxxxxxxx85xx79xx33xxebxx8bxxxxxxxxxx3bxx0f4fxx3bxxxxxxxxxx75xx8bxxxxxxxxxx3bxxxxxxxxxx0f84xxxxxxxx8dxxxxxx8bxxe8xxxxxxxxa1xxxxxxxx8bxxxx8bxxxx0fb7xxxxxxxxxxxxc1xxxxf7xxxx0facxxxxc1xxxxc1xxxx89xxxx66xxxxxx66xxxx75xxc1xxxx66xxxxxx74xx8bxx8dxxxxxx8bxxffxxxx8bxxe8xxxxxxxxc6xxxxxx8bxxxxxxxxxx85xx79xx33xxebxx8bxxxxxxxxxx3bxx0f4fxx89xxxxxxxxxx8bxxxxxxxxxx83xxxx8dxxxx89xxxxxxxxxxe8xxxxxxxx83xxxx8dxxxxxx8dxxxxxxxxxxc7xxxxxxxxxxxxe8xxxxxxxx8bxxxx8dxxxxeb) alloc(newmem,$1000) label(code) label(register) label(return) registersymbol(INJECT) newmem: code: mov [register], ebx mov ecx,[ebx+000000FC] jmp return {$LUA} file=io.open('Garik66.txt','w') file:write(readInteger(register)) file:close() {$ASM} register: db 00 00 00 00 INJECT: jmp code nop return: [DISABLE] {$LUA} {$ASM} INJECT: mov ecx,[ebx+000000FC] unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: PPPP warspear.exe+4355D9: EB 02 - jmp 008355DD warspear.exe+4355DB: B3 01 - mov bl,01 warspear.exe+4355DD: 88 5D F0 - mov [ebp-10],bl warspear.exe+4355E0: FF 75 F0 - push [ebp-10] warspear.exe+4355E3: 8D B7 54060000 - lea esi,[edi+00000654] warspear.exe+4355E9: 8B CE - mov ecx,esi warspear.exe+4355EB: E8 405EFDFF - call 0080B430 warspear.exe+4355F0: 84 DB - test bl,bl warspear.exe+4355F2: 0F84 E9000000 - je 008356E1 warspear.exe+4355F8: 8B 9F C4000000 - mov ebx,[edi+000000C4] // ---------- INJECTING HERE ---------- PPPP: 8B 8B FC000000 - mov ecx,[ebx+000000FC] // ---------- DONE INJECTING ---------- warspear.exe+435604: 85 C9 - test ecx,ecx warspear.exe+435606: 79 04 - jns 0083560C warspear.exe+435608: 33 C9 - xor ecx,ecx warspear.exe+43560A: EB 0B - jmp 00835617 warspear.exe+43560C: 8B 83 00010000 - mov eax,[ebx+00000100] warspear.exe+435612: 3B C8 - cmp ecx,eax warspear.exe+435614: 0F4F C8 - cmovg ecx,eax warspear.exe+435617: 3B 8F 684F0000 - cmp ecx,[edi+00004F68] warspear.exe+43561D: 75 12 - jne 00835631 warspear.exe+43561F: 8B 83 00010000 - mov eax,[ebx+00000100] } если написать file.write("123") , то в файл без проблем впишется 123 Изменено 16 сентября, 2021 пользователем Karabatus Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 16 сентября, 2021 Поделиться Опубликовано 16 сентября, 2021 Зачем у тебя двоеточия? о_О Ссылка на комментарий Поделиться на другие сайты Поделиться
Karabatus Опубликовано 16 сентября, 2021 Автор Поделиться Опубликовано 16 сентября, 2021 5 минут назад, Xipho сказал: А я тебе говорил не про базовый адрес твоих значений. Я тебе говорил найти свободный адрес на границе секции. Относительно базового адреса исполняемого модуля смещение до найденного тобой адреса будет постоянным. Вот это и используй. если правильно понял: мой базовый адрес модуля warspear.exe - 400000 получается что смещение 14 это свободный адрес? или я не верно понял Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 16 сентября, 2021 Поделиться Опубликовано 16 сентября, 2021 Смотри, обрисую тебе общий алгоритм приблизительно: 1. Находишь инструкцию, работающую с нужным тебе значением 2. Находишь неиспользуемый адрес на границе секций модуля, в котором находится твоя инструкция (в том же СЕ есть функционал поиска кейвов) 3. Вычисляешь базовый адрес модуля, в котором находится твоя инструкция. 4. Вычисляешь смещение от базового адреса модуля, в котором находится твоя инструкция, до найденного тобой свободного адреса в этом же модуле 5. В кейве на инструкцию делаешь запись в найденный тобой адрес 6. В коде твоего собственного приложения, бот это или что, неважно, ты точно также находишь базовый адрес модуля, в котором была исходная инструкция, и добавляешь найденное ранее смещение. Таким образом ты будешь иметь "статичный" адрес нужного тебе значения. Есть вариант попроще, но он работает далеко не всегда - найти вручную цепочку указателей методом реверсивного поиска (урок есть у нас на канале). Ссылка на комментарий Поделиться на другие сайты Поделиться
Karabatus Опубликовано 16 сентября, 2021 Автор Поделиться Опубликовано 16 сентября, 2021 5 минут назад, Xipho сказал: Зачем у тебя двоеточия? о_О скопировал из скрипта Garik66. Если поставлю точку то скрипт не разрешает изменения. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 16 сентября, 2021 Поделиться Опубликовано 16 сентября, 2021 1 минуту назад, Karabatus сказал: получается что смещение 14 это свободный адрес? Может быть свободный, но может быть и нет, ты этого не можешь знать. А вот адреса в конце секций в пределах четырех килобайт почти всегда бывают свободны (особенность компиляторов и оптимизаций). 2 минуты назад, Karabatus сказал: Если поставлю точку то скрипт не разрешает изменения Странная конструкция. Впрочем, в СЕ Lua я не силён, может, так должно быть. Ссылка на комментарий Поделиться на другие сайты Поделиться
Karabatus Опубликовано 16 сентября, 2021 Автор Поделиться Опубликовано 16 сентября, 2021 4 минуты назад, Xipho сказал: Смотри, обрисую тебе общий алгоритм приблизительно: 1. Находишь инструкцию, работающую с нужным тебе значением 2. Находишь неиспользуемый адрес на границе секций модуля, в котором находится твоя инструкция (в том же СЕ есть функционал поиска кейвов) 3. Вычисляешь базовый адрес модуля, в котором находится твоя инструкция. 4. Вычисляешь смещение от базового адреса модуля, в котором находится твоя инструкция, до найденного тобой свободного адреса в этом же модуле 5. В кейве на инструкцию делаешь запись в найденный тобой адрес 6. В коде твоего собственного приложения, бот это или что, неважно, ты точно также находишь базовый адрес модуля, в котором была исходная инструкция, и добавляешь найденное ранее смещение. Таким образом ты будешь иметь "статичный" адрес нужного тебе значения. Есть вариант попроще, но он работает далеко не всегда - найти вручную цепочку указателей методом реверсивного поиска (урок есть у нас на канале). на счет варианта попроще, 90% указателей я нашел вручную, вот с 10% проблема, не получается найти. Поэтому и решил работать с инструкциями. Ссылка на комментарий Поделиться на другие сайты Поделиться
Karabatus Опубликовано 16 сентября, 2021 Автор Поделиться Опубликовано 16 сентября, 2021 (изменено) 31 минуту назад, Xipho сказал: Смотри, обрисую тебе общий алгоритм приблизительно: 1. Находишь инструкцию, работающую с нужным тебе значением 2. Находишь неиспользуемый адрес на границе секций модуля, в котором находится твоя инструкция (в том же СЕ есть функционал поиска кейвов) 3. Вычисляешь базовый адрес модуля, в котором находится твоя инструкция. 4. Вычисляешь смещение от базового адреса модуля, в котором находится твоя инструкция, до найденного тобой свободного адреса в этом же модуле 5. В кейве на инструкцию делаешь запись в найденный тобой адрес 6. В коде твоего собственного приложения, бот это или что, неважно, ты точно также находишь базовый адрес модуля, в котором была исходная инструкция, и добавляешь найденное ранее смещение. Таким образом ты будешь иметь "статичный" адрес нужного тебе значения. Есть вариант попроще, но он работает далеко не всегда - найти вручную цепочку указателей методом реверсивного поиска (урок есть у нас на канале). нашел кейвы в структуре игрока где лежит инструкция, с которой работал. Но вот не задача, именно с 3 пунктом, потому как реверсивным поиском мне не удавалось найти базовый адрес, со смещениями до моей структуры. А автоматический поиск не стабилен. Если бы я мог найти указатель на структуру, то мне и кейвы не нужны были бы ? Изменено 16 сентября, 2021 пользователем Karabatus Ссылка на комментарий Поделиться на другие сайты Поделиться
youneuoy Опубликовано 16 сентября, 2021 Поделиться Опубликовано 16 сентября, 2021 3 часа назад, Karabatus сказал: нашел кейвы в структуре игрока где лежит инструкция, с которой работал кажется ты сделал что-то не то. В ce есть специальный инструмент для поиска неиспользуемой памяти. Пересмотри обучающие ролики с канала гхл, там это точно было. Вот этот плейлист(вообще весь) обязателен к внимательному просмотру: 4 часа назад, Xipho сказал: Странная конструкция. Впрочем, в СЕ Lua я не силён, может, так должно быть. оба варианта верны. В данном случае вызывается метод конкретного объекта, это работает примерно как и в c++ соглашение thiscall. Если поставить двоеточие то в качестве первого параметра отправляется указатель на объект, если точку то необходимо самому передать указатель(file:write("что-то там ") vs file.write(file,"что-то там")) Ссылка на комментарий Поделиться на другие сайты Поделиться
Karabatus Опубликовано 16 сентября, 2021 Автор Поделиться Опубликовано 16 сентября, 2021 12 минут назад, youneuoy сказал: кажется ты сделал что-то не то. В ce есть специальный инструмент для поиска неиспользуемой памяти. Пересмотри обучающие ролики с канала гхл, там это точно было. Вот этот плейлист(вообще весь) обязателен к внимательному просмотру: не очень понял, а что там сложного в инструменте. Ввести начальный адрес поиска и конечный. Я ввожу начальный адрес структуры (по правильному бы знать еще и конечный) но по факту в конечный поиск не трогаю. Находит адреса в структуре, которые я могу перезаписывать - всё супер, могу даже ручками вписать. Но по факту, мне ведь чтобы найти смещение надо найти базовый адрес структуры, а его я как раз и хочу закинуть в какой-нибудь кейв) Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 16 сентября, 2021 Поделиться Опубликовано 16 сентября, 2021 10 минут назад, Karabatus сказал: чтобы найти смещение надо найти базовый адрес структуры, Я устал повторять. Пожалуйста, перечитай мои предыдущие сообщения. И постарайся еще понять/погуглить, чем отличается базовый адрес модуля от адреса структуры (его еще называют базовым адресом игрока) Ссылка на комментарий Поделиться на другие сайты Поделиться
youneuoy Опубликовано 16 сентября, 2021 Поделиться Опубликовано 16 сентября, 2021 (изменено) 23 минуты назад, Karabatus сказал: не очень понял, а что там сложного в инструменте. здесь речь идёт скорее об обучении основам реверса вообще, а не только о СЕ. Мне кажется, что если бы ты просмотрел это всё то вопросов многих у тебя бы не возникло(а ещё ответы на вопросы были бы прям совсем понятны). Ты ведь спрашиваешь здесь о банальных вещах не потому, что всё очень просто, верно? А вообще я уже успел забыть о чём разговор ведём? Изменено 16 сентября, 2021 пользователем youneuoy Ссылка на комментарий Поделиться на другие сайты Поделиться
Karabatus Опубликовано 16 сентября, 2021 Автор Поделиться Опубликовано 16 сентября, 2021 8 минут назад, Xipho сказал: Я устал повторять. Пожалуйста, перечитай мои предыдущие сообщения. И постарайся еще понять/погуглить, чем отличается базовый адрес модуля от адреса структуры (его еще называют базовым адресом игрока) базовый адрес модуля (warspear.exe) у меня всегда статичный и он равен 400000 если у меня кейв лежит в структуре игрока, то по отношению к модулю он ведь будет разный т.к. структура игрока меняется после перезагрузки, поправьте если я не прав Ссылка на комментарий Поделиться на другие сайты Поделиться
youneuoy Опубликовано 16 сентября, 2021 Поделиться Опубликовано 16 сентября, 2021 (изменено) 7 минут назад, Karabatus сказал: поправьте если я не прав ты не прав, было предложено использовать кейв возле инструкции, а не структуры и записать туда адрес структуры. Посмотрел твои старые посты, впечатление произвели не оч. хорошее. Цитата Задача выцепить из памяти игры нужные мне базовые адреса, а потом уже выдать эти адреса кодеру, с помощью которых он будет писать бота. Основной вопрос, почему не находит адрес на 3 уровне через поиск ручками( Изменено 16 сентября, 2021 пользователем youneuoy Ссылка на комментарий Поделиться на другие сайты Поделиться
Karabatus Опубликовано 16 сентября, 2021 Автор Поделиться Опубликовано 16 сентября, 2021 (изменено) 6 минут назад, youneuoy сказал: ты не прав, было предложено использовать кейв возле инструкции, а не структуры и записать туда адрес структуры. да, тут была проблема в том, что я не понял фразу "на границе секций модуля", а переспросить постеснялся. Но по факту я хотел попробовать взять адрес вне границ структур, но начал воевать с Lua 6 минут назад, youneuoy сказал: Посмотрел твои старые посты, впечатление произвели не оч. хорошее. да это вроде посты, когда я пытался с разбегу залезть в память, год или два назад. В тот момент я решил работать с изображением. Теперь вот пробую работать с памятью. 90% своих адресов я все же нашел вручную, на 2 своих проекта) Вот из-за немногих адресов решил поизучать ассемблер Изменено 16 сентября, 2021 пользователем Karabatus 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
youneuoy Опубликовано 16 сентября, 2021 Поделиться Опубликовано 16 сентября, 2021 Только что, Karabatus сказал: а переспросить постеснялся зато глупости писать не постеснялся? 1 минуту назад, Karabatus сказал: Но по факту я хотел попробовать взять адрес вне границ структур, но начал воевать с Lua ничегошеньки не понял. Как и писал выше - лучше сначала пересмотри все ролики, потом попробуй сделать что хотел самостоятельно, а после уже пости вопросы/решения и т.п. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения