code engn basic 2번 문제다.

패스워드를 분석하란다. 다운부터 받아보자.


실행시켜봤더니 호환이 안되는지 실패...

올리디버거로 열어봤다.

흠..역시나 실패...

찾아보니 Hex Editor라는 파일의 데이타를 헥사코드 형태로 보여주고 그 코드를 편집할 수 있는 프로그램이 있단다. 파일 종류에 관계없이 열고 수정이 가능하다는 걸로봐서 이걸 통해 열면 파일이 열릴 것 같다.

대충 보니 16진수랑 ascii로 표시되는데 ascii부분보면 느낌이 딱 오는 부분이 있다.

이쯤이면 정답은 대충 짐작했을 거라고 생각한다. 그냥 hex editor 사용할 줄 아냐 물어보는 문제였던

것 같다.



'Wargame > CodeEngn' 카테고리의 다른 글

code engn basic 6번  (0) 2018.01.28
code engn basic 5번  (0) 2018.01.28
code engn basic 4번  (0) 2018.01.28
code engn basic 3번  (0) 2018.01.28
code Engn Basic 1번  (0) 2018.01.27
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

홈페이지에 있는 파일을 다운받아 실행해 보았다.

일단 실행 해보니 이런식으로 화면이 뜬다.

흠.. HDD를 CD-ROM 처럼 인식하도록 하라는 문제 인 것 같다.

ollydbg를 사용해서 리버싱을 시작해보자.


아직 1번이고 비교적 간단한 문제여서 자세한 설명은 생략하고 해결방법만 간단히 소개하겠다.

해결 방법은 총 3가지가 있다.

첫번째 방법

getDriveTypeA 함수가 호출되면 리턴값으로 3이 발생해 eax에 3값이 들어간다.
이 때 3은 hdd를 의미하며 이 값을 cd-rom을 의미하는 숫자로 변경하면 된다.  

두번째 방법
CMP  EAX,ESI 통해 0값이 나와 점프를 시켜 정상 출력결과를 얻는다.

세번째 방법
JE를 JMP로 바꾸게되면 조건에 상관없이 점프되어 정상 출력결과를 얻게된다.

wargame.kr 문제를 풀기위해 기초지식을 쌓을겸 풀어봤고 상당히 간단한 문제라 포스팅을 자세히는 하지 않았다.

이후 조금 더 어려운 난이도의 문제가 나오게되면 상세히 포스팅 해보도록 하겠다.



'Wargame > CodeEngn' 카테고리의 다른 글

code engn basic 6번  (0) 2018.01.28
code engn basic 5번  (0) 2018.01.28
code engn basic 4번  (0) 2018.01.28
code engn basic 3번  (0) 2018.01.28
code engn basic 2번  (0) 2018.01.27
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

LOB(FC3) dark_eyes -> hell_fire

2018. 1. 27. 16:08

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

LOB(FC3) gate -> iron_golem

2018. 1. 27. 16:05

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

root-me File upload - ZIP

2018. 1. 27. 14:15

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

root-me PHP Serialization

2018. 1. 22. 15:18

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

xcz.kr PROB:21번

Wargame/xcz.kr 2018. 1. 21. 23:43

xcz.kr PROB:21번 문제다.

두번째 웹 문제로 점수는 300 point.

소스를 확인해보니 상당히 꼴보기가 싫다. 자바 스크립트 난독화는 몇번 봤는데 php 난독화 같은 경우는 처음본다. 복호화가 필요할 것 같아 찾아봤다.

일단 디코딩은 됐는데 상당히 지저분하다. 저걸 보기 좋게 바꿔야 하는데 툴 같은걸 찾다 딱히 못찾아서

결국 수동으로.... 하.. 


토할 뻔했다.. 하... 이게뭐라고.. 별로 중요한 것도 아닌데 ㅠㅠㅠ 이제 대충 보기좋게 고쳐놨으니 이제 해석을 해보자.

우선 처음에 키 값을 받으면 explode함수를 통해 -를 기준으로 5개의 배열로 나뉘게 된다.
아마 ????-????-????-????-????

이때 이 값들이 preg_match함수를 통해 에러가 안나려면 모두 대문자,소문자 영문이거나 숫자로 이루어져야 한다.

이제 다음 if문들의 조건을 충족시켜 KEY값을 출력하면 될 것 같다.

