2015년 4월 19일 일요일

CodeEngn Basic RCE L04

4번 문제입니다.
디버거 프로그램을 탐지한다고 합니다.
함수를 찾는 문제인데요
다운을 받아서 실행을 시켜보겠습니다.


정상
정상
이 무한으로 반복 출력됩니다.

이번엔 올리디버그로 열어서 실행시켜보겠습니다.





디버깅 프로그램으로 열었다는것이 감지되어 디버깅 당함이
출력되고있습니다.

분석해보겠습니다.


한줄씩 실행 시키다보면
00408454에서  0040100F를 불러옵니다.


점프를 해서 내려가서 소스를 보겠습니다.






검사하고 출력, 검사하고 출력이 무한반복됩니다.
검사하는 함수가 뭔지 찾으실거라 생각합니다.

2015년 4월 14일 화요일

CodeEngn Basic RCE L03


3번문제를 풀어보겠습니다.
visual basic에서읲스트링 비교함수랍니다. 찾아서 바로 쓸수있지만
파일을 확인해보겠습니다.


파일을 실행하면 위와 같이 메세지박스가 나옵니다.
그 후 확인을 눌러주면


이와 같은 프로그램이 나옵니다.


값을 무작위로 입력해서 등록을 누르면
틀렷다고 나옵니다.
입력한 값과 Key 값을 비교하여 결과를 나타내는 프로그램인거같습니다.


올리디버그로 열어보았씁니다.

마우스 오른쪽 클릭->Search For -> All intermodular calls로
함수를 살펴봅시다.


함수 목록입니다.


실패했다는 메세지박스가 나왔으니
메세지박스 함수를 눌러서 살펴봅시다.


원하던 인증 부분을 찾았습니다.


004029DC에 브레이크 포인트를 걸어줍니다.


그 후 실행을 시켜 "hihi"를 넣어보겠습니다.


EBP - 58에 입력값 "hihi"가 들어갑니다.

그 후 저기 가려진 유니코드값과 비교하여 일치할시 성공 메세지박스,
불일치할시 실패 메세지박스가 나타납니다.



문제의 답인 문자열 비교는 굳이 언급하지 않겠습니다.
답만 적지 않고 프로그램을 살펴보았습니다.

2015년 4월 13일 월요일

CodeEngn Basic RCE L02


오늘은 2번 문제를 풀어보겠습니다.
실행파일이 손상되어 실행이 안된답니다.


다운을 받아서 실행을 해 보았더니
위와 같이 작동이 되지 않습니다.


마찬가지로 OllyDbg에서도 열리지 않습니다.





위 프로그램은 헥스에디터입니다.
헥스값을 확인해 보겠습니다.


문제 파일의 헤더 입니다. 좀 문제가 있어보이긴 하네요.
리틀 엔디안 방식이네요
복구하긴 힘들어 보입니다.

아래로 더 내려 봅시다.


실패문구, 성공문구 같습니다.
수상한 문자열이 있네요 ㅎ


풀이는 여기 까지입니다!

2015년 4월 12일 일요일

CodeEngn Basic RCE L01

오늘부터 CodeEngn의 리버싱 문제인 Basic RCE를 풀어보겠습니다.
정답은 적지 않고 풀이 방법을 적겠습니다.

1번 문제입니다
HDD를 CD-Rom으로 인식하기 위한 GetDriveTypeA의 리턴값을 찾는 문제입니다.
GetDriveType API를 검색해보면 답을 쉽게 얻을 수 있지만
내부를 확인해 보겠습니다.


처음 프로그램을 키면 위와 같이 나옵니다.


CD롬이 아니라고 뜨는군요.
OllyDbg로 열어보겠습니다.


프로그램이 매우 간단합니다.

소스를 분석해보자면
MessageBox로 처음 봤던 박스를 보여줍니다.
GetDriveType을 사용했기에 EAX에 드라이브값에 따른 숫자가 들어갑니다.

그후
INC ESI   //  ESI+1
DEC EAX //  EAX-1
JMP 00401021은 바로 아래 구문으로 이동하는것이므로 무시합니다.
INC ESI  //  ESI+1
INC ESI  //  ESI+1
DEC EAX  //  EAX-1
CMP EAX, ESI

CMP 구문입니다. 
CMP 구문은 두 인자를 비교한 후 값이 같으면 ZF(제로플래그)를 1로 바꾸어줍니다
(첫인자 - 두번째 = 0 이면 값이 ZERO이므로 ZERO Flag == 1
0이 아니면 값이 ZERO가 아니므로 ZERO Flag == 0)

위 구문은 EAX와 ESI의 값을 비교합니다.

JE 00401030 

JE는 점프 구문으로 Jump If Equal의 약자로 ZF가 0
값이 같을때 실행됩니다.

00401030은 성공 구문이므로

EAX와 ESI가 값이 같다면 성공하는 것입니다.

위 계산식을 정리하면
EAX에 값을 넣고
DEC EAX 2번, INC ESI두번을 하고 값을 비교합니다.

EAX(구하려는값)-2=INC(0)+3

이란 식이 만들어집니다.

답은 따로 적지않겟습니다.

2015년 3월 31일 화요일

Reversing-OllyDbg 단축키

▲Ollydbg

위 프로그램은 Ollydbg란 프로그램으로 리버싱을 공부할 때 주로 사용하는
디버깅 프로그램입니다.
처음 올리디버거를 사용 할 시에는 UI도 생소하고 사용법과 단축키를 몰라서 고생을 하실겁니다.
처음 헤메시는 분들을 위해 단축키를 정리해두었습니다.

실행 관련 단축키
Ctrl+F2 : Restart - 다시 처음부터 디버깅 시작(디버깅 중인 프로세스를 종료 후 재실행)
F7 : Step Into - 하나의 OP code 실행(CALL을 만날시, 그 함수 내부로 진입)
F8 : Step Over - 하나의 OP code 실행(CALL을 만나도 내부로 들어가지않고 함수 실행)
Ctrl+F9 : Execute till Return - 함수 코드에서 RETN까지 실행 (함수 탈출)
F9 : Run - 실행하지만 BP(Break Point)가 있을시 멈춤

Code Window 자주 사용하는 단축키
Ctrl+G : Go to - 원하는 주소 찾기(Ctrl+F 기능, 찾아만 주고 실행x)
' ; ' : Comment - Comment 추가 하기
' : ' : Label - Label 추가 하기
F2 : BreakPoint - BP 걸기,해제하기
' * ' : Show Current EIP - 현재 EIP 나타내기

' ; ' 와 ' : ' 의 차이
' ; ' 은 주소에 코멘트만 달아서 보는 기능을 하지만
' : ' 은 주소에 레이블(라벨)을 붙여 Ollydbg 상에서 주소값이 레이블로 표현됩니다.
    ex) 00455BCA 에 Start Point라는 레이블을 붙일시
        JMP 00455BCA -> JMP <Start Point> 이렇게 표현이 됩니다.