레나의 튜토리얼! 문제를 꼼꼼히 풀어보겠다.!

기타 다른 리버싱문제를 풀고있었지만, 뭔가 조금 부족한 느낌이 들어서 Lena's Tutorial을 먼저 완파하면서 공부를 더해야겠다는 생각이 들었다.

Lena 151 의 첫번째 문제이다. :)



(첫번째 문제)


실행을 하면 아래와 같이 뭔가 문구가 뜬다.




(실행 화면)



새로운 라이센스를 사라고 한다.
여기서 OK 버튼을 누르면 프로그램이 종료된다...

올리디버거를 이용해 프로그램을 확인해 보겠다.



(올리디버거 실행)


시작하자마자 main 함수에서 딱 멈추어 주었다.

실행 코드 중 눈에 띄는 API가 있었다.



(CreateFileA)



기본적으로 CreateFileA API는 파일을 생성하는 함수이다.
그런데 Mode를 보니 OPEN_EXISTING 이 설정되어있다.
이 것이 설정되어있으면 기존에 파일을 찾아서 열고 만약 이 파일이 없다면 에러를 리턴한다.

아.! 일단 여기서 걸렸구나. 계속 한번 진행해본다.


(잘못된 길)



호출 후 EAX를 -1 과 비교한다. 이 때 파일이 없으면 EAX가 FFFFFFFF 로 리턴되는 것을 확인했다.
즉 이 값은 -1이기에 점프하지 않고 바로 문제의 길로 들어선 것이다.

먼저 Keyfiled.dat 파일을 만들자!



(파이썬 이용)



파이썬을 이용해 Keyfile.dat 파일을 생성해주었다.
내용은 그냥 아무값 90을 넣어주었다. 100개정도 (이따 확인하기 위하여)

(같은 경로)



프로그램과 같은 경로로 옮겨준다.

자 이제 다시 실행해본다.



(올바른 점프)



문제의 길로 들어서지 않고 올바른 길로 점프하였다.

그다음은?
ReadFile이 보인다. 해당 파일을 읽어서 뭐 하려나보다.!

확인해본다!



(비교중)



확인해보니 반복하면서 확인하고 있었다.
AL이 Null 이면 종료를 하고 47이면 esi를 하나 올리고 그렇지 않은 경우 ebx를 하나씩 늘리면서 반복한다.

그런데 비교하는 AL은  바로...!



(우리의 파일)



우리가 90을 입력했던 데이터이다.

일단 이 내용과 비교하는 것을 확인했다.
그리고 0x47과 비교하는 문장



(0x47비교)



데이터 한바이트씩 읽어서 비교를 하는데 0x47이면 esi를 하나씩 증가시킨다. 그래서 맨 마지막에 8과 비교해서 크면 올바른 길로 들어선다.

즉! 0x47을 8개 이상! 넣어줘본다.



(넉넉히 9개)



9개를 넣어주었다.

그리고 다시 실행해주니



(축하메세지)



축하메세지를 전달해주는 모습을 볼 수 있었다.

문제 해결!


(문제 해결)

'WarGame > 500 Project' 카테고리의 다른 글

(44/500) - pwnable.kr - collision  (0) 2017.07.05
(43/500) - pwnable.kr - fd  (0) 2017.07.05
(41/500) Wargame.kr - Crypto Crackme Basic  (0) 2017.06.28
(40/500) Wargame.kr - EASY_CrackMe  (0) 2017.06.27
(39/500) Suninatas - Binary(11)  (0) 2017.06.27


Wargame.kr 사이트에서 Crackme 기초 문제이다!

사실 쉬운문제인데 너무 돌아간 느낌이 있다...

간단한 리버싱 문제라길래 냉큼 받아 풀었다.



(문제 화면)



프로그램을 실행하면 다음과 같이 이름과 패스워드를 물어본다.



(프로그램 실행 화면)



프로그램은 C# 으로 개발되어있다. (그래서 이 문제를 냉큼 받아서 했다.!)
(왜냐하면 나에게는 dotpeek 이 있기 때문에!!!!)
(바로 디컴파일 하니 보기 좋은 소스코드가 나왔다.)

메인 함수부터 보자!



(메인함수)


이름은 BluSH4G 로 입력해야하고...
그다음 입력이 조금 처리가 되있다. s1에는 입력받은 문자와 이름을 myEncrypt 함수에 넣어 처리를 하고 그 값과 getps 함수의 결과값과 비교한다. 

getps 함수는 어떤 url에 name 값을 전달하면 특정 문자열이 온다.
그 값은 sNfpY/vo6zye3TKPpH6Ekmtx26qLLriF/RpV4Fsyho/YkA2kvF9ybHLWjgGoV5EE 였다.!

문제는 암호화 함수 부분!


(암호화 함수 부분)



뭘하는지는 냉큼 이해 되었다.
암호모드 ECB모드로 초기벡터와 키는 name에 어떤 처리를 한 값을 주어 DES로 암호화 한다.

그러면 어떤 처리를?..


(mPadding 함수)


이 함수에서 이름을 처리해서 그 값을 초기벡터와 키값으로 사용한다.

즉 우리는 이 값을 알아야한다. 이름을 BluSH4G 로 입력하라고 했고 길이는 7이므로 하나의 * 문자가 붙을것이다. 결과값은 BluSH4G* 이 될것이다.

그렇다면 

BluSH4G*을 초기벡터, 키 값으로 사용하여 전달받은 문자열을 DES 복호화 하면된다.



(복호화 과정)


여기서 조금 엉뚱땅 팠는데..
암호화 함수에서 마지막에 Base64 인코딩을보고 나혼자 C# 컴파일러 만지면서 디코딩과정부터 만지고 있었다. 생각해보면 DES 암호화 후 Base64로 표현하여 출력하는게 일반적이어서 일반적인 사이트에서 기본적으로 제공해주고 있었다.

나는 고로 파란 버튼을 클릭하기만 하면 됬었다.


(문제 해결)

'WarGame > 500 Project' 카테고리의 다른 글

(43/500) - pwnable.kr - fd  (0) 2017.07.05
(42/500) - Lena's Tutorial 01  (0) 2017.07.05
(40/500) Wargame.kr - EASY_CrackMe  (0) 2017.06.27
(39/500) Suninatas - Binary(11)  (0) 2017.06.27
(38/500) Suninatas - Binary(10)  (0) 2017.06.27


오..! 그동안 손 못대던 리버싱 문제를 하나씩 손대고 있다! (기분이 좋다)

이번에는 Wargame.kr 의 리버싱 문제를 풀었다.
여기도 웹문제만 많이 풀었던 사이트였는데! ㅎㅎ

EASY_CrackMe 문제다!



(문제)



문제 프로그램을 받으면 키를 입력하라고 나온다.




(프로그램 실행)



역시! 여기에 알맞은 키를 찾는 것이다.

이 문제는 좀 오래걸렸다... 그것도 마지막에 운이 좋아서?...

일단 코드를 큰그림으로 보면 처음에 BL에 1을 넣어준다.



(BL에 1 대입)



자.. 이제부터 이 EBX 레지스터의 1을 지키는 험난한 과정이 시작된다.

처음에는 너무 이해가 안가서 코드 한줄한줄 분석하면서 흐름을 손으로 직접 그려보았다.



(흐름도)



이렇게 흐름도를 손으로 그려보니 내가 어떤 일을 해야하는 지 이해가 간다.
EBX 레지스터를 보호하는 여정이라는 사실도 그려보고 이해했다.

그런데 중간에 이해가 안가는 함수가 있었다... 

005024A9 함수인데... 바로 이녀석을 따라들어가면 또 거기서 함수를 호출하고
또 그안에서 함수를 호출한다.
분석이 너무 안되던 참에..

그 동안 알아낸 사실들을 정리해보았다.

입력값이 13글자 이상이여야한다. 
_my_b , birth 요 문자들이 들어가야한다.

그러고 보니 _my_birth  앞에 4글자 생일을 넣으면 14자리인거다...
혹시나 해서 생일을 어떤 연산을 하나 내 생을 집어넣고 돌려보았다. 




(내 생일)



005024A9 함수가 호출된 후 리턴된 EAX값을 보니 3FA....
내가 내 생일 16진수로 표현한 3FA를 아이디로 많이 사용해서 단번에 알아보았다...
16진수 표현이구나!



(16진수 표현)



그렇다면 리턴값 eax가 45A 여야한다는 뜻은
45A -> 1114(10) 으로 집어넣어야한다는 뜻...



(45A 비교)



즉 이 문제를 만든 사람 생일이 11월 14일인가보다..

이렇게 문자열을 조합하고 프로그램에 입력해보니!




(잘했다!)



잘했다고 인증키를 알려주었다.




(문제 해결!)


'WarGame > 500 Project' 카테고리의 다른 글

(42/500) - Lena's Tutorial 01  (0) 2017.07.05
(41/500) Wargame.kr - Crypto Crackme Basic  (0) 2017.06.28
(39/500) Suninatas - Binary(11)  (0) 2017.06.27
(38/500) Suninatas - Binary(10)  (0) 2017.06.27
(37/500) Suninatas - Binary(9)  (0) 2017.06.27


