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

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

Добрый день.

 

Продолжаю реверсить смотрящую собаку. 

Очень тупые инструкции. Инъекции не любят, свои "обязанности" после внедрения чужого кода не исполняют.

Однако средство против этого гемороя все же есть. Убийство.  :ph34r:

Убийство помогло при взломе функции крафтинга) И очень сильно)

Так вот, как бы "переделать" aobscan таким образом, чтобы он работал на нупах, а не на инъекции?

 

P.s. все время делал его на инъекцию.

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

Привет!

Не совсем понял, что ты имеешь ввиду. Можешь поподробнее написать?

Я думаю 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)  
Ссылка на комментарий
Поделиться на другие сайты

Привет!

Не совсем понял, что ты имеешь ввиду. Можешь поподробнее написать?

 

Вот это код. Он просто прописывает нупы в эту инструкцию. В скрипте нужно сделать поиск сигнатуры и замену ее нупами.

Я думаю 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
Ссылка на комментарий
Поделиться на другие сайты

Для этого не нужно делать инъекцию кода. Инъекция кода нужна только тогда, 

когда длина опкодов заменяемой инструкции меньше, чем длина заменяющей. Т.е.

 когда у тебя есть 5 байт, а заменить их надо на 25.


[ENABLE]
registersymbol(addr)
aobscan(addr, 12345)
 
addr:
NOP
NOP
NOP
 
[DISABLE]
addr:
MOV EAX,EBX
unregistersymbol(addr)

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

 

Для этого не нужно делать инъекцию кода. Инъекция кода нужна только тогда, 
когда длина опкодов заменяемой инструкции меньше, чем длина заменяющей. Т.е.
 когда у тебя есть 5 байт, а заменить их надо на 25.
[ENABLE]aobscan(addr, 12345) addr:NOPNOPNOP [DISABLE]addr:MOV EAX,EBX

Спасибо, а то я тоже раньше не знал как правильно соединить аобскан и простые nop.

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

 

Для этого не нужно делать инъекцию кода. Инъекция кода нужна только тогда, 
когда длина опкодов заменяемой инструкции меньше, чем длина заменяющей. Т.е.
 когда у тебя есть 5 байт, а заменить их надо на 25.
[ENABLE]registersymbol(addr)aobscan(addr, 12345) addr:NOPNOPNOP [DISABLE]addr:MOV EAX,EBXunregistersymbol(addr)

 

Ии... Что, это все? Весь код? А он точно будет работать?

Извини, просто как-то не верится) Так легко, и в тоже время так эффективно) 

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

Ии... Что, это все? Весь код? А он точно будет работать?

Извини, просто как-то не верится) Так легко, и в тоже время так эффективно) 

Думаю скорее всего так:

Ты же не выделял память под registersymbol.

[ENABLE]Label(addr)aobscan(addr, 12345) addr:NOPNOPNOP [DISABLE]addr:MOV EAX,EBX 
Ссылка на комментарий
Поделиться на другие сайты

 

Ну, тебе все понятно из него? В смысле, почему именно так написано и что 
происходит в обеих секциях (enable и disable)?

 

 

Вроде да...

[ENABLE]registersymbol(addr) //создаем метку addraobscan(addr, 12345) //тут функция aobscan. первый аргумент - название, второй - сама сигнатура, которую нужно найти addr: //описание метки addrNOPNOPNOP [DISABLE]addr: //возвращаем оригинальную инструкциюMOV EAX,EBXunregistersymbol(addr) //уничтожаем, сжигаем, истребляем, потрошим метку addr ))))

Я правильно понял?

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

Да, все верно. Разве что стоит отметить, что СЕ ассоциирует метку addr с

адресом памяти. Когда срабатывает функция aobscan - addr заменяется

на найденный ей адрес в случае успеха.

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

Да, все верно. Разве что стоит отметить, что СЕ ассоциирует метку addr с

адресом памяти. Когда срабатывает функция aobscan - addr заменяется

на найденный ей адрес в случае успеха.

 Да, да. Есть такое. Бывали даже баги, когда метка заменяла адрес, а назад не хотела уничтожатся. Неплохой скрипт, спасибо)

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

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

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

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