완료됨
도저히 감이 안 잡힙니다.

malloc(2 * (__int16)*v5); // trash?
if ( v2 ) // not initialized
s = v2;
else
s = *(char **)(v6 + 40);
v1 = malloc(4uLL);
if ( !v1 )
{
fwrite("Error: malloc()\n", 1uLL, 0x10uLL, stderr);
exit(1);
}
*v1 = **(_DWORD **)(v6 + 40);
sub_401AE8(s, v1, v3, (unsigned __int16)v4); // decode
puts(s);
exit(0);
decode후 호출하는 함수 내부를 보면 이렇게 initialized가 안 되어있는 변수가 존재합니다.
만약에 v2 = puts_got이고
decode되는 내용이 one_gadget주소라면 shell이 호출될 것입니다.
one_gadget은 프로그램 내에 cat flag호출하는 함수 있는데 그것으로 보면됩니다.
이런식으로 방향을 잡았으나 v2를 수정할 방법을 도저히 찾지 못했습니다.
도와주세요 :)

#pwnable
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
avatar
fow
대표 업적 없음
avatar
fow
대표 업적 없음

안녕하세요!

질문 주신 부분은 문제를 해결하기 위한 핵심 아이디어 중 하나인 관계로, Q&A 게시판을 통해서는 답변이 어려운 점 양해 부탁드립니다.
대신 해당 문제가 공식 문제인 관계로, 드림핵에서 제공하는 태그 기능을 사용해보시면 실마리를 얻으실 수도 있을 듯 합니다!

2025.06.11. 16:10