문제 설명 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요! 획득한 입력값은 DH{} 포맷에 넣어서 인증해주세요. 예시) 입력 값이 Apple_Banana일 경우 flag는 DH{Apple_Banana} https://dreamhack.io/wargame/challenges/17 rev-basic-3 Reversing Basic Challenge #3 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출 dreamhac..
서론 이번 코스에서는 드림핵 워게임 중 patch문제를 함께 풀어보면서 이제껏 학습한 지식과 도구를 응용해 본다. patch 문제는 아래의 링크에서 확인할 수 있다. https://dreamhack.io/wargame/challenges/49/ patch flag를 그리는 루틴을 분석하고 가려진 flag를 보이게 해주세요. Reference GDI+ - Win32 apps | Microsoft Docs Graphics Functions - Win32 apps | Microsoft Docs File — x64dbg documentation dreamhack.io 본 문제의 파일은 플래그를 이미지로 출력해주지만 일부가 가려져있어 플래그를 읽을 수 없는 상태의 프로그램이다. 이번 코스를 마치면 본 문제를 해결..
정적 분석 IDA로 파일 열기 문제 파일을 정적분석하기 위해 앞서 배운 IDA를 사용했다. IDA를 실행하고, chall0.exe를 끌어넣는다. 파일이 정상적으로 열리면 다음과 같은 창이 나타난다. 위의 창에서는 문제 파일의 간략한 정보를 띄워준다. 바이너리의 아키텍처는 AMD64 (x86-64), 파일 포맷은 PE (Portable Executable) 구조라는 것을 알 수 있다. 이 정보들을 통해 본격적으로 분석하기 전, 분석에 도움이 되는 정보를 획득할 수 있다. 지금까지 과정을 성공적으로 마치면 위와 같은 창이 나타난다. 이는 바이너리에 디버깅 정보를 담고있는 심볼 경로가 존재하는데, 이를 찾아서 로드하겠냐는 질문창이다. 문제 출제자는 별도의 심볼(.pdb)을 제공하지 않았기 때문에 No를 클릭한..
서론 드림핵 워게임 중 rev-basic-0 문제를 푸는 코스이다. 실행 먼저 다운로드 받은 파일을 실행하여 프로그램이 어떤 식으로 동작하는지 확인해보았다. 워게임 문제와 같이 신뢰할 수 없는 프로그램을 실행할 때는 가상환경(VM)에서 실행하는 것이 바람직하다. 만약 문제 정보를 통해 프로그램의 동작방식이 예상이 간다면 굳이 실행하지 않고 정적분석을 먼저 시도해보는 것도 좋은 방법이다. 윈도우 운영체제에서 기본적으로 제공되는 Windows PowerShell에서 문제 파일을 실행해보았다. 문제 파일의 압축을 해제한 후, 실행해보면 Input : 이라는 문자열이 출력된다. 출력된 문자열 뒤에 AAAA를 입력한 후, 엔터를 치면 Wrong이 출력된다. 문제가 사용자에게 문자를 입력받고 프로그램 내부의 어떤 ..
[CodeEngn] Basic RCE L04
·
Hacking/Reversing
exe 파일을 디버깅하지 않고 실행해 보았다. 이번엔 IDA에서 디버깅을 했다. 함수의 기능을 확인할 수 있었다. 이제 IDA에서 디버깅해보자. basic RCE 3처럼 Function name에서 확인하려 했으나 함수의 이름이 나타나 있지 않았다. 그래서 함수의 import 화면을 실행했다. 실행해보니 의심되는 함수 IsDebuggerPresent 함수가 있어 더블클릭한 뒤 x를 눌러 실행했다. jz에 중단점을 두고 실행해 보았다. EAX(return)값이 1이고, 분기점이 왼쪽으로 가 call이 실행되어 "디버깅 당함"이 출력되는 것을 확인할 수 있었다. jz 중단점 전에 EAX 값을 0으로 바꿔서 확인해 보았다. 오른쪽 분기점으로 실행되어 예상했던 대로 "정상"이 출력되는 것을 확인할 수 있었다. ..
[CodeEngn] Basic RCE L03
·
Hacking/Reversing
문제 파일을 실행해 보았다. 원래는 실행 파일이 있는 폴더에 MSVBVM50.dll 파일을 설치한 뒤에 실행하면 된다고 하는데, 나는 실행이 되지 않았다. https://boksbooks.tistory.com/67 Msvbvm50.dll 다운로드 및 오류 해결법 Msvbvm50.dll Msvbvm50.dll 에러가 발생하면 문제가 생긴 파일이 있는 위치에 파일을 복사하여 넣거나 파일을 새로 생성해야 합니다. 여기에서는 파일을 다운로드 받아서 시스템 폴더에 넣거나 다이 boksbooks.tistory.com 해당 글을 참고해도 실행이 되지 않아서 코드를 훑어보아 해결하기로 했다. 스트링 비교 함수는 두 글자를 비교(cmp)를 하고 Error 혹은 Success 문자를 출력하는 분기점(jz)을 포함하고 있을..
[CodeEngn] Basic RCE L02
·
Hacking/Reversing
다운받아 실행해 보려 했으나 역시 실행파일이 손상되어 실행이 되지 않았다. 따라서 HxD를 통해 바이너리 코드를 분석해 보았다. 파일이 손상되지 않았다면 함수의 이름이 되었을 것으로 추청되는 흔적들을 찾을 수 있었다. Nope과 Yeah로 조건문이 있었을 것으로 미루어 짐작해 본다. CrackMe#1과 Yeah, you did it! CrackMe#1이 있는 것으로 보아 CrackMe#1과 조건문을 통해 비교하는 것 같다. 그 뒤를 보면 비밀번호로 추정되는 것을 확인할 수 있다. 그 아래도 확인하면 Rule도 볼 수 있다. It's very easy라고 적혀있는 부분이 조금 ...ㅋㅋㅋ 성공했다
[CodeEngn] Basic RCE L01
·
Hacking/Reversing
IDA를 통해 파일을 열어보기 전에 1.exe를 실행해 보았다. 아무런 작업을 하지 않은 상태에서 확인을 눌러 보았다. IDA를 통해 실행한 뒤에 GetDriveTypeA의 값을 입력받는 곳에서 수정을 통해 값을 CD-ROM에 해당하는 것으로 입력하면 될 것 같다. IDA 실행 화면이다. GetDriveTypeA 함수를 실행한 뒤에 eax와 esi를 비교해서 둘이 같은지를 살펴본다. 둘이 같다면 Ioc_40103D로 이동해서 CD-ROM으로 인식한다. GetDriveTypeA 함수를 찾아보았다. https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getdrivetypea GetDriveTypeA function (fileapi.h)..