ambulatur Опубликовано 26 февраля, 2017 Поделиться Опубликовано 26 февраля, 2017 Как начинающий в геймхакинг'е , хотел бы задать вопрос:При помощи CE нахожу нужный мне offset допустим Health.Данный оффсет могу без каких либо проблем прочитать/изменить при помощиReadProcessMemoryиWriteProcessMemoryНо есть одно но:При перезапуске процесса игры - происходит сдвиг адресов т.е Offset найденный ранее - уже не валидный.Если не ошибаюсь - то для нахождения нужного оффсета должна присутствовать "сигнатура" , её я сделаю без каких-либо проблем.Но есть один вопрос, возможно кто то вкурсе: Как происходит реализация поиска Offset'a по её Сигнатуре при помощи ASM для windows (допустим на примере masm x86) Искал в Англоязычном/Русскоязычном сегменте интернета , но - не нашёл. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 26 февраля, 2017 Поделиться Опубликовано 26 февраля, 2017 47 минуты назад, ambulatur сказал: Как происходит реализация поиска Offset'a по её Сигнатуре при помощи ASM для windows (допустим на примере masm x86) Искал в Англоязычном/Русскоязычном сегменте интернета , но - не нашёл. Как то искал я что то по ASM и мне попалось.... Чпок Ссылка на комментарий Поделиться на другие сайты Поделиться
ambulatur Опубликовано 26 февраля, 2017 Автор Поделиться Опубликовано 26 февраля, 2017 2 минуты назад, LIRW сказал: Как то искал я что то по ASM и мне попалось.... Чпок Спасибо, судя по коду option4_pattern db 00Fh,0B6h,091h,0B0h,000h,000h,000h,085h,0D2h,075h,021h option4_mask db "xxxxxxxxxxx" Для поиска оффсета используется маска и сигнатуры. Попробую разобрать код . Ссылка на комментарий Поделиться на другие сайты Поделиться
ambulatur Опубликовано 26 февраля, 2017 Автор Поделиться Опубликовано 26 февраля, 2017 Хотя для чего эти строки - не совсем понятно. option3_original_bytecode db 089h,041h,030h,0EBh,00Ah option3_cave_bytecode db 0B8h,0BCh,002h,000h,000h,089h,041h,030h,0E9h,0F2h,0F8h,018h,000h option3_flag db 0 option3_buffer dd 0 option3_aF dd 0 option3_aT dd 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 26 февраля, 2017 Поделиться Опубликовано 26 февраля, 2017 56 минут назад, ambulatur сказал: Хотя для чего эти строки - не совсем понятно. Ну там и так видно зачем они - метки даже указаны своими названиями. А это по моему Кенга исход вот он полностью. Чпок Ссылка на комментарий Поделиться на другие сайты Поделиться
ambulatur Опубликовано 26 февраля, 2017 Автор Поделиться Опубликовано 26 февраля, 2017 (изменено) 2 часа назад, LIRW сказал: Ну там и так видно зачем они - метки даже указаны своими названиями. А это по моему Кенга исход вот он полностью. Чпок На 436-ой строке invoke WriteProcessMemory,pHandle,aT,bytecode,bsize,NULL происходит работа с памятью где по адресу aT записывается значение bytecode с размером bsize если не ошибаюсь (по крайне мере, у меня в коде как пример ".invoke WriteProcessMemory, pHandle, 4FE38C4h, ADDR HealthGT, sizeof HealthGT, 0" именно так и происходит) Меня интересует - как в aT оказался нужный нам offset , не совсем ясно в коде как там всё происходит. Да, может есть какой то мануло о "Dynamic caving" не совсем понимаю что это и зачем это нужно... Изменено 26 февраля, 2017 пользователем ambulatur Ссылка на комментарий Поделиться на другие сайты Поделиться
ambulatur Опубликовано 26 февраля, 2017 Автор Поделиться Опубликовано 26 февраля, 2017 (изменено) С помощью CE сделал Pointer а так же нашёл Base address . И в итоге после перезапуска мне безошибочно показывает нужные Int значения. Теперь последний и единственный вопрос. Как мне теперь реализовать этот pointer в masm x86 -? Т.е как доставать нужный мне offset на который указывает pointer ? Что бы я мог с ним работать при помощи функции(процедуры)invoke WriteProcessMemory, pHandle, pointer, ADDR Ammo, sizeof Ammo, 0 (где pointer нужный мне адрес/офсет) Изменено 26 февраля, 2017 пользователем ambulatur Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 27 февраля, 2017 Поделиться Опубликовано 27 февраля, 2017 забить на масм - заюзать фасм или насм +dll 17 час назад, ambulatur сказал: Теперь последний и единственный вопрос. Как мне теперь реализовать этот pointer в masm x86 -? Т.е как доставать нужный мне offset на который указывает pointer ? mov eax,[hw_dll] ;base add eax,0x6552E8 mov eax,[eax+0x7C] mov eax,[eax+0x5D4] и так далее... Ссылка на комментарий Поделиться на другие сайты Поделиться
ambulatur Опубликовано 27 февраля, 2017 Автор Поделиться Опубликовано 27 февраля, 2017 6 часов назад, gmz сказал: забить на масм - заюзать фасм или насм +dll mov eax,[hw_dll] ;base add eax,0x6552E8 mov eax,[eax+0x7C] mov eax,[eax+0x5D4] и так далее... Спасибо, теперь разобрался, к fasm`у и tasm`у душа не лежит. Ссылка на комментарий Поделиться на другие сайты Поделиться
ambulatur Опубликовано 27 февраля, 2017 Автор Поделиться Опубликовано 27 февраля, 2017 11 час назад, gmz сказал: забить на масм - заюзать фасм или насм +dll mov eax,[hw_dll] ;base add eax,0x6552E8 mov eax,[eax+0x7C] mov eax,[eax+0x5D4] и так далее... Наверное последний вопрос... hw_dll - находим через GetModuleHandle или есть способы проще? Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 28 февраля, 2017 Поделиться Опубликовано 28 февраля, 2017 в dll да. когда ехе над спец функцию.. например: GetModule: virtual at esp .Modules rd 512 .ModulesSize rd 1 .Buffer rw MAX_PATH .locals = $-$$ rd 3 .hProcess rd 1 .Name rd 1 end virtual push esi push edi sub esp,.locals lea esi,[.Modules] lea edi,[.ModulesSize] push edi push 512*4 push esi push [.hProcess+3*4] call [K32EnumProcessModules] test eax,eax jz .Fail add [edi],esi lea edi,[.Buffer] .Next: push MAX_PATH push edi push dword[esi] push [.hProcess+3*4] call [K32GetModuleBaseNameW] test eax,eax jz .Skip push [.Name] push edi call [_wcsicmp] add esp,2*4 test eax,eax jz .Found .Skip: add esi,4 cmp [.ModulesSize],esi jnz .Next xor eax,eax jmp .Fail .Found: mov eax,[esi] .Fail: add esp,.locals pop edi pop esi ret 2*4 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения