RockHammer Опубликовано 13 января, 2015 Поделиться Опубликовано 13 января, 2015 Добрый день. Продолжаю реверсить смотрящую собаку. Очень тупые инструкции. Инъекции не любят, свои "обязанности" после внедрения чужого кода не исполняют.Однако средство против этого гемороя все же есть. Убийство. Убийство помогло при взломе функции крафтинга) И очень сильно)Так вот, как бы "переделать" aobscan таким образом, чтобы он работал на нупах, а не на инъекции? P.s. все время делал его на инъекцию. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 13 января, 2015 Поделиться Опубликовано 13 января, 2015 Привет!Не совсем понял, что ты имеешь ввиду. Можешь поподробнее написать? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 13 января, 2015 Поделиться Опубликовано 13 января, 2015 В 13.01.2015 в 14:31, keng сказал: Привет!Не совсем понял, что ты имеешь ввиду. Можешь поподробнее написать?Я думаю RockHamer имеет ввиду типа этого: Показать контент [ENABLE]aobscan(AdresInGame4, d9xxxxxxxxxxxx83xxxxxxe8xxxxxxxx83xxxx83xxxx75xx85xx7dxx8bxxd9xxxxxx8bxxxxxxxxxxxxd9xxxxxx8bxxffxx6axxxx8bxxe8xxxxxxxx85xx74xx8dxxxxxxxxxxebxx33xx85xxxxxx74xx8dxxxxxxxxxxebxx33xxd9xxx xxxxx83xxxxd9xxxxxxd9xxxxxxd9xxxxxxxxe8xxxxxxxx83xxxxxxxxc2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd9)alloc(newMem4, 64)label(returnHere4)registersymbol(AdresInGame4)newMem4://fstp dword ptr [edi+esi*4+00000324] // Просто нопим инструкцию и карма неjmp returnHere4 // падает, хотя и сообщение появляется. // Искать где появляются сообщенияAdresInGame4: // влом, да думаю и не нужно.jmp newMem4nopnopreturnHere4:[DISABLE]AdresInGame4:// Fallout3.exe+36E616fstp dword ptr [edi+esi*4+00000324]unregistersymbol(AdresInGame4)dealloc(newMem4) Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 13 января, 2015 Автор Поделиться Опубликовано 13 января, 2015 В 13.01.2015 в 14:31, keng сказал: Привет!Не совсем понял, что ты имеешь ввиду. Можешь поподробнее написать? Показать контент Вот это код. Он просто прописывает нупы в эту инструкцию. В скрипте нужно сделать поиск сигнатуры и замену ее нупами. В 13.01.2015 в 14:37, garik66 сказал: Я думаю RockHamer имеет ввиду типа этого: Показать контент Дааа, что-то вроде этого) Только, может быть, чуть попроще))[ENABLE]aobscan(AdresInGame4, d9xxxxxxxxxxxx83xxxxxxe8xxxxxxxx83xxxx83xxxx75xx85xx7dxx8bxxd9xxxxxx8bxxxxxxxxxxxxd9xxxxxx8bxxffxx6axxxx8bxxe8xxxxxxxx85xx74xx8dxxxxxxxxxxebxx33xx85xxxxxx74xx8dxxxxxxxxxxebxx33xxd9xxx xxxxx83xxxxd9xxxxxxd9xxxxxxd9xxxxxxxxe8xxxxxxxx83xxxxxxxxc2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd9)alloc(newMem4, 64)label(returnHere4)registersymbol(AdresInGame4)newMem4://fstp dword ptr [edi+esi*4+00000324] // Просто нопим инструкцию и карма неjmp returnHere4 // падает, хотя и сообщение появляется. // Искать где появляются сообщенияAdresInGame4: // влом, да думаю и не нужно.jmp newMem4nopnopreturnHere4:[DISABLE]AdresInGame4:// Fallout3.exe+36E616fstp dword ptr [edi+esi*4+00000324]unregistersymbol(AdresInGame4)dealloc(newMem4) [ENABLE]Disrupt_b64.EntryPoint+1389822:nopnopnop [DISABLE]Disrupt_b64.EntryPoint+1389822:mov [rdx+0C],eax Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 13 января, 2015 Поделиться Опубликовано 13 января, 2015 Для этого не нужно делать инъекцию кода. Инъекция кода нужна только тогда, когда длина опкодов заменяемой инструкции меньше, чем длина заменяющей. Т.е. когда у тебя есть 5 байт, а заменить их надо на 25. [ENABLE] registersymbol(addr) aobscan(addr, 12345) addr: NOP NOP NOP [DISABLE] addr: MOV EAX,EBX unregistersymbol(addr) 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 13 января, 2015 Поделиться Опубликовано 13 января, 2015 В 13.01.2015 в 15:58, keng сказал: Для этого не нужно делать инъекцию кода. Инъекция кода нужна только тогда, когда длина опкодов заменяемой инструкции меньше, чем длина заменяющей. Т.е. когда у тебя есть 5 байт, а заменить их надо на 25.[ENABLE]aobscan(addr, 12345) addr:NOPNOPNOP [DISABLE]addr:MOV EAX,EBXСпасибо, а то я тоже раньше не знал как правильно соединить аобскан и простые nop. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 13 января, 2015 Автор Поделиться Опубликовано 13 января, 2015 В 13.01.2015 в 15:58, keng сказал: Для этого не нужно делать инъекцию кода. Инъекция кода нужна только тогда, когда длина опкодов заменяемой инструкции меньше, чем длина заменяющей. Т.е. когда у тебя есть 5 байт, а заменить их надо на 25.[ENABLE]registersymbol(addr)aobscan(addr, 12345) addr:NOPNOPNOP [DISABLE]addr:MOV EAX,EBXunregistersymbol(addr) Ии... Что, это все? Весь код? А он точно будет работать?Извини, просто как-то не верится) Так легко, и в тоже время так эффективно) Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 13 января, 2015 Поделиться Опубликовано 13 января, 2015 Ну, тебе все понятно из него? В смысле, почему именно так написано и что происходит в обеих секциях (enable и disable)? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 13 января, 2015 Поделиться Опубликовано 13 января, 2015 В 13.01.2015 в 16:06, RockHamer сказал: Ии... Что, это все? Весь код? А он точно будет работать?Извини, просто как-то не верится) Так легко, и в тоже время так эффективно) Думаю скорее всего так: Показать контент Ты же не выделял память под registersymbol.[ENABLE]Label(addr)aobscan(addr, 12345) addr:NOPNOPNOP [DISABLE]addr:MOV EAX,EBX Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 13 января, 2015 Автор Поделиться Опубликовано 13 января, 2015 В 13.01.2015 в 16:08, keng сказал: Ну, тебе все понятно из него? В смысле, почему именно так написано и что происходит в обеих секциях (enable и disable)? Вроде да...[ENABLE]registersymbol(addr) //создаем метку addraobscan(addr, 12345) //тут функция aobscan. первый аргумент - название, второй - сама сигнатура, которую нужно найти addr: //описание метки addrNOPNOPNOP [DISABLE]addr: //возвращаем оригинальную инструкциюMOV EAX,EBXunregistersymbol(addr) //уничтожаем, сжигаем, истребляем, потрошим метку addr ))))Я правильно понял? Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 14 января, 2015 Поделиться Опубликовано 14 января, 2015 Да, все верно. Разве что стоит отметить, что СЕ ассоциирует метку addr с адресом памяти. Когда срабатывает функция aobscan - addr заменяется на найденный ей адрес в случае успеха. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 14 января, 2015 Автор Поделиться Опубликовано 14 января, 2015 В 14.01.2015 в 07:32, keng сказал: Да, все верно. Разве что стоит отметить, что СЕ ассоциирует метку addr с адресом памяти. Когда срабатывает функция aobscan - addr заменяется на найденный ей адрес в случае успеха. Да, да. Есть такое. Бывали даже баги, когда метка заменяла адрес, а назад не хотела уничтожатся. Неплохой скрипт, спасибо) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения