12번 문제입니다. 먼저 실행해보도록 하겠습니다.



위와 같이 MessageBox가 나오고 key를 적는 박스가 있습니다. 여기에 어떤 입력을 해도 반응이 없습니다.



ollydbg로 분석하면 ESI에 403000에 있는 긴 아스키 문자를 넣고 while문(분기문)으로 ESI가 0이 되면 분기문은 끝이납니다. 만약 아닐시엔 ESI에 4를 더합니다. 

즉, 무한루프에서 나오지 못한다는 겁니다.


그리고 40107D를 보면 EAX와 7A2896BF를 비교해서 congratulation이 나오는 곳으로 jmp합니다. 7A2896BF를 10진수로 변환하면 2049480383 입니다. 이게 우리가 찾는 key입니다.


그리고 문제에서 원하는 Hxd에서 congratulation..이 나오는 부분을 2049480383으로 바꾸면 됩니다. 




0D3B에서 0D45까지가 overwrite한 영역입니다. 마지막은 Null이 포함된것입니다.


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

CodeEngn basic Level 11 풀이  (0) 2016.09.30
CodeEngn basic Level 10 풀이  (0) 2016.09.30
CodeEngn basic Level 9 풀이  (0) 2016.09.13
CodeEngn basic Level 8 풀이  (0) 2016.09.12
CodeEngn basic Level 7 풀이  (0) 2016.09.12



11번 문제입니다. 

9번 문제와 비슷하게 stolenbyte를 구하고 거기에 OEP를 찾아서 적으면 풀리는 문제입니다. 간단합니다.



PEiD로 살펴보면 UPX 패킹이 되어있습니다.  올리디버거에서 살펴보겠습니다.



올리디버거에서 보면 PUSHAD가 나옵니다. 쭉 내리다 보면 POPAD가 나옵니다. 이 밑의 3줄이 StolenByte입니다. 


UPX로 언패킹 하고 올리디버거로 보면 OEP가 나옵니다. 이를 이어붙이면 정답입니다.







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

CodeEngn basic Level 12 풀이  (0) 2016.09.30
CodeEngn basic Level 10 풀이  (0) 2016.09.30
CodeEngn basic Level 9 풀이  (0) 2016.09.13
CodeEngn basic Level 8 풀이  (0) 2016.09.12
CodeEngn basic Level 7 풀이  (0) 2016.09.12

10번 문제입니다.



ASPacking이 되어있습니다. 먼저 이를 언패킹 하겠습니다.


언패킹하는 방법은 인터넷에 많이 나와있는데 저는 여길 참고했습니다.

http://www.iblue.kr/xe/index.php?document_srl=14782&mid=board_jmbm03


먼저 시작하면 PUSHAD가 나오는데 여기서 F8을 누른 후 ESP를 Dump합니다. 



HexDump 창에서 4바이트를 드래그하고 Dword로 BP를 겁니다.



그리고 F9를 눌러서 BP까지 가면 아래와 같습니다.



아직은 모양이 다 안나왔습니다. 컨트롤+A를 눌러서 코드를 정리하고 올리덤프로 저장합니다.



LordPE로 리빌드 해줍니다.



PEiD로 언패킹이 잘 되었나 확인해봅시다.



언패킹이 잘 되었습니다. 이제 문제에서 원하는 답을 찾아 보도록하겠습니다. OEP는 이미 찾았으므로 '등록성공'으로 가는 분기점의 opcode를 찾아내야겠군요.



Registered ... wel done! 문자열 위에 jnz 분기문이 있습니다. 여기의 opcode인 7555가 문제에서 원하는 답입니다.


따라서 답은 OEP + opcode = 답이겠군요.




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

CodeEngn basic Level 12 풀이  (0) 2016.09.30
CodeEngn basic Level 11 풀이  (0) 2016.09.30
CodeEngn basic Level 9 풀이  (0) 2016.09.13
CodeEngn basic Level 8 풀이  (0) 2016.09.12
CodeEngn basic Level 7 풀이  (0) 2016.09.12


9번 문제입니다. stolenbyte를 구하라고 합니다.

무엇인지 모르지만 먼저 exe파일을 받겠습니다.



파일을 실행하면 위와 같은 창이 나오고 프로그램이 종료됩니다.



PEID로 보면 upx패킹이 된것을 알 수 있습니다.

이젠 반사적으로 upx툴을 이용해 언패킹하네요.

그런데 언패킹을 하면 정상적으로 실행되지 않고 아래와 같이 실행됩니다.



