Reversing.kr의 문제 WindowsKernel입니다. 커널 디버깅을 요구하는 문제지만 저는 정적 분석으로 해결했습니다. 커널 분석으로도 풀어봐야겠습니다. WindowKernel.exe 파일과 WinKer.sys 파일이 있습니다. WindowKernel.exe 파일을 실행시켜보면, 원래는 입력하는 칸이 뜨는데 윈도우 10과 제 vmware 윈도우 7에서는 에러가 뜨네요. IDA로 분석하겠습니다. Check 버튼을 누르면 입력받은 값을 기준으로 WinKer.sys가 로드되며 통신을 합니다. 결과값이 1일 경우에 "Correct!"를 반환합니다. 이제 WinKer.sys 파일을 분석해보겠습니다. READ_PORT_UCHAR이라는 함수를 통해서 키보드 스캔 코드를 읽어옵니다. 호출 순서는 DriverE..
Reversing.kr의 문제 CSHARP입니다. 문제 이름처럼 C# 문제입니다. 문제 파일을 실행시켜보면, 알맞은 정답을 알아내면 되는 문제입니다. dnSpy로 문제 파일을 분석하겠습니다. 'MetMett'라는 함수가 있는데 동적으로 호출되고 있어서 호출도 안 되고 디버깅도 안 됩니다. .ctor은 프로그램이 실행되면 자동으로 실행되는데, 이곳에서 MetMett 함수를 복호화시켜주는 것으로 보이는 코드를 찾았습니다. 이 부분에 BP를 걸고 복호화 후에 값을 확인해보겠습니다. 정말 MetMett 함수 부분의 값이 바뀌었습니다. 복호화된 부분을 그대로 복사해서 HxD에서 수정해주겠습니다. HxD에서 MetMett 함수 부분의 값을 수정했습니다. 이제 프로그램을 다시 dnSpy로 열어서 확인해보면.. Met..
Reversing.kr의 문제 HateIntel입니다. Intel을 미워한다네요.. ㅎㅎ 문제 파일을 다운로드 받아보면 HateIntel 파일과 ReadMe 파일이 있습니다. ReadMe 파일을 메모장으로 열어보면, 패스워드를 찾으라고 합니다. 먼저 HateIntel 파일을 HxD로 열어보겠습니다. 처음 보는 파일 시그니처길래 찾아보았더니 OS X 실행 파일의 시그니처였습니다. 그렇다면 OS X에서만 실행할 수 있다는 이야기군요.. 하지만 저에게는 IDA가 있죠! IDA로 HateIntel 파일을 분석해보겠습니다. main 함수 부분입니다. sub_232C 함수 부분입니다. sub_2494 함수 부분입니다. 핵심 함수는 위 3개이고 처음에 입력을 받고 암호화하는 과정을 역연산해서 byte_3004[i] ..
Reversing.kr의 문제 Position입니다. 문제 파일을 다운로드 받아보면 Position.exe와 ReadMe.txt 파일이 있습니다. ReadMe.txt 파일을 열어보면, Serial이 76876-77776 일 때에 패스워드를 찾으라네요. 그리고 패스워드는 4글자이고, p로 끝난답니다. Position.exe를 실행시켜보겠습니다. Name을 입력받는 부분과 Serial을 입력받는 부분이 있습니다. 그리고 그 밑에 성공인지 실패인지 알려주네요. 이제 IDA로 분석을 해보겠습니다. sub_401740 함수의 리턴값이 1일 때 성공 문자열을 출력하네요. sub_401740 함수를 분석해보겠습니다. Name의 길이가 4글자여야 하고 소문자 알파벳으로 이루어져 있어야 하네요. Name에 중복문자가 있..
Reversing.kr의 문제 AutoHotkey1입니다. 문제 파일을 다운로드 받아보면 readme.txt와 ahk.exe가 있습니다. readme.txt를 열어보면, 정답을 인증하는 형식에 관해서 설명을 해주고 있습니다. md5 복호화를 해서 문자열을 만드는 것 같네요. ahk.exe를 실행시켜보면, 입력하는 칸이 있는데 아무 숫자나 입력을 하고 OK를 눌러보니 바로 프로그램이 종료됩니다. PEID로 파일의 정보를 확인해보겠습니다. UPX 패킹이 되어있네요. 언패킹을 해주고 실행시켜보면.. "EXE corrupted"라는 문자열이 출력되고 확인 버튼을 누르면 종료됩니다. 검색을 해보니 컴파일 후 변조가 되면 이 문자열을 띄운다고 합니다. 이제 언패킹을 하지 않은 원본 파일을 올리디버거로 분석해보겠습니..
Reversing.kr의 문제 Direct3D FPS입니다. 문제 파일을 실행시켜보면, 고구마 몬스터들을 총으로 쏴 죽이는 게임입니다. 올리디버거로 분석해보겠습니다. "Game Clear"라는 문자열이 있는 곳으로 가보니 이상한 문자열이 있네요. 고구마 몬스터를 조금 잡아보니, 문자열이 조금 달라졌습니다. 아마 필드 안에 있는 모든 고구마 몬스터들을 잡으면 이상한 문자열이 성공 문자열로 바뀌는 것 같네요. 문자열을 복호화해주는 부분을 찾기 위해서 이상한 문자열에 하드웨어 BP를 걸고 고구마 몬스터를 조금 잡아보았습니다. 위가 바로 복호화를 해주는 부분입니다. 하지만 이상한 문자열과 XOR 연산을 하는 CL의 값을 알 수가 없기 때문에, 0103427에서 CL이 값을 받아오는 메모리 주소에 하드웨어 BP를..
Reversing.kr의 문제 Ransomware입니다. 문제 파일을 다운로드 받아보면, run.exe, readme.txt, file이라는 이름의 파일들이 있습니다. readme.txt 파일을 열어보니.. "복호화 한 file은 EXE 형식의 파일이다."라고 써있는 것 같습니다. run.exe를 실행시켜보겠습니다. 어떤 나쁜 사람이 파일을 암호화했다네요. 먼저 PEID로 run.exe 파일의 정보를 보겠습니다. UPX로 패킹이 되어있네요. 올리디버거로 열어서 직접 진짜 코드가 있는 곳으로 가서 분석해보겠습니다. 윗부분은 반복문을 돌며 암호화된 파일을 읽어오는 부분입니다. 윗부분은 입력 받은 key값을 이용해서 암호화된 파일을 복호화하는 부분입니다. 복호화하는 방식을 정리하면 파일에서 한 바이트씩 가져와..
Reversing.kr의 문제 CSHOP입니다. 문제 파일을 실행시켜보겠습니다. 회색 창만 나타나고 아무 일도 일어나지 않습니다. PEID로 파일의 정보를 보겠습니다. C#으로 만들어진 프로그램이군요. .net 디컴파일러인 dnSpy로 파일을 분석하겠습니다. dnSpy로 CSHOP 파일을 연 모습입니다. 분석하던 중에 \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD_Click 메소드에 이상한 문자열이 담겨있는 것을 발견했습니다. 저 문자열이 정답인 줄 알았으나 역시 아니였습니다.. 그리고 바로 다음에 사이즈가 0, 0인 버튼을 클릭하면 \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD_Click 메소드가 실행되는 부분을 발견했습..
Reversing.kr의 문제 Flash Encrypt입니다. 문제 파일을 다운로드 받겠습니다. swf 파일이네요. SWF란, 어도비 플래시에서 멀티미디어, 액션 스크립트, 벡터 그래픽 등을 처리하는 곳에 사용되는 파일 형식입니다. 플래시 뷰어로 파일을 열어보겠습니다. 회색 배경에 숫자를 입력하는 창밖에 보이지 않습니다. 이제 swf 파일의 디컴파일러인 JPEXS로 열어서 분석하겠습니다. 분석하던 중에 BUTTONCONACTION 파일에서 공통적으로 전역 함수 gotoAndPlay와 서로 다른 조건식이 있다는 것을 확인했습니다. 그래서 각 입력란에 조건식에 맞는 값을 넣어주었더니.. Key 값이 출력되었습니다.
Reversing.kr의 문제 Easy ELF입니다. 리눅스 환경에서 문제 파일을 실행시켜보면.. 입력하는 칸이 나와서 아무 숫자나 입력했는데 실패 문자열이 출력되네요. 문제 파일을 IDA로 분석해보겠습니다. 문자열을 출력하고 두 함수를 거친 뒤 eax의 값이 1이면 80484F7 함수를 호출한 뒤 프로그램이 종료됩니다. 그런데 만약 eax의 값이 1이 아니라면 실패 문자열이 출력되고 종료됩니다. 80484F7 함수를 확인해보겠습니다. 성공 문자열을 출력하는 함수네요. 그렇다면 위 두 함수를 지난 뒤 eax가 1이 되는 값을 구하면 되겠군요. 먼저 8048434 함수를 보겠습니다. scanf 함수를 호출해서 804A020부터 문자를 저장시킨다는 것 같습니다. 이제 8048451 함수를 보겠습니다. 코드의..
Reversing.kr의 문제 ImagePrc입니다. 문제 파일을 실행시켜보겠습니다. 그림을 그리는 창이 나와서 아무 그림이나 그리고 체크를 눌렀더니 실패 문자열이 출력되네요. 패킹은 되어있지 않으니 바로 올리디버거로 분석하겠습니다. 위 화면의 코드들을 살펴보면 높이가 150, 너비가 200인 bmp 리소스를 받아오는 것을 볼 수 있습니다. 문자열들을 살펴보던 중에 아까 봤던 실패 문자열을 발견해서 그곳에 BP를 걸고 실행시켜보았습니다. 실패 문자열이 출력되는 곳 바로 위에 조건 점프문을 보니 특정 루틴을 0x15F90번 반복하면서 비교하는 것을 볼 수 있습니다. 아마 문제 파일 안에 있는 그림과 사용자가 만든 그림을 비교하는 것 같습니다. 이제 PE view로 문제 파일의 PE 구조를 확인하여 파일 안..
Reversing.kr의 문제 Replace입니다. 문제 파일을 실행시켜보겠습니다. 숫자만 입력받을 수 있습니다. 아무 숫자나 입력해보니 문제가 발생해서 프로그램 작동이 중지됩니다. 패킹은 되어있지 않으니 바로 올리디버거로 분석하겠습니다. 올리디버거로 실행시킨 후 아무 숫자나 넣고 체크 한 후 0040466F 주소를 보면 EAX에 0x90(NOP)을 저장하는데 이 부분에서 문제가 발생합니다. 왜냐하면 현재 EAX에 저장돼있는 주소인 60160A20은 접근할 수 없는 주소이기 때문입니다. 접근을 할 수 없는 곳에 0x90이란 값을 넣으려고 하니 오류가 발생하는 것입니다. 이제 프로그램에서 숫자를 입력받고 처리하는 부분을 보겠습니다. 숫자를 입력받는 함수인 GetDlgItemInt에 BP를 걸어주고 실행시켜..
Reversing.kr의 문제 Music Player입니다. 문제 파일을 다운로드 받아보면.. 실행 파일과 텍스트 파일 그리고 msvbvm60.dll 파일이 있습니다. msvbvm60.dll은 비주얼 베이직 6.0의 라이브러리 파일입니다. (실행 파일이 비주얼 베이직으로 만들어진 것이라서 혹시라도 사람들이 msvbvm60.dll이 없을까 봐 친절하게 문제와 함께 첨부해주셨네요 ㅎㅎ) 텍스트 파일을 열어보면.. 이 MP3 플레이어에는 1분마다 체크를 하는 루틴이 있어서 1분까지밖에 들을 수 없고 1분 이상을 들으면 플래그가 나온다고 하네요. 프로그램을 실행시켜보겠습니다. 노래를 틀면 딱 1분이 될 때 1분 미리듣기만 가능하다는 창이 뜨면서 프로그램이 종료됩니다. 패킹은 되어있지 않으니 바로 올리디버거로 열..
Reversing.kr의 문제 Easy Unpack입니다. 파일을 다운로드 받아보면.. 'Easy_UnpackMe.zip'이란 파일입니다. 압축을 풀면.. 실행 파일과 텍스트 파일이 하나씩 있습니다. 텍스트 파일을 열어보면 OEP를 찾으라네요. OEP(Original Entry Point)란, 이름 그대로 프로그램의 진짜 시작 위치를 나타내는 말입니다. 실행 파일을 실행시켜보면 이런 창이 뜹니다. 먼저 PEID로 실행 파일의 정보를 보겠습니다. 무엇으로 패킹 되었는지 알 수가 없다네요. 올리디버거로 열어서 분석하겠습니다. 밑으로 내리다 보니 점프문을 찾을 수 있었습니다. OEP로 가는 점프문으로 보입니다. 저곳에 BP를 걸고 00401150으로 이동하겠습니다. 이상한 문자들만 보이네요. 단축키 Ctrl ..
- Total
- Today
- Yesterday
- Reversing
- Level 06
- Android
- reversing.kr
- Level 05
- c++
- xcz.kr
- 17th HackingCamp CTF
- ftz
- 풀이
- CodeEngn
- Level 04
- 안드로이드
- wargame
- Level 02
- Write-up
- Unity
- hackerschool
- Level 03
- Basic RCE
- Advance RCE
- 멘토링
- pwnable
- 유니티
- Level 01
- 안드로이드 멘토링
- HackingCamp
- C#
- unity2d
- Programming
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |