Wargame 공부(26)
-
코드엔진 advance 09번
프로그램을 실행하면 아래와 같은 창이 뜨고 아무 값이나 입력하니 실패 메시지가 나타났다. 이제 PEiD로 파일을 열어보면 패킹되어있지 않음을 알 수 있으니 올리 디버거로 프로그램을 열어서 문자열을 살펴보면 아래와 같은 문자열들을 확인할 수 있다. Password를 클릭하여 해당 위치로 간 뒤 분석을 해보면 아래와 같이 주소 00F513FF에서 함수를 호출한 뒤 실패 메시지가 뜨는 것을 확인할 수 있었다. 이제 CALL 00F51000을 F7으로 들어가 분석을 진행해 보니 아래와 같이 00F5104B에서 내가 입력한 값을 16진수로 변환한 값과 [ECX]에 들어있는 88228F를 비교하는 것을 확인할 수 있었다. 이제 프로그램을 다시 실행시켜 88228F를 10진수로 변환시킨 8921743을 패스워드로 입..
2021.09.26 -
코드엔진 advance 08번
파일을 실행해보면 name과 시리얼 값을 입력하는 창이 나타나고 문제는 시리얼 값이 5D88-53B4-52A 87D27-1D0D-5B09인 name(알파벳 or 숫자 2자리)을 찾는 문제였으니 시리얼 값을 입력하고 name을 아무 값이나 입력한 뒤 시작하니 아래와 같은 문자열이 나왔다. 이제 PEiD로 프로그램을 실행하여 패킹 여부를 찾아보면 패킹은 되어있지 않았기 때문에 바로 올리 디버거를 사용하여 파일을 연 뒤 위에서 확인한 문자열인 Please Enter More Chars를 찾아보니 아래와 같이 찾을 수 있었다. 찾은 문자열을 클릭하여 문자열이 있는 위치로 이동한 뒤 주변을 분석해보니 이 문제는 basic17번에서 풀었던 문제와 비슷한 형식임을 확인할 수 있었다. 이 문제 역시 입력한 값의 글자 ..
2021.09.26 -
코드엔진 advance 06번
프로그램을 실행해보면 나의 남은 군생활은?이라는 제목에 숫자 1이 떠있는 메시지 박스 하나가 나타난다. 이 창은 확인을 눌러도 esc를 눌러도 꺼지지 않았지만 숫자가 하나씩 올라가는 것을 알 수 있었고 790이 되면 종료되는 것을 확인할 수 있었다. 이제 PEiD로 확인해보면 UPX로 패킹 된 것을 확인할 수 있었고 언패킹을 진행한 후에 올리 디버거로 파일을 실행해보니 안티 디버깅 기법까지 설정되어 있었다. 안티 디버깅을 해결하기 위해 ida를 사용하여 import된 함수들을 찾아보니 IsDebuggerPresent함수를 사용하는 것을 확인할 수 있었고 아래와 같은 위치에 있는 것을 확인하였다 이제 올리 디버거로 파일을 열어 해당 위치로 이동한 후에 IsDebuggerPresent함수 밑에 있는 분기문이..
2021.09.26 -
코드엔진 advance 05번
프로그램을 실행하면 시리얼 값을 입력하는 작은 창이 하나 나타나고 시리얼 값을 입력한 뒤 ok버튼을 누르면 아래와 같은 창이 나타난다. PEiD로 확인을 해보면 패킹은 되어있지 않았다. 이제 올리 디버거를 사용하여 프로그램을 연 뒤에 위에서 확인하였던 문자열을 찾아보니 아래와 같이 확인이 되었다. By Jhonjhon_123이라는 문자열을 클릭하여 문자열이 있는 주소로 간 뒤 분석을 해보면 주소 00402476에서 vbaStrCmp함수를 사용하는 것을 볼 수 있고 이 구간에 브레이크 포인트를 설정한 뒤 실행하면 내가 입력한 시리얼 값과 아래에서 보이는 677345를 비교하는 것을 볼 수 있었다. 프로그램을 다시 실행한 뒤 677345를 입력하니 성공 메시지가 뜨는 것을 볼 수 있었다. 시리얼 값은 677..
2021.09.26 -
코드엔진 advance 04번
프로그램을 실행해 보면 name과 시리얼 입력을 하는 창이 뜨고 name과 시리얼 값이 다르면 실패 메시지를 띄운다 PEiD로 프로그램을 확인한 결과 아래와 같이 아무것도 뜨지 않았다. 하지만 올리 디버거를 사용하여 파일을 열어보면 아래와 같이 구성되어 있었고 조금 더 분석을 진행해 보았다. 실행을 해보니 아래에서 주소 00401006으로 가는 점프문을 발견할 수 있었고 이 값이 OEP라는 것으로 파악하고 덤프를 사용해 EP값을 401000에서 401006으로 수정한 뒤 다시 파일을 실행 보았다. EP를 수정하고 덤프 한 4_dump 파일을 열어보니 정상적으로 동작하는 것을 확인할 수 있었다. 이제 분석을 계속해서 하다 보면 주소 00401177에서 분기문 하나가 보이는데 이 분기문을 통하여 성공과 실패..
2021.09.26 -
코드엔진 advance 03번
프로그램을 실행하면 아래와 같이 name과 시리얼을 입력하는 칸이 있는 창이 나타난다. Name에 관련된 시리얼 값이 틀릴 경우 실패 메시지를 띄우는 것도 확인하였다. PEiD로 프로그램을 살펴본 결과 패킹은 되어있지 않았다. 이제 올리 디버거를 사용하여 프로그램을 열고 프로그램을 분석하다 보면 아래와 같이 주소 00401120의 GetDlgItemTextA에서 반환 받은 내가 입력한 name 값의 글자수를 3과 비교하여 크거나 같을 경우 점프하는 분기문을 볼 수 있는데 이를 통해 name의 글자수가 3보다 작을 경우 실패 메시지를 띄운다는 것을 확인할 수 있었다. 프로그램을 더 분석해보면 아래와 같이 주소 00401177에 있는 wsprintfA에서 00403284버퍼에 3265754874라는 값을 넣..
2021.09.26