본문 바로가기

Wargame

(35)
wargame.kr WTF_Code wargame.kr의 WTF_CODE 문제다. 프로그래밍 언어인데이걸 읽을 수 있냐? 라고 물어본다. Start를 눌러서 들어가보자. 이게 소스코드인지 모르겠단다. 아무것도 안보인단다.source_code.ws를 다운받아보자. 실제로 HxD로 열어보면 이게 도대체 뭐인지 모르겠다.뭔 스페이스바, 탭, 개행만 가득하다.그래서 구글신의 힘을 빌려서 ws 확장자가 무슨 파일을 나타내는지 좀 알아봤는데 이런게 있단다. 4월 1일 만우절날 공개된 난해한 프로그래밍 언어란다..사실 이것만 알면 되는 문제다. http://ideone.com/위 사이트에서 화이트 스페이스 언어를 컴파일 해볼 수 있다. 끝
CodeEngn advance 9 9번문제다. Password를 구해오라고한다. 실행시키고 일단 유저네임, 패스워드 다 아무런값이나 넣고 실행해보면틀렸다고 구문이 출력된다. 이제 이걸 가지고 올리디에서 분석을 진행하자 스트링 검색을 켜보면 이렇게 나온다.저 DonaldDuck은 뭐지?라고 생각할 수 있는데저게 바로 Username이다. 이 비교문에서도 DonaldDuck과 비교하는 걸 알 수 있고이것 말고도 실행시키자마자 왼쪽 아래부분의 헥스값 표시부분을 보면Username은 DonaldDuck이라고 나온다. 중요한건 패스워드를 찾는 것이다. Username에 대한 검사를 마친뒤에디버깅을 계속 진행하다보면 이렇게 내가 입력한 0x457 과원래의 패스워드 값처럼 보이는 0x0088228f 를 비교하는 걸 알 수 있다.원래의 패스워드 값은 ..
CodeEngn advance 8 8번 문제다. 키 값이 "5D88-53B4-52A87D27-1D0D-5B09"일 때 Name을 구하라고한다. 일단 실행시켜서 Name에 아무값이나 넣고Key 값에 "5D88-53B4-52A87D27-1D0D-5B09"를 넣고 Check it!을 해보자 더 많이 치란다.. 저번에 그 문제처럼그래서 올리디로 던져서 분석했다 일단 스트링 검색으로 살펴보면 Well Done! 이 보인다.저 곳으로 이동해보자 이동해서 위로 올라가면서 살펴보면 이렇게 저번처럼글자수 비교루틴이 있다. 저 글자수 비교 부분의 수를 좀 패치해주자 2글자라고 햇으니 2와 비교하게끔 패치했다.이제 최소 2글자를 입력해야 프로그램이 정상적으로 동작할 것이다. 다음은 키 값을 만들어내는 루틴인데저번이랑 그렇게 다르지않다.하나 다르다면 이번에는..
CodeEngn advance 5 5번 문제다. 패스워드를 찾는 문제다. 실행시키면 이런게 뜬다. 여기에 입력하고 Ok 해보자 1111을 입력하고 Ok를 눌러보겠다. 이런 창이 뜬다. 이 분이 만드신 것 같다. Mal Cracker!!! 라는걸 보니 저건 틀린거다.이제 올리디로 던져서 분석을 해보자 스트링 검색을 좀 하다보면 아까 떴떤 메시지박스 안의 문자열과Mal Cracker!!! 라는게 보인다. 저쪽으로 분기해서 살펴보자. 위아래로 조금 훑다보면 __vbaStrCmp가 나온다. 이건 비주얼베이직으로 만들어진 프로그램인데__vbaStrCmp는 비주얼베이직 안에서의 문자열비교 함수다.위에 Arg2 Arg1 이 있는걸 보아하니 둘 중에 하나가 입력한 문자열,하나는 본래 패스워드가 저장되서 그 둘을 비교할 것 같다. 맞다. 결론적으로는 A..
CodeEngn basic 20 20번 문제다. CodeEngn! 이 출력되도록 할 때crackme3.key 파일의 값이 무엇이 되야하는가? 가 문제이다. 일단 올리디에 던져보면 crackme3.key 파일이 필요한 것과그 파일에서 18의 크기만큼을 가져온다는 것을 알 수 있다. 일단 crackme3.key 파일을 만들어주고 진행하자. 복호화? 음.. 여튼 그런 루틴이다.간단하게 설명하면 bl에 0x41('A')값을 저장하고bl이 0x4F가 될 때까지 bl의 값을 하나씩 늘려가면서 가져온 18개의 파일의 값과xor 연산을 진행하고 그 값을 저장한다. 123456789num_arr = [67,111,100,101,69,110,103,110, 33, 32, 32, 32, 32, 32, 32, 32, 32, 32] bl = 65 for i ..
CodeEngn basic 18 18번 문제다. 이것도 Name이 CodeEngn일때, Serial을 찾는 문제다. 일단 실행시켜서 CodeEngn, 1111을 입력해보았다. 시리얼이 틀리댄다. 당연히 틀리지. 올리디에 던져서 스트링검색하면 이렇게 나온다.저기서 G0od 라는 스트링이 있는 곳으로 점프해보자. 한눈에봐도 lstrcmpiA 에서 내가 입력한 시리얼하고 비교하겠구나.. 라는 촉이 온다바로 브레이크포인트 설정하고 실행을 해보자. 역시나.. CodeEngn에 대한 시리얼과 내가 입력한 시리얼을 비교한다 입력해보자. 성공. 끝.
CodeEngn basic 17 17번 문제다. 키 값이 "BEDA-2F56-BC4F4368-8A71-870B"일 때Name을 찾으라고한다. 일단 실행시켜서 Name에 아무값이나 넣어주고Key값에 "BEDA-2F56-BC4F4368-8A71-870B"을 넣어주고 Check it! 더 입력하란다..? 분명 Name 1개의 문자나 숫자라했는데좀 이상하다 스트링 검색을 했더니 Well Done!이 보인다.Well Done! 부분으로 찾아가보자. 0045BB24부분을 보면 CMP EAX,3 이라고해서문자가 3개인지 비교한다. 좀 더 밑으로 내려가면 1E랑 비교해서문자의 최소 수, 최대 수를 비교한다. 그럼 최소 수를 바꿔주면 1개의 입력이 가능해진다. CMP EAX,1 로 패치해주고 실행시켜보자. 똑같이 값을 넣고 Check it!을 해봤지만..
CodeEngn basic 16 16번 문제다. 이것도 CodeEngn 일 때패스워드를 구하면 된다. 실행시키면 이렇게 이름을 입력하라고 먼저 나온다. 이름하고 패워스드를 입력했다.이름은 CodeEngn, 패스워드는 대충 1111이렇게 하고 인증을 시도해보았다. 당연히 틀린 패스워드랜다. 이제 올리디에 던져보자 중간에 Good Job!이 보인다. 저쪽으로 가면분명 함수내에서 비교하는 부분이 있겠지 실제로 있었다.CMP EAX, [EBP-3C]이 부분이 입력받은 값과 원 패스워드를 비교하는 부분이다.어느 함수 안에서 CodeEngn을 갖고 패스워드를 만들어 냈을것이다. 457과 E4C60D97을 비교한다. 457은 내가 입력한 1111이다. E4C60D97은 변환해보니 십진수로3838184855란다. 이게 패스워드겠지.. 맞다! 그게 패..