본문 바로가기

Write Up

HackIM 2016 Reversing - donfos 이번에는 500점 짜리 문제입니다. 500점 짜리인 만큼 난이도가 꽤 있었습니다. 역시 64비트 바이너리인데 IDA로 열자마자 입에서 욕이 나왔었습니다... 열어보면 IDA의 그래프 개형이 이렇게 생겼기 때문입니다. 처음에는 열고 나서 다시 닫았습니다. 생긴 것이 꼭 핀툴을 써서 해야 할 것처럼 생겨서 이 문제는 접어야 겠다 하고 닫았었는데 시간이 좀 지나고 다시 분석해보자 하고 열어서 좀 보니까 뭔가 될 것도 같아서 분석을 시작했습니다. 일단 헥스레이로 보면 엄청난 양의 반복문이 중첩으로 존재합니다. 프로그램을 난독화 시켜 놓은 것인지는 모르겠는데 v37을 기준으로 그 값에 어떠한 값이 들어 있냐에 따라 프로그램 흐름이 달라지는 방식입니다. 그래서 분석을 해 보면 먼저 이 부분에서 입력을 받는데 반복문.. 더보기
HackIM 2016 Reversing - Pesudorandom 이번에는 300점짜리 두 번째 문제입니다. 역시 64비트고 IDA로 먼저 뜯어보면 rand값으로 sleep을 하고 함수 내에서 막 연산한 값을 가지고 오고 난 뒤에 값을 입력받습니다. 입력받은 값을 다시 sub_400ea0함수에서 체크하고 md5해시를 구하며 막 반복문을 진행하다가 특정 값이 되면 빠져 나오고 해시를 비교한 뒤에 flag를 출력해 줍니다. 체크 함수를 보면 복잡해 보이지만 어차피 올바른 입력값은 하나 이므로 저 함수를 그대로 가져와서 브루트포싱을 해 주면 입력해야 하는 값을 구할 수 있습니다. 디버깅을 통해 sub_400ea0함수에 함께 넣어주는 값들만 찾아서 브루트포싱 해 주면 됩니다.이런 식으로 소스를 짜서 값들을 모두 구해 내면 됩니다. 앞의 몇몇 값을 구하다 보면 규칙성이 있는 것.. 더보기
HackIM 2016 Reversing - ZorroPub 100점짜리 맨 먼저 푼 문제입니다. 64비트 바이너리고, IDA로 뜯어서 보면 처음에 루프를 돌 카운트를 입력하고 루프를 돌면서 다시 값을 입력하는데 그 값들은 모두 seed와 xor하는데 쓰입니다. 그리고 그 seed는 srand로 rand값에 쓰이게 됩니다. 그리고 rand로 나온 값들의 md5해시를 구하여 비교하고, 맞다면 flag를 출력해줍니다. 따라서 파이썬으로 브루트포싱을 돌려주면 md5에 맞는 seed를 구할 수 있습니다. 위 소스를 파이썬으로 돌려주면 플래그를 얻을 수 있습니다. Key : nullcon{nu11c0n_s4yz_x0r1n6_1s_4m4z1ng} 더보기
[2016 CAT HolyShield] Reversing - Who Am I? 이번 CAT HolyShield에서 푼 리버싱 문제인데 가상화 문제였습니다. 풀 때 꽤 재미있었던 문제라서 좀 더 분석을 해 보고 이렇게 풀이를 올립니다. 먼저 실행 모습입니다. 파일은 exe파일 하나와 dll파일 하나가 주어집니다. exe를 먼저 IDA로 열어서 보면 이러한 부분이 존재하는데 분석하면 주어진 dll파일을 열어서 0x1E00영역에 입력한 값으로 덮어 씌웁니다. 헥스에디터로 원래 0x1E00부분을 보면 Nice_To_Meet_You~~!!라는 문자열이 존재하는데 이를 입력 값으로 덮어 씌웁니다. 그리고 로드한 dll에서 checkfunc함수의 주소를 가지고 와서 인자로 넘겨주고 호출합니다. 그럼 이제 dll을 보겠습니다. IDA로 까 보면이게 전부입니다. 처음에는 가상화 일 것이라고 생각을.. 더보기
정보보호올림피아드2015 본선 Q10 이번에는 10번 문제가 늘 전통적으로 내려오던 무한 게싱이 아닌 새로운 아두이노 문제로 바뀌었습니다. 주어진 문제를 보면 "1. 주어진 아두이노와 브레드보드, 부품들로 화면과 같이 설계하면 7-segment에 문제가 표시됩니다. 2. 케이블선의 색은 화면과 같이 맞출 필요가 없습니다. 3. 정답을 입력해서 맞다면 본 문제가 시작됩니다."이렇게 나와 있습니다. 주어진 회로도를 보면 이렇게 나와 있습니다. 이건 정말 완전 순 노가다 문제였습니다.. 다 연결했는데도 안되서 다시 다 뽑고 하는 등 열심히 노가다 하면 7-segment에 484F4d45가 연속적으로 뜨고 이를 아스키코드로 변환하면 HOME이 됩니다. KEY : HOME 더보기
정보보호올림피아드2015 본선 Q5 이번에도 리버싱 문제입니다. 실행을 해 보면 ID를 입력받습니다. 제 아이디인 5unKn0wn을 입력하면 잠깐 멈칫 했다가 종료됩니다. 그 사이에 아주 잠깐 con2.exe라는 파일이 생성된 뒤 다시 삭제됩니다. 바로 올리디버거로 열어서 동적분석 해 보겠습니다. 메인 함수부터 분석해 보면 문자열들과 파일이 다 보입니다. con2.exe도 있네요. ID를 입력받고 난 뒤를 보면 입력한 ID를 인자로 전달하고 어떤 함수를 호출합니다. 이 함수 내에서는 제가 입력한 ID를 가지고 연산을 거친 뒤 이 문자열을 만들어 냅니다. 이 함수를 나오고 난 뒤에 이번에는 con1.exe, con2.exe등의 인자를 넣어주고 새로운 함수를 호출합니다.함수 내에서는 자기 자신을 열어서 con2.exe실행파일을 만들어 냅니다... 더보기
정보보호올림피아드2015 본선 Q3 약간 미스크 비스무리한 문제입니다. 문제 내용을 보면 이렇게 나와있습니다. 문제 파일을 보면 ssdeep이라는 해시를 구하는 프로그램과 key_14라는 파일이 있습니다. 헥스 에디터로 열어서 시그니쳐를 보면 PK였습니다. 그래서 zip으로 바꾸고 다시 열면 key라는 파일이 또 튀어 나옵니다. 저 파일을 다시 헥스 에디터로 열어보면 이번에는 시그니쳐가 EGGA입니다. 살짝 고민하다가 확장자를 egg로 바꾸고 다시 여니 key파일이 또 있었습니다. 이번에는 시그니쳐를 봤는데 시그니쳐가 없었습니다. 여기서 약간 헤메다가 첫 번째 줄에 key.tar을 보고 확장자를 tar로 바꾸니 이번에는 폴더가 나옵니다. 1~10이라는 파일이 있고 Hint.txt라는 파일도 함께 있습니다. 내용을 보니 해시가 들어있습니다... 더보기
정보보호올림피아드2015 본선 Q2 리버싱 문제입니다. 문제 내용은 63빌딩을 오르면서 세 개의 키를 획득하면 올바른 최종 키가 나오게 됩니다. 실행시켜보면 ID를 입력받습니다. 제 ID는 Player14였습니다. 입력하고 들어가서 엔터를 누르면게임이 시작됩니다. Stage63까지 가면 키를 다 얻나 봅니다.UPX가 걸려 있어 언패킹을 하고 IDA로 먼저 정적 분석을 합니다. 문자열을 보면 익숙한 문자열들이 좀 보입니다. 여기서 Pass가 있는 부분으로 갑니다.여기서 이 문자열을 사용하네요. 이제 이 함수를 올리디버거에서 동적 분석 해 보겠습니다. 브레이크포인트를 걸고 온 뒤 분석을 해 보면 여기서 0x3F와 비교를 하는데 이는 십진수로 63입니다. 즉 저 변수가 몇 층인지를 저장하는 변수라고 볼 수 있습니다. 63과 같으면 아래 분기문에.. 더보기
Layer7 CTF Write-UP 아쉽게 고등부 4위를 했지만 와업 올려봅니다. 진짜 포너블 제대로 공부해야겠네요... 더보기
YISF 2015 Write-Up 예선 몇 일 전에 끝났던 순천향대학교 정보보호 페스티벌 YISF2015 풀이 올립니다. 대회 도중에는 아쉽게 리버싱200 문제를 풀지 못했지만 끝나고 바로 풀었으므로 따로 풀이 올리겠습니다. 더보기