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> 이렇게 표현이 됩니다.

2013년 12월 27일 금요일

webhacking.kr - 15번(50점)


이번엔 50점짜리 문제인 15번이다.

점수가 짠만큼 제일 쉬운거 같다.

15번 문제를 클릭해서 들어가면


Access_Denied라는 경고창이 나를 반기고

이전페이지로 돌아간다.

갑자기 일어난 상황에 당황하거나 로그인이 되있나 확인도해보지만

모든건 정상적이고 계속 같은 문구창만 뜬다.

이문제는 Javascript 사용을 하지 않는것이 핵심이다.


크롬의 설정에 들어가

고급설정표시를 누른후
찾아보면 위와 같은 창이있다. 
콘텐츠 설정을 누르고


위와 같이 자바스크립트에서 실행 허용 안함을 체크하고
확인을하고 다시 들어가보면 키가 나올것이다.


15번 문제의 소스이다.

스크립트가 실행되어있으면 
바로 Access_Denied가 출력되고
history.go(-1)에 의해 이전페이지로 돌아가게된다.

그래서 스크립트가 실행되어있을땐 키를 볼수없던것이다.

webhacking.kr - 14번(100점)

100점짜리문제인 14번이다.

매우 심플하게 인풋태그뿐이다.

우선 소스를 살펴보자.

사진에는 안나와 잇지만
위에 <script>로 시작하고 </script>로끝난다.
그러므로 이건 javascript를 사용한것이다.

내용을 분석하면 ul에 현재주소를 넣고
.kr의 위치를 찾는것이다.

IndexOf 함수는 매개변수와 일치하는 문자열의 위치를 반환하는 함수이다.




크롬의 콘솔창은 js를 지원하므로 이곳에 위 소스를 넣으면
510이라는 값이나온다.
즉 ul=510인 것이다.


마지막줄을 보면 
ul과 인풋태그에 넣은값이 같으면 키를 출력해준다.
하지만 내 컴퓨터에서만 그런건진 모르겟지만
510아닌 값을 넣을떈
Wrong이 맞게 출렷되는데
510을 넣으면 alert문이 제대로 실행되지않는다.
그러므로 안에잇는 내용대로
ul과 인풋태그에 넣은 값을 곱한값이 키값이다
즉 510*510 =? 이 키이다.