'과거의 컴퓨터 공부/codeengn-basic'에 해당하는 글 11건

반응형

Challenges : Basic 11


Author : abex


Korean 
OEP를 찾으시오. Ex) 00401000 / Stolenbyte 를 찾으시오. Ex) FF35CA204000E84D000000 
정답인증은 OEP+ Stolenbyte 
Ex ) 00401000FF35CA204000E84D000000 

English 
Find the OEP. Ex) 00401000 / Find the Stolenbyte. Ex) FF35CA204000E84D000000 
The solution should be in this format : OEP + Serial 
Ex ) 00401000FF35CA204000E84D000000 


방금전에 풀었던 level 10 문제랑 굉장히 유사하다 단지 패킹이 UPX로 되어있고, 

stolen byte가  어떤 부분인지 알아낸다는 점이 조금 다르다.

방법은 아까처럼 push AD 부분에서 ESP 부분의 주소에 하드웨어 브레이크를 걸어주고 진입한다. 

그렇게되면 아까도 말햇듯이 OEP 로 점프하는 직전 명령어 부분으로 이동한다. 

OEP 부분에서 잠깐 헤맷는데, OEP 부분에는 stolen byte를 복구해주고나서의 OEP를 적어주어야 한다.

jmp부분으로 넘어간뒤에 ctrl+A를 눌러서 어셈블리를 재분석해주면, 패킹이 해제된 데이터들을 확인할 수 있다.

stolen byte부분은 messagebox 함수의 파라미터 부분으로, 총 파라미터를 4개를 받는데,

여기서는 파라미터 3개가 OEP로 넘어가기 직전에 선언되어있다 

반응형

'과거의 컴퓨터 공부 > codeengn-basic' 카테고리의 다른 글

(codeengn)level10  (0) 2015.03.14
(codeengn)level9  (0) 2015.03.14
(CodeEngn)level8  (0) 2015.03.13
(codengn)level07  (0) 2015.03.13
(codengn)level6  (0) 2015.03.04
,
반응형

Challenges : Basic 10


Author : ArturDents


Korean 
OEP를 구한 후 "등록성공"으로 가는 분기점의 OPCODE를 구하시오. 정답인증은 OEP + OPCODE 
EX) 00400000EB03 

English 
After finding the OEP, find the OPCODE of the branch instruction going to the "goodboy routine" 
The solution should be in this format : OEP + Serial 
EX) 00400000EB03 


해당 파일은 패킹이 되어있다. 맨 처음에 문제를 접햇을때 upx 패킹 방식과 유사한 점을  볼 수 있었다.


 EP 지점에서 PUSH AD 명령을 사용 하고있어서 하드웨어 브레이크를 사용한다면 쉽게 언패킹 할수 있다 생각하여 바로 시행했다.

push AD 명령은 현재 상태에서의 모든 범용레지스터들을 스택에 쌓아놓는 명령어이다. 

upx 와 마찬가지로 esp 주소 부분에 하드웨어 브레이크를 걸고 넘어가면, 압축을 해제하고, 

OEP로 넘어가기 직전의 주소까지 한번에 접근 할 수 있다. 

OEP에 접근하고 나선 문제에서 물어보는것이 분기점의 Opcode 이므로, 해당 문자열을 찾아서,분기하는 부분의 opcode를 찾아 넣어주면 된다.   

반응형

'과거의 컴퓨터 공부 > codeengn-basic' 카테고리의 다른 글

(codeengn)level11  (0) 2015.03.15
(codeengn)level9  (0) 2015.03.14
(CodeEngn)level8  (0) 2015.03.13
(codengn)level07  (0) 2015.03.13
(codengn)level6  (0) 2015.03.04
,
반응형

Challenges : Basic 09


Author : abex


Korean 
StolenByte를 구하시오 
Ex) 75156A0068352040 

English 
Find the StolenByte 
Ex) 75156A0068352040 


