Перейти к содержанию

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

Как начинающий в геймхакинг'е , хотел бы задать вопрос:
При помощи CE нахожу нужный мне offset допустим Health.
Данный оффсет могу без каких либо проблем прочитать/изменить при помощи
ReadProcessMemory
и
WriteProcessMemory
Но есть одно но:
При перезапуске процесса игры - происходит сдвиг адресов т.е Offset найденный ранее - уже не валидный.
Если не ошибаюсь - то для нахождения нужного оффсета должна присутствовать "сигнатура" , её я сделаю без каких-либо проблем.
Но есть один вопрос, возможно кто то вкурсе: 
Как происходит реализация поиска Offset'a по её Сигнатуре при помощи ASM для windows (допустим на примере masm x86) 
Искал в Англоязычном/Русскоязычном сегменте интернета , но - не нашёл.

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

47 минуты назад, ambulatur сказал:


Как происходит реализация поиска Offset'a по её Сигнатуре при помощи ASM для windows (допустим на примере masm x86) 
Искал в Англоязычном/Русскоязычном сегменте интернета , но - не нашёл.

Как то искал я что то по ASM и мне попалось.... 

Чпок

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

2 минуты назад, LIRW сказал:

Как то искал я что то по ASM и мне попалось.... 

Чпок

Спасибо, судя по коду
 

option4_pattern db 00Fh,0B6h,091h,0B0h,000h,000h,000h,085h,0D2h,075h,021h
  option4_mask db "xxxxxxxxxxx"

 

Для поиска оффсета используется маска и сигнатуры. 
Попробую разобрать код .

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

Хотя для чего эти строки - не совсем понятно.

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

 

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

56 минут назад, ambulatur сказал:

Хотя для чего эти строки - не совсем понятно.

Ну там и так видно зачем они - метки даже указаны своими названиями.  

А это по моему Кенга исход вот он полностью. 

Чпок

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

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" не совсем понимаю что это и зачем это нужно...

Изменено пользователем ambulatur
Ссылка на комментарий
Поделиться на другие сайты

 

С помощью CE сделал Pointer а так же нашёл Base address . И в итоге после перезапуска мне безошибочно показывает нужные Int значения.0760eca4ee2e4cf199118ba1a085a508.png

Теперь последний и единственный вопрос. Как мне теперь реализовать этот pointer в masm x86 -? Т.е как доставать нужный мне offset на который указывает pointer ?
Что бы я мог с ним работать при помощи функции(процедуры)
invoke WriteProcessMemory, pHandle, pointer, ADDR Ammo, sizeof Ammo, 0
(где pointer нужный мне адрес/офсет)

 

Изменено пользователем ambulatur
Ссылка на комментарий
Поделиться на другие сайты

забить на масм - заюзать фасм или насм +dll

 

17 час назад, ambulatur сказал:

Теперь последний и единственный вопрос. Как мне теперь реализовать этот pointer в masm x86 -? Т.е как доставать нужный мне offset на который указывает pointer ?

mov eax,[hw_dll] ;base

add eax,0x6552E8

mov eax,[eax+0x7C]

mov eax,[eax+0x5D4]

и так далее...

 

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

6 часов назад, gmz сказал:

забить на масм - заюзать фасм или насм +dll

 

mov eax,[hw_dll] ;base

add eax,0x6552E8

mov eax,[eax+0x7C]

mov eax,[eax+0x5D4]

и так далее...

 

Спасибо, теперь разобрался, к fasm`у и tasm`у душа не лежит.

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

11 час назад, gmz сказал:

забить на масм - заюзать фасм или насм +dll

 

mov eax,[hw_dll] ;base

add eax,0x6552E8

mov eax,[eax+0x7C]

mov eax,[eax+0x5D4]

и так далее...

 

Наверное последний вопрос... hw_dll - находим через  GetModuleHandle или есть способы проще?

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

в 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

 

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

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

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

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