Wargame/CodeEngn 20

CodeEngn Basic RCE L19

문제 이 프로그램은 몇 밀리세컨드 후에 종료 되는가 우선 문제를 열어보면 패킹 되어 있다. PEiD로 보자. UPX로 패킹 되어 있다. 언패킹 해주자. 정상적으로 뜬다! 프로그램을 실행시키다 보면 위와 같은 에러 창이 뜬다. 에러 창이 뜨는 곳에 BP를 걸고 다시 실행해보았다. 0040EA50 함수에 들어가서 에러 메시지가 뜨는 곳을 보니 주소 0040EAF9였다. 해당 주소로 가서 보자. 들어가보았더니 위와 같이 IsDebuggerPresent 함수로 안티 디버깅을 수행하고 있었다. 디버깅이 탐지되면 에러 메시지를 출력하는 주소 004338DE로 이동한다. 그럼 004338DE로 이동하는 명령어 부분을 고쳐보자. JNZ를 JZ로 변경해주었다. 다시 실행해보자. 0040EA13에서 메시지 박스가 뜨는 것..

Wargame/CodeEngn 2021.05.31

CodeEngn Advanced RCE L05

문제 Serial 을 구하시오 Ollydbg로 열어보았다! 항상 그랬듯 문자열을 찾아보자! 문자열에서는 별다른 내용을 찾아볼 수가 없었다! PEiD에 05.exe 파일을 넣어보니, Visual Basic으로 작성된 것을 알 수 있었다. 그럼 Visual Basic에서 사용되는 문자열 비교 함수가 사용되었을 수 있다! 오른쪽 마우스 - Search for - Found intermodular calls 를 통해 사용된 함수를 뽑아보았다. 그랬더니 vbaStrCmp가 있음을 볼 수 있었다. 해당 주소에 BP를 걸어둔 후 실행을 해보자! 그랬더니 EAX에는 입력값을 ECX에는 serial 값이 들어가는 것을 볼 수 있다! 677345를 입력창에 입력해주었더니 실패 구문인 Mal Cracker!!가 아닌 아래의..

Wargame/CodeEngn 2021.05.24

CodeEngn Basic RCE L18

문제 Name이 CodeEngn일때 Serial은 무엇인가 성공 구문을 찾아보자~!~! 성공 구문을 찾을 수 있었다! 해당 위치에 가서 cmp나 분기점을 찾아보자~! 명령어를 보면 004011F6에서 ZF 1이면 성공구문을 출력하는 곳으로 JMP를 하는 것을 볼 수 있다. 그 위에 CALL 명령어를 보면 lstrcmp(비교 함수)를 호출하는 것을 볼 수 있다. String2와 String1에 각각 어떤 값이 들어가는지 보자. String1에는 내가 입력한 값이, String2에는 Name에 따른 Serial 값이 출력된다. 06162370056B6AC0를 입력하였더니 문제가 풀렸다!

Wargame/CodeEngn 2021.05.20

CodeEngn Basic RCE L17

문제 Key 값이 BEDA-2F56-BC4F4368-8A71-870B 일때 Name은 무엇인가 힌트 : Name은 한자리인데.. 알파벳일수도 있고 숫자일수도 있고.. 정답인증은 Name의 MD5 해쉬값(대문자) 언제나 그랬듯 . . ~ 성공 구문을 찾아보자! Good Boy 부분이 성공 구문인 것 같다. 해당 위치로 이동해보자. 성공 구문 위에 CALL과 JNZ가 있는 것을 알 수 있다. CALL을 통해서 부르는 함수가 CMP임을 추측해볼 수 있고, 그 결과에 따라 Good Boy가 출력되거나 아니면 sleep이 된다. CALL 명령어에 BP를 걸어두고 실행해보자. Name 값은 1, Key 값은 문제에 기재된 값을 넣었다. 그랬더니 Pleas Enter More Chars라는 문자열이 뜬다. 'Plea..

Wargame/CodeEngn 2021.05.19

CodeEngn Basic RCE L16

문제 Name이 CodeEngn일때 Serial을 구하시오 성공 구문을 찾아보자! 형광펜이 성공 구문으로 보인다. 해당 위치로 이동해보자. CMP나 JMP가 GetStdHandle 함수를 호출하는 곳을 제외하고는 보이지 않아서 일단 바로 위에 있는 CALL에 BP를 걸어두고 실행해보았다. 웬열 . . 안 걸린다. 위의 GetStdHandle 어셈블리를 봤더니 004015A2 주소에 있는 분기문에서 ZF가 1이면 00401063C로 넘어가면서 Wrong password!가 출력되는 것 같다. 그럼 004015A2의 결과를 계산하는 CMP문인 0040159F에 BP를 걸어두고 실행해보자. EAX에는 내가 입력한 11111의 hex값이 들어간다. 그리고 비교 대상의 값은 E4C60D97이다. E4C60D97을..

