MasterGH Опубликовано 8 марта, 2015 Поделиться Опубликовано 8 марта, 2015 Бывают случаи, когда нужно показать сообщение с какой-то информацией. Можно это сделать в простом окне сообщения с кнопкой Ок используя скрипты АА. Код выше можно вызвать изнутри игры либо новым потоком, либо правкой отладочного кода. Потоком: Если править отладочный код, то например можно затереть оригинальный call адрес Меняем его на Вообще правка кода в более сложном случае может вызывать ошибки, я привел самый простой пример - замены call адрес, на адрес мессаги. Это работает потому что за вызовом идет ret. Старая самописная прога, на которой можно потренироваться на адресе test.exe+54690test.rarglobalalloc(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',0createthread(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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 8 марта, 2015 Поделиться Опубликовано 8 марта, 2015 Попробовал добавить инфу в игру, инфа появляется, но происходит вылет: MasterGH1. Что может приводить к вылету?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) Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 8 марта, 2015 Автор Поделиться Опубликовано 8 марта, 2015 Активацию чита лучше не делать с мессагой, т.к. 1) игра может быть в полном экране и толку от этой месаги ноль2) при активации чита обычно делают звук или визуальное отображение в самой игре (рисование в игре)//...call MyMessageBoxret // совсем не нужный ret, т.к. должен выполниться прыг на returnHerejmp returnHere//...Вроде, должно работать, если рет убрать. Если не будет работать, то по шагам в отладке можешь пройти и увидеть ошибку. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 8 марта, 2015 Поделиться Опубликовано 8 марта, 2015 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" было разовым, так как инструкция на которой написан изначальный скрипт очень часто обращается к адресу. Завтра попробую и отпишусь о результатах. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 8 марта, 2015 Поделиться Опубликовано 8 марта, 2015 (изменено) Не удержался сделал:Теперь всё работает.[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) Изменено 8 марта, 2015 пользователем garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 8 марта, 2015 Автор Поделиться Опубликовано 8 марта, 2015 Я посмотрел под отладкой внимательно, что меняется. Регистры 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" Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 8 марта, 2015 Поделиться Опубликовано 8 марта, 2015 И еще не "Chit", а "Cheat"Это Гугл-переводчик. Я по русски вбил "чит бесконечное движение активирован" и копирнул перевод, Видимо слова (по русски) чит - у гугла нету. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 марта, 2015 Поделиться Опубликовано 10 марта, 2015 Для новичков снял видео - как резюме этой теме. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения