CodeEngn Advance RCE의 06번 문제입니다. 남은 군 생활이 며칠인지 구하는 문제네요.. 프로그램을 실행시키고 확인 버튼이나 닫기 버튼을 누르면 숫자가 1씩 계속 올라갑니다. 닫기 버튼을 눌러도 종료되지 않아서 작업 관리자에서 강제로 종료시켜야 했습니다. PEID로 확인해보니 UPX 패킹이 되어 있네요. 언패킹을 해준 뒤 올리디버거로 분석하겠습니다. 안티 디버깅 함수인 IsDebuggerPresent를 만나서 간단하게 우회해주었습니다. IsDebuggerPresent 함수를 우회한 뒤 함수 목록을 보니 아까 안 보였던 MessageBoxW 함수를 찾을 수 있었습니다. 모든 MessageBoxW 함수에 BP를 걸고 실행시켜보겠습니다. 실행시켜보니 45E071에서 브레이크가 걸렸습니다. 스택 ..
CodeEngn Advance RCE의 05번 문제입니다. Serial을 구하는 문제입니다. 프로그램을 실행시키고 아무 값이나 친 뒤 오케이를 누르면 이런 화면이 나타납니다. Visual Basic으로 만들어진 프로그램이네요. 올리디버거로 직접 분석하겠습니다. Visual Basic에서 문자열을 비교해주는 함수인 vbaStrCmp를 찾았습니다. 이곳에 BP를 걸고 실행시켜보겠습니다. EAX에 있는 제가 입력한 값 1234와 ECX에 있는 값인 677345를 비교하고 있습니다. 677345를 프로그램에 인증해보겠습니다. 정답이네요. 코드엔진 사이트에도 인증해보겠습니다. ~
CodeEngn Advance RCE의 04번 문제입니다. 3번 문제와 똑같이 Name이 CodeEngn 일 때의 Serial을 구하라고 하네요. 프로그램을 실행시켜서 시리얼 칸에 아무 값이나 넣어보았더니 실패 문자열이 출력됩니다. 올리디버거로 열어서 분석하겠습니다. 올리디버거 내에서 문자열과 함수 목록이 제대로 보이지 않는 것을 보니 패킹이 되어있는 것으로 보입니다. 한 줄씩 실행시키다 보니 401006이 OEP라는것을 알 수 있었습니다. OEP를 제대로 맞춰주고 덤프를 해주었습니다. strcmp 함수를 이용해서 사용자가 입력한 시리얼값과 어떤 ㅁ값을 비교하고 있습니다. 저 값을 프로그램에 인증해보면.. 정답입니다! 코드엔진 사이트에도 인증해보면.. !!
CodeEngn Advance RCE의 03번 문제입니다. Name이 CodeEngn 일 때의 Serial을 구하라고 하네요. 시리얼 칸에 아무 문자열이나 넣어보니 역시 실패 문자열이 출력됩니다. 올리디버거로 열어서 분석해보겠습니다. 성공 문자열로 보이는 곳으로 가보겠습니다. SEH (Structured Exception Handling)란 Windows OS에서 제공하는 예외처리 방식입니다. 언어 중립적이어서 범용적인 사용이 가능하며, 0으로 나누기나 유효하지 않은 메모리 주소 접근 같은 하드웨어 예외를 알아서 감지하고 처리하도록 도와줍니다. SEH가 있는 것으로 봐서 어떤 예외가 발생하면 이곳으로 분기해서 성공 문자열을 출력해주는 것으로 보이네요. 그럼 이제 실패 문자열이 출력되는 곳으로 가보겠습니다..
CodeEngn Advance RCE의 02번 문제입니다. 정답을 구하라고 하네요. 프로그램을 실행시켜보면 패스워드를 입력받습니다. 올리디버거로 열어서 분석해보겠습니다. "Enter Password: "를 출력하고 004012D2에서 문자열을 입력받고 있습니다. 계속 밑으로 내려가 보겠습니다. 루틴 하나를 지나고 004013C5에서 EDX를 호출하여 프로그램을 종료시킵니다. F7키를 이용하여 EDX 안으로 들어가 보겠습니다. ECX와 특정 값들을 비교하고 ZF가 0이라면(ECX와 비교하는 값이 다르다면), 0012F88A로 점프하고 있습니다. 0012F88A로 점프하고 한 줄씩 실행시키다 보면 ECX를 호출해서 프로그램을 종료시켜버립니다. 그렇다면 위에서 ECX와 비교하는 값들을 문자로 변환시키고 패스워..
CodeEngn Advance RCE의 01번 문제입니다. 프로그램이 몇 밀리세컨드 후에 종료되는지를 묻고 있습니다. 문제 파일을 실행시켜보니 이런 화면이 나타납니다. PEID로 보겠습니다. UPX로 패킹 되어있네요. 언패킹 한 후 올리디버거로 열어서 분석하겠습니다. 모든 timeGetTime 함수에 BP를 걸었습니다. 윈도우가 시작되고 난 뒤 지난 시간을 DWORD형 데이터로 얻는 timeGetTime 함수는 윈도우가 시작되고 난 뒤의 시간을 리턴합니다. 리턴값은 보통 EAX에 저장됩니다. EAX와 비교하는 부분을 찾아야겠네요. EAX와 비교하는 구문을 찾았습니다. DWORD PTR DS : [EBX+0x4]에 있는 값인 337B와 EAX를 비교해서 같으면 프로그램이 종료됩니다. 337B를 10진수로 ..
CodeEngn Basic RCE의 마지막인 20번 문제입니다. CodeEngn이라는 문자열이 출력되려면 crackme3.key 파일 안의 데이터가 무엇이 되어야 하는지를 묻는 문제입니다. 먼저 프로그램을 다운로드 받겠습니다. '20.exe'라는 이름의 파일입니다. 실행시켜보면.. 이런창이 뜨고 아무 일도 일어나지 않습니다. 먼저 PEID로 파일의 정보를 보겠습니다. 패킹은 되어있지 않네요. 이제 올리디버거로 열어서 분석해보겠습니다. 'CRACKME3.KEY'라는 이름의 파일이 필요하고 이 파일의 크기는 18바이트여야 합니다. 계속 밑으로 내려가며 보겠습니다. 첫 번째 사진의 내용은 CRACKME3.KEY 파일 안에 있는 문자열을 한 자리씩 순서대로 A-O까지 XOR 연산을 합니다. 우리는 XOR 연산을..
CodeEngn Basic RCE의 19번 문제입니다. 해당 프로그램이 몇 밀리세컨드 후에 종료되는지를 물어보는 문제입니다. 먼저 프로그램을 다운로드 받겠습니다. '19.exe'라는 이름의 파일입니다. 실행시켜보면.. 메시지창이 뜨고 약 12초 정도 후에 종료됩니다. 먼저 PEID로 파일의 정보를 보겠습니다. UPX로 패킹 되어있네요. 빠르게 UPX툴로 언패킹 하겠습니다. 이제 올리디버거로 열어서 보겠습니다. 프로그램에서 사용되는 함수들을 살펴보던 중에 timeGetTime 함수들이 나와서 BP를 걸어주었습니다. timeGetTime 함수란? 윈도우가 시작되고 난 뒤 지난 시간을 데이터로 얻는 함수입니다. 그리고 한 줄씩 실행시키다 보면.. DWORD PTR DS : [EBX+0x4]에 있는 값인 2B7..
CodeEngn Basic RCE의 18번 문제입니다. Name에 CodeEngn을 입력했을 때의 Serial을 구하는 문제입니다. 먼저 프로그램을 다운로드 받아보겠습니다. '18.exe'라는 이름의 파일입니다. 실행시켜보고 틀린 Serial값을 입력해보겠습니다. 실패 문자열이 출력됩니다. 올리디버거로 보기 전에 먼저 PEID로 파일의 정보를 보겠습니다. 언패킹은 되어있지 않습니다. 이제 올리디버거로 열어서 보겠습니다. 성공 문자열이 보이네요. 성공 문자열이 위치한 곳으로 가보겠습니다. 성공 문자열 위에 문자열을 비교하는 함수인 strcmp가 보입니다. 저곳에 BP를 걸고 실행시켜보겠습니다. Name값에는 CodeEngn을 Serial값에는 1234를 입력했습니다. 그리고 체크를 눌러주면.. String..
CodeEngn Basic RCE의 17번 문제입니다. 해당 프로그램의 key값을 이용해서 Name을 찾는 문제네요. 프로그램을 다운로드 받겠습니다. '17.exe'라는 이름의 파일입니다. 실행시켜보면.. Name이 한자리라길래 한자리만 입력했더니 문자를 더 치라고 하네요. 이 부분부터 고쳐야 될 것 같습니다. 그 전에 먼저 PEID로 파일의 정보를 보겠습니다. 패킹은 되어있지 않습니다. 올리디버거로 열겠습니다. 아까 봤던 문자를 더 입력하라는 문자열을 찾았습니다. 해당 문자열이 사용되는 곳으로 이동해보겠습니다. 입력받은 Name이 세 자리 이상인지 비교하는 조건문이 보입니다. 저곳을 수정해주겠습니다. Name이 한자리일 때도 실행되도록 수정해주었습니다. 이제 이 상태에서 프로그램을 저장하겠습니다. 이제..
CodeEngn Basic RCE의 16번 문제입니다. 이 문제도 앞에 문제들과 같이 Name값에 따라 Serial값이 변하는 키젠 문제입니다. 먼저 프로그램을 다운로드 받아보겠습니다. '16.exe'라는 이름의 파일입니다. 실행시켜보면.. 틀린 Serial값을 입력하니 실패 문자열을 출력합니다. 먼저 PEID로 파일의 정보를 확인하겠습니다. C++로 만들어진 프로그램이고 패킹은 되어있지 않습니다. 성공 문자열 위에 EAX값과 EBP-0x3C 주소에 있는 4byte만큼의 값을 비교하고 일치한다면 성공 문자열을, 다르다면 실패 문자열을 출력해주는 조건문이 있습니다. 조건문에 BP를 걸고 실행시켜보겠습니다. 실행시킨 후 Name값에는 CodeEngn을, Serial값에는 1234를 입력해주니.. EAX에 4..
CodeEngn Basic RCE의 15번 문제입니다. Name값이 CodeEngn일때의 Serial을 구하는 문제입니다. 프로그램을 다운로드 받아보겠습니다. '15.exe'라는 이름의 파일입니다. 실행시켜보면.. Name값으로 CodeEngn을, Serial값으로 1을 주었더니 실패 문자열이 출력되었습니다. 먼저 PEID로 패킹이 되어있는지 살펴보겠습니다. 패킹은 되어있지 않습니다. 그렇다면 바로 올리디버거로 보겠습니다. 성공 문자열 바로 위에 성공과 실패를 가르는 조건문이 있습니다. EAX값과 45B844 주소의 저장된 4byte만큼의 값을 비교하는군요. 비교문인 458831에 BP를 걸고 실행시켜보겠습니다. Name값으로는 CodeEngn을, Serial값으로는 1을 입력하고 체크하겠습니다. 458..
CodeEngn Basic RCE의 14번 문제입니다. 해당 프로그램의 Name값이 CodeEngn 일 때 Serial값을 구하는 문제입니다. 프로그램을 다운로드 받겠습니다. '14.exe'라는 이름의 파일입니다. 실행시켜보면.. 틀린 값을 입력하고 체크하니 실패 문자열이 출렸되었습니다. 먼저 PEID로 파일의 정보를 확인하겠습니다. UPX로 패킹 되어있습니다. 빠르게 UPX 언패킹 툴로 언패킹 하겠습니다. 언패킹을 성공했습니다. 이제 올리디버거로 분석하겠습니다. 이 프로그램은 입력받은 Name값을 이용해서 Serial값을 생성해서 입력한 Serial값과 비교하는 프로그램인 것 같습니다. 그러니 성공 문자열 주변에 입력받은 Serial값과 프로그램에서 Name값을 이용해서 생성한 Serial값을 비교하는..
CodeEngn Basic RCE의 13번 문제입니다. 해당 프로그램의 정답을 찾아내는 문제입니다. 프로그램을 다운로드 받겠습니다. '13.exe'라는 이름의 파일입니다. 실행을 시켜보면.. 틀린 패스워드를 입력하니 실패 문자열이 나옵니다. 먼저 PEID로 파일의 정보를 보겠습니다. C#으로 작성되었고, 패킹은 되어있지 않네요. 올리디버거로 열어보겠습니다. 올리디버거로 열리지 않습니다. 왜냐하면, C#으로 작성된 파일은 닷넷 프레임워크가 없는 환경에서는 분석할 수 없기 때문입니다. 닷넷 프레임 워크(.NET Framework)란, 마이크로소프트에서 개발한 윈도우 프로그램 개발 및 실행 환경입니다. 주요 지원 언어로는 C#, C++, F#, DLR, Delphi.NET, Visual Basic .NET이 ..
CodeEngn Basic RCE의 12번 문제입니다. Key 값과 Key 값이 메세지 박스에 출력도록 수정해야 하는 주소영역을 구하는 문제입니다. 먼저 프로그램을 다운로드 받아보겠습니다. '12.exe'라는 이름의 파일입니다. 쓰레기통 모양의 아이콘이네요. 프로그램을 실행시켜보면.. 잘못된 Key 값을 입력하고 Check 창을 눌러봤더니 변화가 없습니다. 먼저 PEID로 파일의 정보를 보겠습니다. 패킹은 되어있지 않네요. 바로 올리디버거로 분석해보겠습니다. 문자열 중에 성공 문자열로 보이는 문자열이 보입니다. 클릭해서 저 문자열이 사용되는 위치로 가보겠습니다. 성공 문자열 위에 GetDlgItemInt 함수가 있는 것으로 보아 사용자가 입력한 숫자와 Key 값을 비교하는 형식으로 보입니다. GetDlg..
- Total
- Today
- Yesterday
- ftz
- 멘토링
- 17th HackingCamp CTF
- 풀이
- Level 06
- Write-up
- C#
- Advance RCE
- Level 05
- unity2d
- hackerschool
- reversing.kr
- Programming
- pwnable
- xcz.kr
- HackingCamp
- Basic RCE
- 유니티
- Level 03
- Reversing
- CodeEngn
- Level 01
- c++
- Level 02
- Android
- wargame
- Level 04
- 안드로이드
- 안드로이드 멘토링
- Unity
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |