728x90
반응형
1. intro
2. code 및 분석
2.1. code
__int64 sub_40125B()
{
__int64 result; // rax
__int64 s[257]; // [rsp+0h] [rbp-810h] BYREF
unsigned __int8 v2; // [rsp+80Bh] [rbp-5h]
int v3; // [rsp+80Ch] [rbp-4h]
memset(s, 0, 0x100uLL);
v3 = 0;
qword_4040A0 = 0LL;
while ( 1 )
{
result = byte_404100[v3];
if ( !(_BYTE)result )
break;
v2 = byte_404100[v3];
switch ( v2 & 0xF0 )
{
case 32:
s[qword_4040A0++] = qword_4040C0[v2 & 0xF];
break;
case 48:
qword_4040C0[v2 & 0xF] = s[qword_4040A0--];
break;
case 64:
qword_4040C0[v2 & 0xF] = *(_QWORD *)&byte_404100[v3 + 1];
v3 += 8;
break;
case 80:
qword_4040C0[v2 & 0xF] += *(_QWORD *)&byte_404100[v3 + 1];
v3 += 8;
break;
case 96:
qword_4040C0[v2 & 0xF] -= *(_QWORD *)&byte_404100[v3 + 1];
v3 += 8;
break;
case 112:
qword_4040C0[v2 & 0xF] *= *(_QWORD *)&byte_404100[v3 + 1];
v3 += 8;
break;
case 128:
qword_4040C0[v2 & 0xF] /= *(_QWORD *)&byte_404100[v3 + 1];
v3 += 8;
break;
case 144:
write(fd, buf, n);
break;
default:
puts("Invaild instruction");
exit(-1);
}
++v3;
}
return result;
}
2.2. 분석
stripped 되어있기에 분석하기 조금 귀찮다.
주요 함수는 위와 같고, 입력한 값에 따라 특정 행동을 한다.
크게보면 32는 4040A00에 값을 더하며 4040C0에서 입력한 만큼 떨어진 위치의 값을 넣으며,
48은 반대의(?) 역할을 한다.
나머지는 4040C0에서 입력한 만큼 떨어진 위치의 값을 조작할 수 있다.
3. 취약점 확인 및 공격 준비
3.1. 취약점
이게 vm...? 이정도면 aar, aaw를 그냥 주는거나 마찬가지인 것 같은데...
3.2. 공격 준비
몇번 돌려보면 어떻게 작동하는지 이해할 수 있다.
많은 메뉴를 만들어놨지만, 2개 메뉴로 조질 수 있음...
728x90
반응형
'Wargame > H4C' 카테고리의 다른 글
System Hacking - Unprintable (0) | 2023.07.01 |
---|---|
System Hacking - syscall (0) | 2023.07.01 |
System Hacking - Notepad (0) | 2023.07.01 |
System Hacking - format_pistol (0) | 2023.07.01 |
System Hacking - apple pie (0) | 2023.07.01 |