Wargame/CodeEngn 2021.05.18

CodeEngn Basic RCE L15

문제 Name이 CodeEngn일때 Serial을 구하시오 항상 그랬듯 성공 구문을 찾아보자. 성공 구문이 위와 같이 있고 바로 위인 00458831에 CMP 구문이, 그 아래에 JNZ가 있다. CMP에서 입력값과 시리얼 값을 비교하는 것으로 추측해볼 수 있다! CMP 부분에 BP를 걸어두고 실행해보자. 위와 같이 입력한 후 ollydbg를 보니, EAX에 입력한 값의 hex 값이 들어가고 비교 대상이 되는 값은 00006160임을 알 수 있다. 그럼 Name이 CodeEngn일 때의 시리얼 값은 00006160의 10진수 값인 24928이다. CodeEngn과 24928을 입력해주었더니 성공 구문이 출력된다! 정답은 24928이 된다!

Wargame/CodeEngn 2021.05.17

CodeEngn Basic RCE L14

문제 Name이 CodeEngn 일때 Serial을 구하시오 (이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요) Ex) 11111 UPX로 패킹되어 있다. 언패킹 해주자. ollydbg에서 문자열 검색을 해보자. 위와 같은 문자열이 있다. 성공 구문으로 가보자. 성공 구문 위에 CMP가 있는 것을 볼 수 있다. EAX에 어떤 값이 들어가고 ESI에 어떤 값이 들어가는지 BP를 걸어 확인해보자. 위와 같이 입력하였다. EAX에는 입력한 값의 Hex값이 들어가고 ESI에는 정답이 되는 시리얼 값이 들어간다. ESI의 값인 000129A1의 10진수 값은 76193이고, 이를 Auth에 입력했더니 문제가 풀렸다!

Wargame/CodeEngn 2021.05.17

CodeEngn Basic RCE L13

문제 정답은 무엇인가. 13.exe 파일은 PEView로도 열리고 HxD로도 열리는데 ollydbg에서는 위와 같은 메시지가 출력 되면서 열리지 않는다. x64dbg로는 열린다. 왜...? 64비트도 아닌 것 같은데....? .... x64dbg는 문자열 검색을 하면 너무 많이 나와서, password를 입력했을 때 나오는 문자열을 이용하여 찾아보려고 했다. 근데 값이 없었다 ^^! PEView에서는 해당 메시지를 찾아볼 수 있었다. 더불어 성공 구문으로 추측되는 Done! You cracked it! 또한 볼 수 있다. 아무리 찾아도... 해당 구문을 x64dbg에서는 찾을 수 없었다. 그래서 HxD로 hex값을 좀 더 편하게 보았다. 보면 선택된 곳이 암호화된 문장처럼 보인다. (==로 끝나서!) 그..

Wargame/CodeEngn 2021.05.17

CodeEngn Basic RCE L12

문제 Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다. 이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하려면 파일을 HexEdit로 오픈 한 다음 0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다. 문제 : Key값과 + 주소영역을 찾으시오. Ex) 7777777???????? ollydbg로 열어보자. 일단 성공 메시지를 볼 수 있다는 건 성공 메시지가 있다는 거니까 문자열을 검색해보자. 문자열을 검색하니 0040108B에 성공 메시지가 있음을 알 수 있다. 성공 메시지가 있는 곳으로 가보면 0040107D에 CMP EAX, 7A2896BF가 있다. EAX와 7A2896BF를 비교해서 맞으면 성공 메시지를 출력한다. 0040107에 BP를 걸어두..

Wargame/CodeEngn 2021.05.16

CodeEngn Basic RCE L11

문제 OEP를 찾으시오. Ex) 00401000 / Stolenbyte 를 찾으시오. Ex) FF35CA204000E84D000000 정답인증은 OEP+ Stolenbyte Ex ) 00401000FF35CA204000E84D000000 UPX로 암호화 되어 있다. 9번 문제처럼 StolenByte가 POPAD 밑에 있을 수 있으니까 언패킹 하지 말고 열어보자. 9번 문제 : https://esyeonge.tistory.com/43?category=979957 9번 문제와 동일하게 POPAD 밑에 12바이트의 StolenByte가 보인다. 그리고 00407387에서 JMP를 하는 것으로 보아 0040100C가 OEP로 추측된다. OEP+StolenByte의 값인 을 입력해보았다. 그랬더니 문제가 풀리지 ..

Wargame/CodeEngn 2021.05.16