no image
Basic RCE L03
먼저 문제를 볼까요 :D 비주얼베이직에서 스트링 비교함수 이름은 무엇인가 입니다! 다운받아서 Ollydbg로 열어봅시다 :D Ollydbg로 올렸을 때 시스템 오류가 발생하더라구요! 위의 파일 다운받아서 해당 프로그램이 있는 경로에 압축 풀어주시면 됩니다 :D 프로그램의 Entry Point입니다! Entry Point는 프로그램이 시작하는 부분을 말합니다 :D 바로 밑의 CALL함수에서 바로 프로그램을 실행시켜버리네요! 그리고 CALL함수를 들어가면 76XXXXXXXX 주소로 시작하는데 이는 DLL 구역입니다 ㅎㅎ DLL은 분석할 필요가 없죠! 그럼 어떻게 분석을 해야할까요 :D 유추할 수 있는 문자열을 통해서 찾아보도록 합시다! [마우스 오른쪽 버튼] - [Search for] - [All refer..
2020.02.07
no image
Basic RCE L02
문제에서 실행파일이 손상이되어서 실행이 되지 않는다고 합니다! 일단 Ollydbg로 올려봅시다! 역시 실행파일이 손상이되었기 때문에 Ollydbg에는 올라가지 않습니다. 그럼 어떻게 봐야할까요 :D HxD를 통해서 봅시다! HxD란 메모리 편집기입니다 :D 자세한 정보와 다운로드 경로는 밑의 사이트를 이용해 주세요! https://mh-nexus.de/en/hxd/ HxD - Freeware Hex Editor and Disk Editor | mh-nexus HxD - Freeware Hex Editor and Disk Editor HxD is a carefully designed and fast hex editor which, additionally to raw disk editing and modif..
2020.02.03
no image
Basic RCE L01
혹시나 어셈블리어를 모르시는 분들은 반드시 어셈블리어를 공부하시고 문제 풀이에 임하시기 바랍니다 ^_^ GetDriveTypeA의 리턴값을 물어보는군요! 가장 대표적인 Ollydbg로 열어보겠습니다 :D http://www.ollydbg.de/ OllyDbg v1.10 www.ollydbg.de Ollydbg는 대표적인 디버거 툴로 위의 사이트에서 간단하게 다운받으실 수 있습니다 :D 이렇게 어셈블리어가 나옵니다! 어셈블리어란? 쉽게 말하면, 컴퓨터의 언어인 기계어를 사람이 보기 쉽게 변환한 언어라고 생각하시면 됩니다 :D 더 자세히 알고 싶으시면 밑의 사이트를 읽어 주세요! https://ko.wikipedia.org/wiki/%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC%EC%96..
2020.01.31

Basic RCE L03

HelloMG
|2020. 2. 7. 18:59

Basic RCE L03 문제

먼저 문제를 볼까요 :D

비주얼베이직에서 스트링 비교함수 이름은 무엇인가 입니다!

 

다운받아서 Ollydbg로 열어봅시다 :D

시스템 오류

Ollydbg로 올렸을 때 시스템 오류가 발생하더라구요!

msvbvm50.zip
0.67MB

위의 파일 다운받아서 해당 프로그램이 있는 경로에 압축 풀어주시면 됩니다 :D

Entry Point

프로그램의 Entry Point입니다!

Entry Point는 프로그램이 시작하는 부분을 말합니다 :D 

프로그램 실행 함수

바로 밑의 CALL함수에서 바로 프로그램을 실행시켜버리네요!

그리고 CALL함수를 들어가면 76XXXXXXXX 주소로 시작하는데 이는 DLL 구역입니다 ㅎㅎ

DLL은 분석할 필요가 없죠!

그럼 어떻게 분석을 해야할까요 :D

유추할 수 있는 문자열을 통해서 찾아보도록 합시다!

Search for - All referenced text strings

[마우스 오른쪽 버튼] - [Search for] - [All referenced text strings]

 

Password

들어가면 프로그램 내 문자열을 모두 보여주는데용

맨 밑으로 내려가면 password와 비교 후 나타내는 문자열이 보이실 꺼예요 :D

더블 클릭해서 들어가봅시다!

vbaStrCmp

쨘! 비밀번호 바로 밑에 CALL 함수 보이시죠 :D ?

그리고 이름은 "vbaStrCmp"랍니다 ㅎㅎㅎ

이름부터 감이 오시나요?

 

vba(visual basic, 비쥬얼베이직)

Str(String, 문자열)

Cmp(Compare, 비교)

 

참 쉽죠 :D ?

이번 문제에서 새로운 기능을 알아가는 것 같네요!

문자열 기준으로 찾고 싶은게 있다하면

[마우스 오른쪽 버튼] - [Search for] - [All referenced text strings]

잊지마세요 :-)

