[HGAME 2023 week3]patchme
SMC:
int sub_188C()
{
_BYTE *v0; // rax
int v2; // [rsp+Ch] [rbp-1B4h] BYREF
int j; // [rsp+10h] [rbp-1B0h]
int fd; // [rsp+14h] [rbp-1ACh]
char *i; // [rsp+18h] [rbp-1A8h]
char buf[408]; // [rsp+20h] [rbp-1A0h] BYREF
unsigned __int64 v7; // [rsp+1B8h] [rbp-8h]
v7 = __readfsqword(0x28u);
fd = open("/proc/self/status", 0);
read(fd, buf, 0x190uLL);
for ( i = buf; *i != 84 || i[1] != 114 || i[2] != 97 || i[3] != 99 || i[4] != 101 || i[5] != 114; ++i )
;
i += 11;
__isoc99_sscanf(i, &unk_2008, &v2);
if ( v2 )
exit(0);
LODWORD(v0) = mprotect((void *)((unsigned __int64)&loc_14C6 & 0xFFFFFFFFFFFFF000LL), 0x3000uLL, 7);
for ( j = 0; j <= 960; ++j )
{
v0 = (char *)&loc_14C6 + j;
*v0 ^= 0x66u;
}
return (int)v0;
}
起始地址:0x14C6
异或:0x66
EXP:
import idc
addr = 0x14C6 #起始地址
for i in range(961):
idc.patch_byte(addr+i, idc.get_wide_byte(i+addr) ^ 0x66)