무언가가 깨진것 같습니다. 여기서 stolenbyte가 무엇인지 살펴보겠습니다.


패킹을 할 때 맨 아래에 위치한 jmp 전에 OEP 아래에 존재해야 할 코드를 jmp문 위로 stolen(훔친) 하는 기법입니다. 

이를 통해 리버싱을 어렵게 하는 방법입니다.


그렇다면 jmp 문 위를 잘 살펴보면 



이같은 코드들이 나옵니다. 아마도 stolenbyte가 이 부분인것 같습니다.


이 부분을 원래의 위치로 되돌려 놓으면 정상적으로 언패킹 되어 실행 될 것 이라 예상됩니다.



NOP 위치에 opcode를 채워 넣었습니다.


그리고 ollydump로 저장합니다.



이제 정상적으로 실행 됩니다.



codeengn의 정답은 stolenbyte를 쭈욱 나열하면 됩니다.




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

CodeEngn basic Level 11 풀이  (0) 2016.09.30
CodeEngn basic Level 10 풀이  (0) 2016.09.30
CodeEngn basic Level 8 풀이  (0) 2016.09.12
CodeEngn basic Level 7 풀이  (0) 2016.09.12
CodeEngn basic Level 6 풀이  (0) 2016.09.11


8번 문제입니다. OEP를 구하는 문제네요.



PEID로 보면 upx 패킹이 되어있습니다.

upx툴로 풀어도 되지만 이번에는 직접 ollydbg manual unpacking 해보겠습니다.



ollydbg로 실행하면 packing 에 의해 엉뚱한곳에 ep가 설정되어있습니다.


upx는 마지막 줄에 jmp로 OEP로 가는 구조입니다. 아래로 내려보시면 확인할 수 있습니다.



1012475로 jmp해 가는군요. 그렇다면 저기가 바로 우리가 구해야할 OEP라는 소리입니다. 답은 나왔지만 unpack 해보겠습니다.



F9에서 F8로 OEP로 왔습니다. 정말 익숙한 모습입니다.



마우스 오른쪽 버튼을 눌러서 ollydump 플러그인을 실행시킵니다. ollydump는 아래 버튼을 눌러주시면 됩니다.




Rebuild Import 버튼을 해제 하고

Dump 버튼을 누르시고 저장하시면 됩니다.


하지만 그냥 실행하면 정상적으로 실행되지 않습니다. 그래서 LordPE라는 툴을 이용해 정상적으로 실행되게 하겠습니다.









PEID로 확인해보면 언패킹 된것을 확인할 수 있습니다.






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

CodeEngn basic Level 10 풀이  (0) 2016.09.30
CodeEngn basic Level 9 풀이  (0) 2016.09.13
CodeEngn basic Level 7 풀이  (0) 2016.09.12
CodeEngn basic Level 6 풀이  (0) 2016.09.11
CodeEngn basic Level 5 풀이  (0) 2016.09.11


7번 문제입니다.




MASM32 / TASM32 [Overlay] 가 정확히 뭔지 모르나 구글에 치면 어셈블리어라고 대충 눈치 챘습니다. 



07.exe를 그냥 실행하면 위와 같은 결과를 보여줍니다.

ollydbg로 분석을 해보겠습니다.



문자열을 검색하면 실패시 나오는 결과문자열과 성공시 나올것으로 예상되는 문자열이 나옵니다.

성공시 나올것 같은 문자열로 더블클릭으로 이동하겠습니다.




4010ff에서 분기문으로 성공과 실패가 나뉘어집니다.

그렇다면 분기문 위를 디버깅 해봐야하겠군요.



StringToAdd 에 4562-ABEX라는 string이 있습니다. 그리고 문제에서 제시된 c드라이브의 이름을 저장하는 버퍼인 VolumeNameBuffer가 40225c에 위치하고있는데 이 곳에 CodeEngn으로 채워넣고 디버깅을 하면 ConcatString에 이 값이 들어가게 됩니다.



그리고 반복문을 통해 CodeEngn에서 'Code' 까지 1씩 더하는 과정을 2번 하게됩니다.

결과는 직접 해보시기 바랍니다.







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

CodeEngn basic Level 9 풀이  (0) 2016.09.13
CodeEngn basic Level 8 풀이  (0) 2016.09.12
CodeEngn basic Level 6 풀이  (0) 2016.09.11
CodeEngn basic Level 5 풀이  (0) 2016.09.11
CodeEngn basic Level 4 풀이  (0) 2016.09.11


6번 문제입니다.



PEID로 확인해보면 UPX 패킹되어있는 것을 확인할 수 있습니다.