'CTF > CodeEngn.kr' 카테고리의 다른 글

Basic RCE L06  (0) 2020.02.12
Basic RCE L05  (0) 2020.02.10
Basic RCE L04  (0) 2020.02.09
Basic RCE L02  (0) 2020.02.03
Basic RCE L01  (0) 2020.01.31

Basic RCE L02

HelloMG
|2020. 2. 3. 17:51

Basic RCE L02

문제에서 실행파일이 손상이되어서 실행이 되지 않는다고 합니다!

일단 Ollydbg로 올려봅시다!

Error

역시 실행파일이 손상이되었기 때문에 Ollydbg에는 올라가지 않습니다.

그럼 어떻게 봐야할까요 :D

 

HxD를 통해서 봅시다!

 

HxD란 메모리 편집기입니다 :D

자세한 정보와 다운로드 경로는 밑의 사이트를 이용해 주세요!

https://mh-nexus.de/en/hxd/

 

HxD - Freeware Hex Editor and Disk Editor | mh-nexus

HxD - Freeware Hex Editor and Disk Editor HxD is a carefully designed and fast hex editor which, additionally to raw disk editing and modifying of main memory (RAM), handles files of any size. The easy to use interface offers features such as searching and

mh-nexus.de

자 HxD로 열어보면 이렇게 프로그램의 메모리를 볼 수 있습니다!

HxD

프로그램 메모리는 영역이 나누어져있고 각 필드값도 지정되어 있어서

알고 계신다면 해석도 가능합니다 :D

그러나 지금 설명하면 너무 길기 때문에 따로 공부하시면 좋을 것 같네요 !

(저는 "리버싱핵심원리" 라는 책을 가지고 공부를 했었습니다 :D)

Password

밑으로 좀 내려오시다보면 data영역을 확인할 수 있었습니다!

 

"Nop, try a gain!", "Yeah, you did it!" 이라는 두가지 문자열이 보이네요 :D

분기점이라고 할 수 있으며 뒤의 문자열이 문제에서 보이는 패스워드값이 아닐까 생각을 했는데..

패스워드가 맞았습니다 :D

 

좀 억지스럽게 푼면이 없지않아 있지만..ㅋㅋㅋㅋㅋ

더 알고 싶으신분들은 메모리 구조를 분석해서 복원시킨뒤 풀어보시면

공부도 많이되고 좋을 것 같네요 :D

 

그럼 다음 문제에서 뵙겠습니다!

'CTF > CodeEngn.kr' 카테고리의 다른 글

Basic RCE L06  (0) 2020.02.12
Basic RCE L05  (0) 2020.02.10
Basic RCE L04  (0) 2020.02.09
Basic RCE L03  (0) 2020.02.07
Basic RCE L01  (0) 2020.01.31

Basic RCE L01

HelloMG
|2020. 1. 31. 17:10

 


혹시나 어셈블리어를 모르시는 분들은

반드시 어셈블리어를  공부하시고 문제 풀이에 임하시기 바랍니다 ^_^ 


 

 

 

Basic 1번 문제

GetDriveTypeA의 리턴값을 물어보는군요!

 

가장 대표적인 Ollydbg로 열어보겠습니다 :D

http://www.ollydbg.de/

 

OllyDbg v1.10

 

www.ollydbg.de

 

 

