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

Показать MessageBox изнутри игры


MasterGH

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

Бывают случаи, когда нужно показать сообщение с какой-то информацией. Можно это сделать в простом окне сообщения с кнопкой Ок используя скрипты АА.

post-3-0-94248900-1425809078_thumb.png

 

Код выше можно вызвать изнутри игры либо новым потоком, либо правкой отладочного кода.
 
Потоком:

 
Если править отладочный код, то например можно затереть оригинальный call адрес
 

 
Меняем его на

 
Вообще правка кода в более сложном случае может вызывать ошибки, я привел самый простой пример - замены call адрес, на адрес мессаги. Это работает потому что за вызовом идет ret.
 
Старая самописная прога, на которой можно потренироваться на адресе test.exe+54690
test.rar

globalalloc(MyMessageBox,2048)label(message)label(caption)MyMessageBox:	push ebp	mov ebp,esp	push #0	push caption	push message	push #0	call MessageBoxA	pop ebp	ret 10message:	db 'blablablaa',0caption:	db 'XD',0
createthread(MyMessageBox)
test.exe+54690 - E8 9FFFFFFF           - call test.exe+54634test.exe+54695 - C3                    - ret 
test.exe+54690 - E8 7BC10900 - call MyMessageBoxtest.exe+54695 - C3 - ret
Ссылка на комментарий
Поделиться на другие сайты

Попробовал добавить инфу в игру, инфа появляется, но происходит вылет:

 

 

MasterGH

1. Что может приводить к вылету?

2. Как исправить?

3. Как добавить в инфу и звуковое сообщение?

[ENABLE]aobscan(infinite_move, f3xxxxxxxxf3xxxxxxxx8dxxxxe8xxxxxxxx8dxxxxxx8d)alloc(newMem, 64)label(returnHere)registersymbol(infinite_move)alloc(MyMessageBox,2048)label(message)label(caption)newMem:mov [eax+0C],(float)24movss xmm0,[eax+0C]call MyMessageBoxretjmp returnHereMyMessageBox:	push ebp	mov ebp,esp	push #0	push caption	push message	push #0	call MessageBoxA	pop ebp	ret 10message:	db 'Chit infinite movement activated',0caption:	db 'INFO',0infinite_move:jmp newMemreturnHere:[DISABLE]infinite_move: // 017649E1movss xmm0,[eax+0C]unregistersymbol(infinite_move)dealloc(newMem) 
Ссылка на комментарий
Поделиться на другие сайты

Активацию чита лучше не делать с мессагой, т.к. 

 

1) игра может быть в полном экране и толку от этой месаги ноль

2) при активации чита обычно делают звук или визуальное отображение в самой игре (рисование в игре)

//...call MyMessageBoxret // совсем не нужный ret, т.к. должен выполниться прыг на returnHerejmp returnHere//...

Вроде, должно работать, если рет убрать. Если не будет работать, то по шагам в отладке можешь пройти и увидеть ошибку.

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

newMem:mov [eax+0C],(float)24movss xmm0,[eax+0C]call MyMessageBox//retjmp returnHere

Если убираем этот рет, то окошко с инфой висит бесконечно (можно бесконечно жать на ОК), после отключения скрипта и нажатия ОК в окошке - вылет из игры.

Думаю скрипт не дописан, т.е. в этом коде:

MyMessageBox:	push ebp	mov ebp,esp	push #0	push caption	push message	push #0	call MessageBoxA	pop ebp	ret

мы никогда не попадём на ret, чтобы вернуться.

 

Хотя, подождите нужно сделать, чтобы "call MyMessageBox"  было разовым, так как инструкция на которой написан изначальный скрипт очень часто обращается к адресу. Завтра попробую и отпишусь о результатах.

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

Не удержался сделал:

Теперь всё работает.

[ENABLE]aobscan(infinite_move, f3xxxxxxxxf3xxxxxxxx8dxxxxe8xxxxxxxx8dxxxxxx8d)alloc(newMem, 64)label(returnHere)label(MyMessageBox)label(message)label(caption)label(odinraz)registersymbol(infinite_move)newMem:mov [eax+0C],(float)24movss xmm0,[eax+0C]call MyMessageBoxjmp returnHereMyMessageBox:    cmp byte ptr [odinraz],1    jne @f    mov byte ptr [odinraz],0	push ebp	mov ebp,esp	push #0	push caption	push message	push #0	call MessageBoxA	pop ebp    @@:	retodinraz:        db 1message:	db 'Cheat infinite movement activated',0caption:	db 'INFO',0infinite_move:jmp newMemreturnHere:[DISABLE]infinite_move: // 017649E1movss xmm0,[eax+0C]unregistersymbol(infinite_move)dealloc(newMem) 
Изменено пользователем garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Я посмотрел под отладкой внимательно, что меняется. Регистры ecx и edx менялись и стек лишний раз менялся на 0x10 из-за ret 10. Мой вариант рабочий

[ENABLE]alloc(newmem,2048)label(returnhere)label(MyMessageBox)label(message)label(caption)newmem:call MyMessageBoxinc [test.exe+5B5A4]jmp returnhereMyMessageBox:	push ebp	mov ebp,esp    push ecx    push edx	push #0	push caption	push message	push #0	call MessageBoxA	pop ebp    pop edx    pop ecx	retmessage:	db 'Chit infinite movement activated',0caption:	db 'INFO',0"test.exe"+5464A:jmp newmemnopreturnhere:[DISABLE]"test.exe"+5464A:inc [test.exe+5B5A4]//Alt: db FF 05 A4 B5 45 00dealloc(newmem)

И еще не "Chit", а "Cheat"

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

 

И еще не "Chit", а "Cheat"

Это Гугл-переводчик. Я по русски вбил "чит бесконечное движение активирован" и копирнул перевод, Видимо слова (по русски) чит - у гугла нету.

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

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

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

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