upx 툴로 언패킹 해줍니다.



언패킹 되었습니다.



string 검색을 하면 시리얼로 예상되는 문자열을 확인할 수 있습니다.

저 값을 시리얼 값에 입력한 후 ollydbg를 살펴보겠습니다.



401290에서 무언가 일어날 것 같습니다. 한번 살펴보겠습니다.



EDX와 ECX에 시리얼과 입력값을 MOV하고 둘을 비교하는 함수인것을 알 수 있습니다.


함수를 빠져나와 넘어가면 문제가 클리어 되었습니다.



근데 codeengn 홈페이지에서 원하는 정답은 시리얼 번호 만이 아닌 OEP+시리얼 값이므로 PEID에서 OEP를 확인하여 시리얼과 같이 입력하면 답이 나옵니다.



hint) OEP = EntryPoint + ImageBase









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

CodeEngn basic Level 8 풀이  (0) 2016.09.12
CodeEngn basic Level 7 풀이  (0) 2016.09.12
CodeEngn basic Level 5 풀이  (0) 2016.09.11
CodeEngn basic Level 4 풀이  (0) 2016.09.11
CodeEngn basic Level 3 풀이  (0) 2016.09.11


5번 문제입니다.



PEID로 열면 UPX 패킹이 되어있는것을 알 수 있습니다.



upx툴로 언패킹 해줍니다.



언패킹 된 모습입니다.



언패킹 후 05.exe의 첫 실행화면입니다. name입력 부분과 serial 입력 부분이 있습니다. 

ollydbg로 열어서 분석해보겠습니다.



제일 먼저 문자열을 확인해보겠습니다. 그냥 실행 했을때 확인할 수 있는 문자열들이 보이면서 문제의 단서가 될만한 문자열도 보입니다. F8로 계속 디버깅을 하다가 입력 부분에서 호출되는 함수를 따라 들어가겠습니다.



사용자가 입력한 값과 프로그램에서 원하는 값이 EAX와 EDX에서 ESI와 EDI로 MOV된 후 비교됩니다. 

그리고 결과에 따라 분기문에서 경우가 나뉩니다.

따라서 문제에서 원하는 문자열을 입력하면 문제가 풀립니다.







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

CodeEngn basic Level 8 풀이  (0) 2016.09.12
CodeEngn basic Level 7 풀이  (0) 2016.09.12
CodeEngn basic Level 6 풀이  (0) 2016.09.11
CodeEngn basic Level 4 풀이  (0) 2016.09.11
CodeEngn basic Level 3 풀이  (0) 2016.09.11


5번 문제 화면입니다.



먼저 PEID로 05.exe를 보면 UPX 패킹이 되어있는것을 알 수 있습니다.



05.exe를 upx 툴을 이용해 언패킹한 후  실행 시키겠습니다.



-d 옵션을 주어 언패킹 합니다.



실행 첫 화면입니다. ollydbg로 실행합니다.



문자열을 검색하면 name 입력하는 칸과 serial을 입력하는 칸의 비교할 문자열이 나와있습니다.


name을 비교하는 함수를 직접 들어가보면 아래와 같습니다.





이를 각각 입력해주고 확인해 보겠습니다.



문제가 풀렸습니다.



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

CodeEngn basic Level 8 풀이  (0) 2016.09.12
CodeEngn basic Level 7 풀이  (0) 2016.09.12
CodeEngn basic Level 6 풀이  (0) 2016.09.11
CodeEngn basic Level 5 풀이  (0) 2016.09.11
CodeEngn basic Level 3 풀이  (0) 2016.09.11

3번 문제 입니다. 


exe파일을 다운받은 후 살펴보겠습니다.



실행하면 위와 같은 창이 나옵니다. 확인을 눌러 보겠습니다.



다음 화면에서 123을 입력한 후 Registrieren버튼을 누르면 Error 메시지박스가 나옵니다.



ollydbg에서 문자열을 검색하면 의심가는 부분이 나옵니다.



아마 Regcode에 입력한 값과 2G83*****(모자이크 처리)를 string compare 함수를 통해 비교해서 답을 출력해주는것 같습니다.


입력해보니 정상적으로 출력됩니다.

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

CodeEngn basic Level 8 풀이  (0) 2016.09.12
CodeEngn basic Level 7 풀이  (0) 2016.09.12
CodeEngn basic Level 6 풀이  (0) 2016.09.11
CodeEngn basic Level 5 풀이  (0) 2016.09.11
CodeEngn basic Level 4 풀이  (0) 2016.09.11

+ Recent posts