Ollydbg는 대표적인 디버거 툴로 위의 사이트에서 간단하게 다운받으실 수 있습니다 :D

 

01.exe

이렇게 어셈블리어가 나옵니다!

 


어셈블리어란?

 

쉽게 말하면, 컴퓨터의 언어인 기계어를 사람이 보기 쉽게 변환한 언어라고 생각하시면 됩니다 :D

더 자세히 알고 싶으시면 밑의 사이트를 읽어 주세요!

https://ko.wikipedia.org/wiki/%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC%EC%96%B4

 

어셈블리어 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 어셈블리어(영어: assembly language) 또는 어셈블러 언어(assembler language)[1]는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어이다. 컴퓨터 구조에 따라 사용하는 기계어가 달라지며, 따라서 기계어에 대응되어 만들어지는 어셈블리어도 각각 다르게 된다. 컴퓨터 CPU마다 지원하는 오퍼레이션의 타입과 개수는 제각각이며, 레지스터의 크기와 개수, 저장된 데이터 형의 표현도 각기 다르다

ko.wikipedia.org


자! 차례대로 분석해봅시다!

 

다들 잘 아시겠지만 혹시 모르시는 분들을 위해서 ~_~

먼저 간단한 단축키를 알려드리겠습니다!

 

[F7]   명령어 실행(함수 진입 O)

[F8]   명령어 실행(함수 진입 X)

[Ctrl+F2]   프로그램 재시작

 

[F8]을 눌러서 열심해 내려갑시다!

MessageBoxA

MessageBoxA 함수를 만납니다!

다들 잘아시겠지만

오른쪽에 보면 Style, Title, Text, h0Wner 보이시죠?

이것들은 MassageBoxA의 인자입니다!

함수를 불러올 때 인자를 먼저 넣고 함수를 부른다는거 잊지마세요 !

EAX 3

함수가 반환되면 EAX 레지스터에 값을 저장시킵니다 :D

GetDriveTypeA가 3이 반환이 되는군요!

[F8]을 이용해서 계속 내려가 봅시다!

계속 진행

내려가면

CMP 명령어를 통해 EAX, ESI를 비교하고

JE 명령어를 통해 40103D로 점프할지를 정합니다.

 

JE는 EAX, ESI가 같으면 정해진 주소를 넘어갑니다!

(정확히는 ZF가 1이 되면 넘어가게 됩니다. 이부분은 찾아서 공부해보시기 바랍니다.)

 

하지만 EAX(1), ESI(401003)이 서로 다르기 때문에 계속 실행하여

원하는 것을 얻지 못하게 되죠!

EAX 401005 변경

그럼 문제에서 GetDriveTypeA가 무엇이 되어야 CD-Rom을 인식시킬 수 있냐인데!

반환값이 3이 아니라 다른 값이어야겠죠!

 

비교문에서 401003의 값을 맞춰주기 위해

뒤에서 EAX 레지스터 값이 총 2번 감소하기때문에

"401005"를 반환시키면 401003이 되겠죠 :D


INC REG => REG값을 1 감소 시킨다.

DEC REG => REG값을 1 증가 시킨다.


EAX 레지스터를 더블클릭하여 강제로 값을 변환시켜보았습니다!

그리고 조건문까지 내려갑시다 :D

40103D로 점프!

조건문에서 EAX와 ESI가 401003으로 같은 값이 된거 보이시나요 :D

그래서 조건이 만족하기 때문에 40103D로 점프하게 됩니다!

(ZF가 1이 된것도 확인하셔야 합니다!)

성공!

쨘! 이렇게 원하는 인식 시킬 수 있게 되었습니다!

 

그럼 GetDriveTypeA가 반환되어야 하는 값은 "401005"가 되겠네요 :D

그럼 다음문제에서 뵙도록 하겠습니다 !

'CTF > CodeEngn.kr' 카테고리의 다른 글

Basic RCE L06  (0) 2020.02.12
Basic RCE L05  (0) 2020.02.10
Basic RCE L04  (0) 2020.02.09
Basic RCE L03  (0) 2020.02.07
Basic RCE L02  (0) 2020.02.03