stolen byte: 패커가 위치를 이동시킨 코드. 보호된 프로그램의 코드 윗부분(보통EP의 몇개의 명령어임) 

즉 stolen byte란  EP 진입점에서 빼내온 opcode를 찾으라는 문제같다.


패킹 자체는 upx로 되어있어서 OEP 진입점은 굉장히 쉽게 찾을수 있엇다.

그런데 stolen byte로 인해서 OEP지점에서 바로덤프를 떠버리면 실행이 제대로 되지않는다(왜냐하면, OEP부분에서 처리해줘야할 일부를 패킹부분에다가 집어 넣어 주엇기때이다)

즉, 덤프를 뜨기 이전에 stolen byte를 OEP 부분에 추가해주고, 마지막 jmp 부분(UPX는 이부분이 OEP로 점프하는 부분이므로)을 stolen byte를 추가해준 시작부분으로 수정해주고 덤프를떠주면된다.

코드엔진 자체에서 묻는것은 stolen byte 부분이므로 이에 대한 opcode를 이어서 써주면된다. 

반응형

'과거의 컴퓨터 공부 > codeengn-basic' 카테고리의 다른 글

(codeengn)level11  (0) 2015.03.15
(codeengn)level10  (0) 2015.03.14
(CodeEngn)level8  (0) 2015.03.13
(codengn)level07  (0) 2015.03.13
(codengn)level6  (0) 2015.03.04
,
반응형

Challenges : Basic 08


Author : Rekenmachine


Korean 
OEP를 구하시오 
Ex) 00400000 

English 
Find the OEP 
Ex) 00400000 


OEP 구하는 문제인데 UPX로 패킹되어 있어서 엄청나게 간단하게 구해버렷다

UPX 특징이 맨마지막 JMP부분에서 압축을 해제한 실제 데이터 부분으로 jmp를 하기때문에 맨 마지막 점프부분을 따라가면 OEP 부분이 나오게된다 

어떻게 UPX 패킹인지 알앗냐면 , PE View 로 먼저 열어보고 들어갓는데 섹션부분에서 upx패킹되어잇는 프로그램들의 특징을 발견햇다(뭐 원래는 peid를 써서 패킹을 확인하지만)


반응형

'과거의 컴퓨터 공부 > codeengn-basic' 카테고리의 다른 글

(codeengn)level10  (0) 2015.03.14
(codeengn)level9  (0) 2015.03.14
(codengn)level07  (0) 2015.03.13
(codengn)level6  (0) 2015.03.04
(codengn)level5  (0) 2015.03.03
,
반응형

Challenges : Basic 07


Author : abex


Korean 
컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 "어떤것"으로 변경되는가 

English 
Assuming the drive name of C is CodeEngn, what does CodeEngn transform into in the process of the serial construction 


문제에서 어떤 api 함수를 건드려야 할지는 module에 나열된 api 함수들을 보고 감이왔는데,, 어떤식으로 바꿔야 할지 몰라서 헤매다가 불러오는 주소에 대한값을 바꿔줘야 한다는 것을 꺠닫고 바로실행. .

근데 이부분(40225C)는 뒤에 흐름을 살펴보니 원래 이프로그램의 문제인 serial 키를 뽑아내는 부분의 일부이다.

계속해서 뒤를 보면 이부분(40225C)부분 부터 네자리를 Dl(현재 2가 들어있다)을 카운터로 삼아서 암호화를 수행한다. 즉 CodeEngn에서의 Code 부분에대한 암호화(?라기보다는 문자를 두칸씩 이동한다)를 수행한다 



따라서 이문제에서 원하는 답을 추측할 수 있엇고, 원래 이문제 자체의 키값은 아래와 같다 




반응형

'과거의 컴퓨터 공부 > codeengn-basic' 카테고리의 다른 글

(codeengn)level9  (0) 2015.03.14
(CodeEngn)level8  (0) 2015.03.13
(codengn)level6  (0) 2015.03.04
(codengn)level5  (0) 2015.03.03
(codeengn)level4  (0) 2015.03.03
,
반응형

Challenges : Basic 06


Author : Raz0r


Korean 
Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial 
Ex) 00400000PASSWORD 

English 
Unpack, and find the serial. The solution should be in this format : OEP + Serial 
Ex) 00400000PASSWORD 


OEP 를 구해주고  serial 또한 구해줘야 하는 문제다. 문제에서 따로 특별한 점은 찾지 못햇지만,

UPX로 패킹이 되어있고, 언패킹한후 들어가보면 키값을 비교하는 API 부분이 뭉개져있다 .

따라서 접근할때  실패했을때 나타나는 string인 wrong serial! 이라는 string 을 흰트로 하여 거슬로 올라가

해당 API 를 찾을 수 있었다 .

(며칠전에 자다가 풀다가  break 걸어논 부분 부터 다시 이어서한거라  중간에 접근했던 방법이 자세히 기억이 나지를 않는다 ㅡㅡ ;; ) 



이 API자체는 compare하는 api 로 param 1,2를 비교하게되는데,

스택의 원본 serial키 값과 내가 넣은 input 값을 비교하게 된다 해당 api 안으로 들어가보면 ,

암호화 루틴이 나오게된다.  input으로 넣어주면 성공. flag 값은 OEP + Serial 값이다 



반응형

'과거의 컴퓨터 공부 > codeengn-basic' 카테고리의 다른 글

(CodeEngn)level8  (0) 2015.03.13
(codengn)level07  (0) 2015.03.13
(codengn)level5  (0) 2015.03.03
(codeengn)level4  (0) 2015.03.03
(codeengn)level3  (0) 2015.02.27
,
반응형

Challenges : Basic 05


Author : Acid Bytes [CFF]


Korean 
이 프로그램의 등록키는 무엇인가 

English 
The registration key of this program is? 


문제는 굉장히 쉽게 풀었다. UPX 패킹이 되있으므로, 유틸을 사용해서 언팩을 해주던가, 

가내수공업으로 언팩을 해주는 방법 두가지가 있겠다. 

따로 설명은 안하겟고, 맨마지막 jmp 부분에 브레이크를 걸어주고 덤프를 뜬다던가,

UPX 의시작점 부분에서 ESP 의값을 하드웨어 브레이크를 걸어주고 덤프를 떠준다. 

유틸사용이야 말해봐야 입아플거같고,

이프로그램은 키값과 동시에 Name 부분의 란이 따로 존재한다. 

UPX를 언패킹해주면,시리얼 키를 EDX 레지스터에 넣고 CMP하는 구문이있다.

따로 브레이크를 걸필요없이, 노출되어있어서 쉽게 찾을수 있었다.

코드엔진에서 물어보는 키값은 이것(등록키)이지만,

원래의 본프로그램의 경우, 키값을 맞춤과 동시에 그에 맞는 name 값을 input으로 넣어줘야 한다.

serial키 부분보다는 name 부분에 좀더 신경을 쓴 프로그램 같다 

우선, 해당 프로그램이 어떤 루틴을 갖는지 분석을 해보면(UPX를 언패킹 해서 OEP에 접근했을때 부터의 이야기이다)

1)name의 input이 있는지 없는지 에 따라 분기한다

2) serial 값이 있는지 없는지에 따라 또한 분기한다.

3)Register User 부분인데 이 아래에 존재하는 CALL 0x00403B2C에 암호화 루틴이 존재한다

4)name의 input 값이 맞는지 아닌지에따라 성공 실패 분기문이 갈린다.

5)serial 값이 맞는지 아닌지에 따라 성공 실패 분기 문이 갈린다 

주석을 첨가한 약간의 코드를 첨부한다.(name 루틴부분을 분석할까 했는데 귀찮아서 안함 ㅡㅡ;나중에 심심할때 해보겟음 )

 





반응형

'과거의 컴퓨터 공부 > codeengn-basic' 카테고리의 다른 글

(codengn)level07  (0) 2015.03.13
(codengn)level6  (0) 2015.03.04
(codeengn)level4  (0) 2015.03.03
(codeengn)level3  (0) 2015.02.27
(codeengn)level2  (0) 2015.02.27
,
반응형

Challenges : Basic 04


Author : CodeEngn


Korean 
이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가 

English 
This program can detect debuggers. Find out the name of the debugger detecting function the program uses. 


원래 알고 있는 함수이지만, 확실한지 검증해보기 위해서 프로그램을 실행시킨뒤 확인해보았다. 

intermodular call 부분을 확인하다보면, 다음과 같은 API 를 발견할 수 있다


딱히 시간을 쓸 필요는 없는 문제였다. 

반응형

'과거의 컴퓨터 공부 > codeengn-basic' 카테고리의 다른 글

(codengn)level6  (0) 2015.03.04
(codengn)level5  (0) 2015.03.03
(codeengn)level3  (0) 2015.02.27
(codeengn)level2  (0) 2015.02.27
(codeengn)level 1  (0) 2015.02.27
,
반응형

맨처음에 함수 이름물어보길래 그냥 strcmp쓰면되는줄 알았는데 알고보니 밑에 실행파일이있다.

실행파일을 열어보면  crackme 문제와 비슷하게 키값을 인증하는 문제이다.

아마도 흰트를 아래와 같이 준 이유는 해당 함수에 브레이크를 걸라고 저렇게 준거같다.

strcmp 함수에 브레이크를 걸어주고 run 해준뒤, 임의의 값을 넣어준다.

(왜냐하면,strcmp() 함수자체가 , 파라미터 1과 파라미터 2 의값을 비교해서 true false를 판별하기때문에, 내가 임의의 값을 넣어준다면, 원래 비교하는 키값을 얻을수 있기 때문이다) 

따라서 다음과 같은 결과를 얻을 수있다. 키값은 삭제 했다. 

요점은 키값을 물어보는 것이 아니라 함수 이름을 물어보고 있다 

Challenges : Basic 03


Author : Blaster99 [DCD]


Korean 
비주얼베이직에서 스트링 비교함수 이름은? 

English 
What is the name of the Visual Basic function that compares two strings? 




반응형

'과거의 컴퓨터 공부 > codeengn-basic' 카테고리의 다른 글

(codengn)level6  (0) 2015.03.04
(codengn)level5  (0) 2015.03.03
(codeengn)level4  (0) 2015.03.03
(codeengn)level2  (0) 2015.02.27
(codeengn)level 1  (0) 2015.02.27
,
반응형

문제 2번의 경우도 별내용은 없엇고,실행 파일을 실행해봐도 별다른 특징은 찾을수 없엇지만, 

디버거를 붙여보려 했지만, 디버거가 읽어 오지 못하는 것으로 보아, pe헤더에 문제가 있을것으로 예상했다.

따라서, PEView를 이용해서 PE를 보아하니, IMAGE_DOS_HEADER는 보이나, 하위 디렉터리가 없엇다.

pe 에서 장난질쳐논것이 분명하고 PE에서 바이너리를 보아하니, Crackme#1 파일을 가지고 장난질 쳐논것 같다.

키값은 PEview를 키고, Crackme#1문제에서 MessageBox()가 호출하는 문자열 뒷부분에 존재한다. 


Challenges : Basic 02


Author : ArturDents


Korean 
패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오 

English 
The program that verifies the password got messed up and ceases to execute. Find out what the password is. 

반응형

'과거의 컴퓨터 공부 > codeengn-basic' 카테고리의 다른 글

(codengn)level6  (0) 2015.03.04
(codengn)level5  (0) 2015.03.03
(codeengn)level4  (0) 2015.03.03
(codeengn)level3  (0) 2015.02.27
(codeengn)level 1  (0) 2015.02.27
,