부동아리 POSIX 면접에서 출제된 리버싱 문제 풀이들입니다. hard.exe hard.exe는 제가 출제한 문제입니다. 먼저 바이너리를 보니 아무리봐도 배열처럼 생긴 값들이 있군요.일단 'y'버튼을 이용해서 배열로 만들어줍시다. 그리고 이제 아래 루틴을 분석해보면 입력한 문자열의 각 인덱스에 2019를 더한 후에 0x191을 xor한 결과가 배열과 같으면 입력한 문자가 플래그라고 하네요.그렇다면 배열에서 각 인덱스에 0x191을 xor 해준 후에 2019를 빼주면 플래그를 구할 수 있습니다. 123arr=[2466, 2434, 2471, 2437, 2474, 2511, 2524, 2525, 2496, 2522, 2505, 2496, 2515, 2518, 2499, 2515, 2496, 2499, 250..
보호되어 있는 글입니다.
어제 풀었던 랜덤 값 문제와 비슷한 문제를 찾던 중 디미 ctf 2018 mm 문제를 발견했다.디미 ctf 당시에 못 풀고 저장해뒀던 문제라 꼭 다시 풀어보고 싶었다. srand에 seed값으로 0x17A3을 넣고 rand값과 입력값을 연산한 후 memcmp로 unk_201020의 배열들과 비교한다. 이때 이 값들은 0xa8,0x73 -> 0x73a8 로 배열에 들어가게 된다는 사실을 동적 디버깅중 알아냈다. 12345678910111213141516171819202122232425262728293031from ctypes import *import string libc = CDLL('/lib/x86_64-linux-gnu/libc.so.6') table=[0x73a8,0x39cc,0x4e0a,0x8d8..
컴퓨터를 정리하던 중 예전에 다운로드 받았던 리버싱 문제들을 발견했다. 폴더명은 디미고 본선 리버싱50이었는데 정확히 무슨 ctf였는지 모르겠다.디미ctf 2017 본선 문제였다고한다.그당시에는 풀지못해서 다운로드만 해놓고 손절했던것같은데 지금보니 쉬운 문제였다. srand에 seed값으로 0x3FD1CC7을 주기 때문에 고정된 값이 나온다.즉 그 값들을 테이블로 이용해서 브루트포스를 돌릴 수 있다.1234567891011121314151617181920import stringflag=""table=[0x4D,0x0CB,0x0C3,0x0BB,0x19,0x0A,0x1A,0x7F,0x50,0xF8,0x18,0x08,0x89,0x0C1,0x0A8,0x0CF,0x0BA,0x0BE,0x0EC,0x75,0x90,0..
' 코드엔진 basic 1. HDD를 CD-ROM으로 인식시키는 GetDriveTypeA의 리턴값이 무엇인지 아는게 문제1의 목적입니다. 먼저 디버거 없이 그냥 열어보니 이런 메세지박스들이 나오는군요. HDD를 CD-ROM으로 인식하지 않고 있습니다. Immunity debugger로 열어보니 이 파일은 이런 형태를 가지고 있습니다. 이 부분은 아까 보았던 이 메시지박스를 출력하는 부분이니 넘어갑니다. 원래 이랬던 레지스터 값이 이 부분을 지나고나서 이렇게 바뀌었습니다. 즉 EAX는 00000003 -> 00000001로 2가 감소됐고 ESI는 00401000 -> 00401003 으로 3이 증가했습니다 cmp는 2 레지스터의 값을 비교해서 값이 같으면 ZF(Zero Flag)를 1로 만듭니다. JE는 ..