if(is_numeric(substr($a[0],0,2))&&!is_numeric(substr($a[0],4,1))&&h($a[0])>312&&h($a[0])<333&&!is_numeric(substr($a[1],0,1))&& is_numeric(substr($a[1],3,2)))

먼저 첫 번째 조건문인데 첫번째 배열에서 1,2번째 자리는 숫자여야하고 5번째 자리는 숫자이면 안된다. 그다음 첫번째 배열의 각각의 문자의 아스키 코드값들의 총합이 312가 넘고 333보단 작아야 한다. 
그리고 두번쨰 배열의 첫번째 문자는 숫자이면 안되고 4,5번째 문자는 숫자여야 한다.

첫 번쨰 조건을 통과하려면 대충 122Fa - a??32 - ????? - ????? - ????? 이런 상태인 것 같다.

다음으로 두번째 조건문인데 해석해보면

if(h($a[1])>300&&h[$a[1])<326&&!is_numeric($a[2],0,1))$is_numeric(substr($a[2],1,1))&&h($a[2])>349&&h($a[2])<407){

두번째 배열의 아스키 총합은 300보다크고 326 보다 작다.  세번째 배열의 첫번째 글자는 숫자이면 안되고 두번째 글자는 숫자여야하며 세번째 배열의 아스키 총합은 349보다크고 407보다 작다.  

198
두 번쨰 조건을 통과하려면 대충 122Fa - a2A32 - a33dA - ????? - ????? 이런 상태인 것 같다.

다음으로 세번째 조건문인데 해석해보면

if(!is_numeric(substr($a[3],0,2))&&is_numeric(substr($a[3],2,3))&&h($a[3])>357&&h($a[3]<359)

네번째 배열의 1,2번째 글자는 숫자이면 안되고 3,4,5번째 글자는 숫자여야 한다. 그리고 아스키 총합은 357보다크고 359보다 작다. 즉 358이어야 한다.

122Fa - a2A32 - 3a3dA - aa992 - ????? 

드디어 마지막 조건이다..

if(round((h($a[0])+h($a[1])+h($a[2])+h($a[3])))/4)==h($a[4]))

1~4번째 배열의 총합을 4로 나눈후 반올림한 값과 네번째 배열의 총합이 같으면 된다. 337만들자.

122Fa(316) - a2A32(313) - a33dA(364) - aa992(358) - 22dW3

그대로 입력해보자.

성공!

귀찮아서 그렇지 문제자체의 난이도는 어렵지 않은 것 같다.


'Wargame > xcz.kr' 카테고리의 다른 글

xcz.kr PROB:18번  (0) 2018.01.21
xcz.kr PROB:17번  (0) 2018.01.21
xcz.kr PROB:13번  (0) 2018.01.21
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

xcz.kr PROB:18번

Wargame/xcz.kr 2018. 1. 21. 23:43

xcz.kr PROB:18번 문제다.

위 사이트의 첫 번째 웹 문제로 점수는 150point이다.

들어가보면 다음과 같은 화면이 나타나는데 첫 웹 문제인 만큼 Basic이라고 나타난다.

소스를 확인해보니 변수에 대해 간단한 난독화가 이루어져 있다. 양이 별로 없기 때문에 Ctrl + F로 찾은 후 직접 치환을 했다.


basic 답게 소스는 매우 간단하다. get, post, cookie 세가지에 대해 모두 값을 받고 그 중 test함수에 get과 cookie의 전달된 값을 더한 것이나 post값 중 하나를 넣었을 때 둘중하나만 조건에 성립하면 키가 배출된다.
test()함수는 입력한 값에서 -를 추가하고 한바이트씩 아스키코드값으로 변환한다.  


다음과 같이 파이썬코드를 작성했다. 첫번째 조건문을 통과시키기위해 get에는 103 , 105, 118, 101에 해당하는 give라는 값을 주고 나머지 부분은 cookie값에 password라고 넣어 줬다. post값은 필요없으므로 아무값이나 줬다. 다음과 같이 실행하면 키값이 나오게된다.

성공! basic 문제라 그런지 너무 간단했다.


'Wargame > xcz.kr' 카테고리의 다른 글

xcz.kr PROB:21번  (0) 2018.01.21
xcz.kr PROB:17번  (0) 2018.01.21
xcz.kr PROB:13번  (0) 2018.01.21
블로그 이미지

JeonYoungSin

메모 기록용 공간

,