Wargame 공부/CodeEngn basic(18)
-
코드엔진 basic 20번
프로그램을 실행해보면 아무 화면도 뜨지 않는 것을 볼 수 있다. PEiD로 살펴본 결과 패킹이 되어있지 않으므로 바로 올리 디버거를 사용하여 파일을 연 뒤 EP인 401000까지 실행한다. 이제 분석을 시작해보면 일단 CreatrFileA함수를 사용해 CRACKME3.KEY라는 파일을 열고 ReadFile함수를 사용해 파일을 읽은 뒤 파일의 바이트를 반환하여 주소 00401066에서 12h(18)과 비교하여 같지 않으면 실패 구간으로 가는 것을 알 수 있다. 그래서 CRACKME3.KEY라는 18바이트 크기의 파일을 만들고 실행을 해봤지만 아래와 같이 실패가 되었다. 다시 올리 디버거로 돌아가서 분석을 해보면 아래의 주소 00401074에서 CRACKME3.KEY에 입력한 값을 A-N으로 XOR 하고 그..
2021.09.26 -
코드엔진 basic 19번
파일을 실행해보면 아래와 같은 창이 뜨면서 잠시 뒤 종료된다. PEiD로 파일을 열어보면 UPX로 패킹된 것을 알 수 있다. 언패킹을 한 뒤 올리 디버거로 파일을 열고 실행해보면 아래와 같은 에러 메시지가 뜨면서 실행이 안 되는 것을 볼 수 있다. 안티 디버깅이 된 파일인 것 같으므로 IDA를 이용해 파일을 열어 안티 디버깅 API함수가 있는지 찾아보면 아래와 같이 0040E961주소에 IsDebuggerPresent가 있는 것을 확인할 수 있다. 이제 올리 디버거로 파일을 다시 열어 주소 컨트롤 + g를 눌러 주소40E961를 찾아서 브레이크 포인트를 건 뒤 실행해 IsDebuggerPresent로 간다. IsDebuggerPresent함수 아래를 보면 jnz분기문이 보이는데 이 구간을 패치하여 파일이..
2021.09.26 -
코드엔진 basic 18번
프로그램을 실행해보면 name과 시리얼 값을 입력하는 창이 나온다. PEiD를 사용해 프로그램을 열면 nothing found *라는라는 문자가 뜨기 때문에 die를 사용하여 열어보니 ARM Protector를 사용하고 있는 프로그램이었다. ARM Protector에 대하여 찾아보니 다른 내용만 나왔기 때문에 올리 디버거로 프로그램을 열었다. 그리고 관련된 문자열을 찾아보니 아래와 같은 문자열 들을 찾을 수 있었다. 문자열을 클릭하여 그 주소로 가서 분석을 해보니 시리얼 입력 값이 다를 경우 나타나는 메시지 박스 위에 분기문이 있는 것을 찾을 수 있었고 그 분기문은 eax값을 or 하여 값이 0이면 zero flag를 설정해서 성공 메시지박스로 점프를 하는 구조이기 때문에 eax값을 반환하는 함수를 살펴..
2021.09.26 -
코드엔진 basic 17번
일단 PEiD로 프로그램을 보면 패킹은 되어있지 않은 것을 확인할 수 있다. 이제 프로그램을 한번 실행해보면 name과 시리얼을 입력하는 창이 하나 뜨는 것을 볼 수 있고 키 값에 관한 name을 찾는 문제이고 알파벳 또는 숫자인 한자리 문자라는 것을 힌트로 알려 줬으므로 키 값을 입력하고 1을 입력해보니 Please Enter More Chars…이라는 문자가 뜨는 것을 볼 수 있다. 이제 올리디버거로 프로그램을 실행한 뒤 F9로 프로그램을 계속 실행하고 EP인 0045C714에서 멈춘 뒤 All referenced Strings를 사용해 위에서 확인한 문자열들을 찾으면 아래와 같이 확인할 수 있다. 이제 문자열을 클릭하여 해당 구간으로 가서 분석을 해보면 아래와 같이 입력한 name의 글자 수를 계산..
2021.09.26 -
코드엔진 basic 16번
우선 PEiD로 파일을 열어보면 C++ 언어로 만들어진 파일인 것을 알 수 있다. 이제 파일이 어떻게 동작하는지를 알아보기 위해 파일을 실행해 보면 name과 시리얼 값을 입력하는 프롬프트 창이 뜨는 것을 볼 수 있다. 이제 올리 디버거로 해당 파일을 연 뒤 All referenced Strings를 이용하여 관련 문자열들을 살펴보면 아래와 같이 프로그램과 매우 관련되어 보이는 문자열들을 찾을 수 있다. 이제 Good Job! 문자열을 클릭하여 이동한 뒤 분석해 보면 역시 입력 값을 비교하여 점프하는 분기문이 있는 것을 찾을 수 있었다. 비교문에 브레이크 포인트를 걸고 실행한 뒤 Follow in Dump를 사용해 LOCAL.15 스택 세그먼트에 들어 있는 값을 찾아보면 E4C60D97 임을 알 수 있고..
2021.09.26 -
코드엔진 basic 15번
프로그램을 실행해 보면 name과 시리얼 값을 입력하는 창이 나오는데 정확한 키값을 입력하지 않으면 try again이라는 메시지가 나타나는 것을 볼 수 있다. PEiD로 검사를 해보니 패킹은 되어있지 않았다. 이제 올리 디버거를 사용하여 프로그램을 연 뒤 올리 디버거의 All referenced Strings을 사용해 관련된 문자열을 찾아보면 주소 458831에 성공과 실패로 가는 분기문이 보인다. 분기문을 잘 살펴보면 eax레지스터에 들어있는 값과 주소45B844안에 들어있는 값을 비교하는 것을 알 수 있는데 프로그램을 분석해보면 eax레지스터의 값은 입력한 시리얼 값을 16진수로 변환한 것임을 알 수 있었다. 그러니 비교하고 있는 주소 45B844안의 값을 10진수로 변환한 값이 플래그 값임을 알 ..
2021.09.26