정보보안/CodeEngn 10

09[Basic RCE]

stolenbyte를 찾으라고 한다. stolenbyte는 처음들어보는 상태로 문제를 직면한다. upx로 패킹 되어있으니 전 문제처럼 언패킹하면 글씨가 다깨지고 이상해진다. 그리고 stolenbyte에 대해서 알아보니 stolenbyte는 언패킹의 원리를 이용하여 OEP를 찾아서 패킹하는 것을 OEP이전에 코드를 놔둬서 고장나게 만드는 것 같다. 위는 패킹 되지 않은 코드를 디버깅할때 pushad, popad 부분을 본다. popad 뒤의 3개의 push문이 우선 답이다. 언패킹한 프로그램의 비어있는부분과 정확하게 크기가 일치한다.

07[Basic RCE]

문제 내용은 다음과 같다. 먼저 string 검색으로 분기점을 찾아낸후 breakpoint 건 부분들을 살펴보면 GetVolume~~ 함수에서 드라이브의 이름을 가져오고 이를 이용해서 암호를 만드는것 같다. Drive의 이름을 가져와서 07.40225C에 저장하기 때문에 401099가 호출된 이후에 해당 메모리를 CodeEngn으로 수정한후 코드를 실행하면 주석 되어있는 부분처럼 시리얼 넘버도 나오고 CodeEngn -> ????Engn으로 바뀌었는가가 문제가 물어보는 바이다.

13 [Basic RCE]

정답 문자열을 구하는 문제인것 같다. 이런식이 었다. 이번에 처음 안 사실인건데 .net(C#) 으로 구성된 프로젝트는 디버깅을 할 수가 없다. C#으로 빌드하면 중간에 코드가 만들어져 JIT컴파일러에 의해 컴파일되고 운영체제가 바로 실행한 수 있는 코드로 변환된것이다. 이런 방식을 Intermidiate Language 방식 이라한다. 따라서 dotPeek 이라는 툴을 이용하면 코드를 확인할 수 있다. 그리고 str을 출력해보면

05, 06[Basic RCE]

키를 찾는 문제인것 같다. 실행하면 다음과 같이 나온다. 아무런 값을 넣고 실행한뒤 나오는 경고문을 string으로 찾으면 다음과 같이 Id와 SerialNumber가 나온다. 6번문제는 Pack되어 있는 프로그램에 OEP와 Serial을 구하는 문제이다. Serial은 위와 같은 방식으로 똑같이 찾을 수 있다. OEP같은 경우에는 Ollydbg에서 이를 자동으로 찾아주지만 직접따라가 봐도 찾을 수 있다.

04[Basic RCE]

디버거 프로그램을 탐지하는 프로그램인 것 같다. 그냥 실행했을때 이렇게 떴지만 디버거로 켰을때는 디버깅 당한다는 글로 바뀌었다. 디버거를 한줄한줄 실행시켜보며 Step in도 해보다 보면 아래와 같은 함수를 쉽게 볼수 있다. 1초의 Delay를 주면서 IsDebuggerPresent 함수로 디버거 여부를 확인한다. IsDebuggerPresent 함수도 내부에는 별 내용이 없었다.

03[Basic RCE]

시작 부터 고비였다. 02번 문제가 프로그램이 깨져서 작동을 안하는 걸 flag를 찾는것이었는데 이번것도 그런건줄 알고 이것저것 열어봤는데 다시 읽어보니 DLL이 없는 것이었다. 그래서 해당 DLL 설치하고 다시 실행하니 잘됐다. 처음 뜨는 창을 보고 뭔가 잘못한줄 알았다. 하지만 보니 Passwort -> Password인 것같아서 그대로 실행했다. 실행하면 code 입력 창이나온다. 아마 이 코드를 찾는 문제인것같다. 비슷한 유형의 문제를 리버싱입문 책에서 봤기 때문에 같은 방향으로 해결할 수 있을 것 같았다. asdf입력하니 틀렸다고 나온다. 디버거로 열어보고 실행해 보았다. 순차적으로 진행하면서 보고 있었는데 생각해보니 string을 검색하면 됬던 것이었다. 아래에 틀렸을때 실행되는 부분이 나와 ..