-
Автор темы
- #1
В игре реализована трёхуровневая ROP проверка.
Imagebase 0x140000000.
При триггере любой из них, игра крашится с ошибкой division by zero.
Сама .text секция проверяется на целостность. Через ROP гаджеты игра также крашится из-за третьей проверки (?).
Надеюсь на любую помощь.
Imagebase 0x140000000.
Код:
if (ret < (uint8_t*)0x14001000 || ret > (uint8_t*)0x142400B75)
return 0;
Код:
int iscall = 0;
uint64_t reti = (uint64_t)ret;
if (mem[reti-5] == 0xe8) // call off4
iscall = 1;
if (mem[reti-6] == 0xff && (((mem[reti-5] & 0x38) - 16 ) & 0xf7) == 0) // call [reg + off4]
iscall = 1;
if (mem[reti-3] == 0xff && (((mem[reti-2] & 0x38) - 16 ) & 0xf7) == 0) // call [reg + off1]
iscall = 1;
if (mem[reti-2] == 0xff && (((mem[reti-1] & 0x38) - 16 ) & 0xf7) == 0) // call reg, call [reg]
iscall = 1;
if (! iscall)
return 0;
Код:
uint32_t *rettab = (void*)0x01400BBC84;
uint64_t ret_offset = (uint64_t)ret - 0x140000000;
uint32_t array_offset = rettab[ret_offset / 0x4000];
if (array_offset == 0)
return 0;
uint32_t *pgoodaddr = (uint32_t *)&rettab[array_offset/4];
while (*pgoodaddr > 0) {
if ( (*pgoodaddr - ret_offset) <= 64)
return 1;
pgoodaddr++;
}
При триггере любой из них, игра крашится с ошибкой division by zero.
Сама .text секция проверяется на целостность. Через ROP гаджеты игра также крашится из-за третьей проверки (?).
Надеюсь на любую помощь.