전체 글 82

[dreamhack] level1 Recover

바이너리를 실행해보니 "fopen() error"라는 문구만 출력된다. ida로 확인해봐야할 것 같다. 문제를 읽어보니, flag.png 파일에 flag가 들어있고 해당 파일을 암호화한 파일인 encrypted 파일을 복호화하여 flag.png로 복구시켜야 하는 문제 같다.  IDA 분석flag.png 열음실패하면 fopen() error 출력 encrypted 파일 열음실패하면 fopen() error 출력 flag.png를 성공적으로 읽었다면 ptr ^= v6[v5 % 4];ptr += 19;fwrite(&ptr, 1uLL, 1uLL, s);++v5;연산을 수행하여 flag.png를 암호화하고 encrypted 파일에 암호화함 문제 해결 방안v5 = 0;while ( fread(&ptr, 1uLL, ..

[dreamhack] level 1 fake 문제

sub_140B 함수의 반환값을 ptr에 저장만약 ptr의 반환값이 0이라면 1을 반환아래 함수들을 차례대로 실행(인자는 ptr) 해당 바이너리를 실행하면 아무 결과도 나오지 않는다. 따라서 위의 코드를 보면 flag를 생성하고 지우는 작업이 있다는 것을 유추할 수 있다. 그렇다면 마지막의 함수인 free에 bp를 걸고 안에 저장된 값을 확인해보자.해당 바이너리를 PIE가 적용되어있기 때문에 bp를 걸 때 free함수의 주소를 그대로 사용하면 안되고 vmmap을 활용하여 해당 바이너리의 시작주소에 free함수의 주소를 더해준 주소에 bp를 걸어줘야 한다. GDB를 활용한 분석 이제 vmmap으로 바이너리의 시작점을 찾아보자시작점 :0x555555554000 따라서0x555555554000 + free 함..