* 서니나타스의 바이너리문제 11번이다!

프로그램을 실행하면 아래와 같다.




(프로그램 실행)



올리디버거를 이용하여 문제를 해결하였다.
참조된 문자열을 먼저 확인하였다.



(문자열)



내가 찾고싶은 인증키 문자열이 있는 쪽의 함수를 찾아야하므로 Authkey 문자열이 존재하는 위치로 달려가서 그 해당 함수에 BP를 설치한다.



(BP 설치)



그 후 달린다!




(입력)



입력은 알아보기 쉽게 D 여러개 입력!

그리고 아래로 쭈욱 가니 뭔가의 문자열들이 있고 이 문자열들 하나씩 함수에 들어간다.
같은 함수이다.


(뭔가 작업하는 부분)


일단은 큰그림을 보기위해 넘어간다.!
이러한 문자열들이 하나씩 함수에 들어가구나 정도만 파악하였다.

아래를 보니 내가 보고싶은 문자열 Congratulation 문자열 바로 전에 분기문이 존재하고 
그 분기문 위에 어떤 함수를 호출하고 있는게 보인다.



(분기문)



아마 이 함수에서 결정이 나는 듯 하다.
확인!


(비교 과정)


들어가보니 뭔가를 비교하고 있다.

EAX와 EDX를 비교하고 있는데 이 두 값을 확인해봐야겠다.



(레지스터 확인)



아하.! 내가 입력한 값과 어떤 문자열을 비교하고 있다.

위의 함수들을 확인해본 결과 해당 문자열들을 이리저리 배치한 문자열이었다.

이 문자열을 입력값으로 입력하여 실행하였더니?




(인증키 등장)



인증키가 등장하였다.

이 값을 인증값에 넣었더니 문제 해결!



(문제 해결!)



서니나타스의 10번 바이너리 문제이다!

프로그램을 실행시켜보면 아래 같이 실행된다.



(프로그램 실행)



뭔가 값을 입력하는데 이것 또 flag를 찾아서 입력하는 것 같다.






(프로그램 실행)



흐음.. 근데 풀면서 몰랐던 거인데
올리디버거로 실행이 안된다..



(올리디버거 실행)



게다가 attach 도 안된다..?!




(attach 실패)



이게 뭐람 
하고 키 문자열 찾는거니까 헥스에디터로 열어봤다.
암.복호화 같은 과정이 없다면 문자열이 그대로 있지 않을까 싶어서 확인해보았다.



(헥스에디터로 확인)



그런데?...



(뭔가 발견)



Authkey : ~~~ 라고 나와있다.
?... 이건 또 뭐람...

혹시나 하는 마음으로 입력해보았다.



(인증성공)



얼떨결에 뒷걸음 치다 풀었다. (???... 이상함이다.)

인증 문자열에 PEID를 쓸줄 아냐고 도발하길래
(사실 이때 몰랐다.)

검색을 하여 사용해봤다.



(PEID)



PEID로 문제 파일을 열어보았다.




(PEID로 열어봄)



음 그런그런 파일 내용이구만
그런데.. 다른 PE 뷰어랑 좀 다른 느낌이 들었다. 개발된 언어도 알려주고있다...

C# ?

C#은 뭐지? -> 인터넷검색... (모르는게 많다.. ㅜ)

C#이 뭔지 검색해서 읽고 있던 중 눈에 띄는 걸 발견했다.



(C#)



으흐음 .. 자바 같이 가상머신 위에서 돌아간다라는 말이다.
그래서 올리디버거에서 실행이 안되었던건가?..

나는 이 파일을 분석해보고 싶어 올리디버거로 C# .net 프로그램을 여는 방법을 검색해 보았다.
그런데 C# 프로그램은 올리디버거로 열수 없고... 다만 C#은 좋은 디컴파일러가 많기 때문에 구지 디버거로 분석할 이유가 없다는 글을 보았다.

추천 받은 디컴파일러는 dotpeek 이었다. 다운 받고 열어보니..
세상에 이런일이



(dotpeek)



누가봐도 읽을 수 있는 코드로 나왔다...
(신기하다...)

이렇게 문제를 해결하였다.


'WarGame > 500 Project' 카테고리의 다른 글

(40/500) Wargame.kr - EASY_CrackMe  (0) 2017.06.27
(39/500) Suninatas - Binary(11)  (0) 2017.06.27
(37/500) Suninatas - Binary(9)  (0) 2017.06.27
(36/500) Lord of the BOF - death_knight  (0) 2017.06.27
(35/500) Lord of the BOF - xavius  (0) 2017.06.25

+ Recent posts