워게임/CodeEngn 28

[CodeEngn] Basic RCE L14

이번 문제는 다음과 같습니다. 이름이 주어지고 시리얼값을 구하는 문제인데 설명에서 친절하게 5자리 숫자이고 브루트포싱을 해야한다고 가이드라인을 잡아주네요 우선 exeinfope로 열어보면 어셈블리어로 작성된듯한 32비트 실행파일입니다. 패킹은 따로 탐지되진 않네요 이제 프로그램을 실행시켜보면 다음과 같은 구조의 프로그램이 실행되고 여기에 CodeEngn을 이름으로 넣고 시리얼은 아무값이나 넣어보면 다음과 같은 메세지박스가 출력됩니다. 그럼 이것들을 기반으로 분석을 해보겠습니다. 먼저 메세지박스에 있는 문자열을 찾아보면 다음과 같이 쓰이는곳이 보입니다. 이 문자열이 쓰이는 함수로 진입해보면 조금 복잡해보이는 구조이지만 일단 분석을 진행해보겠습니다. 우선 코드는 다음과 같습니다. 앞에있는 코드들은 프로그램의..

워게임/CodeEngn 2022.07.06

[CodeEngn] Basic RCE L13

이번 문제는 다음과 같습니다. 주어진 프로그램을 exeinfope로 열어보면 32비트 실행파일이고 C#으로 만들어졌다는것을 알수 있습니다. 우선 프로그램을 실행시켜봐야합니다. 프로그램을 실행시켜보면 다음과 같이 비밀번호를 입력하라는 문자열이 나온뒤 임의의 값을 입력하면 다시 입력하라는 메세지가 나오는 구조이고 이것이 반복됩니다. 저는 분석을 위해서 dnSpy라는 C# 디컴파일 프로그램을 사용하겠습니다. 먼저 이 프로그램의 메인 함수를 찾아볼것입니다. 그러면 다음과 같이 메인함수가 하나 보입니다. 간단하게 분석해보면 암호화텍스트와 여러가지 기본값들을 설정한뒤 encrypt함수를 호출한뒤 text값을 decrypt함수를 통해서 설정한뒤 비밀번호를 입력받는 로직을 무한루프로 만들었고 만약 입력값이 text와 ..

워게임/CodeEngn 2022.07.06

[CodeEngn] Pro RCE L01

이번 문제는 코드엔진 사이트를 알게됐었던 날과 여러 문제들을 풀면서 한번 풀어보고 싶었던 문제입니 문제를 exeinfope로 열어보면 역시 Pro 문제답게 첫문제부터 UPX 패킹이 되어있는것을 알수 있습니다. 제대로 분석하기 위해서 upx.exe로 언패킹 해줍니다. 그리고나서 다시 exeinfope로 확인해보면 제대로 언패킹이 된것을 확인할수 있습니다. 32비트 기반 실행파일이고 비주얼 c++로 작성되었네요. 이제 한번 프로그램을 실행시켜보겠습니다. 프로그램을 실행시키면 다음과 같이 문자열들이 나온뒤 인증키를 입력하라고 나옵니다. 여기서 아무값이나 입력하면 다음과 같이 인증 실패라는 문자열과 암호화된 플래그가 메세지박스로 출력됩니다. 이것들을 이용해서 키값 검사루틴을 찾아보겠습니다. 저는 IDA를 사용해..

워게임/CodeEngn 2022.07.04

[CodeEngn] Crypto Analysis L02

이번 문제는 조금 어려워보입니다. 암호테이블의 갯수가 26개이므로 알파벳에 대응하는 암호테이블로 보입니다 한번 나열해보면 다음과 같습니다. 알파벳과 대응되는 문자열을 찾아보면 q 와 g가 c 와 d로 대응 되는것 말고는 단서가 없습니다. 나머지 자리를 알 방법은 브루트포싱을 제외하면 딱히 없어보입니다. 이러면 남는 자리에 들어갈수있는 알파벳은 e,h,o,r,s,t 입니다. 3번째 자리와 7번째 자리가 같다는것을 고려해서 브루트포싱 알고리즘을 짜야합니다. #include #define CHAR_COUNTA 6 int main() { char str[10] = "?????c?d?"; char chr[6] = { 'e','h','o','r','s','t' }; for (int i = 0; i < CHAR_CO..

워게임/CodeEngn 2022.07.04

[CodeEngn] Crypto Analysis L01

이번 문제는 굉장히 쉬워 보입니다. 문자열만 봐도 뭔가 카이사르 암호로 암호화된듯한 느낌이 들기 때문에 카이사르 암호 암호화/복호화 (jo-gunhee.github.io) 카이사르 암호 암호화/복호화 ex) I love cookie I love cookie START ------------- jo-gunhee.github.io 이 사이트를 통해서 문자열을 해독해보면 26개의 문자열중에서 그나마 정상적인 단어처럼 보이는 19번째 문자열이 바로 정답입니다. 정답: withflowers

워게임/CodeEngn 2022.07.03

[CodeEngn] Basic RCE L12

이번 문제는 다음과 같습니다. 코드 패치문제로 보입니다. 먼저 exeinfope로 열어보겠습니다. 32비트 실행파일이고 어셈블리 프로그래밍된 프로그램인것으로 파악됩니다. 이제 한번 프로그램을 실행시켜보면 다음과 같이 키값을 입력한뒤 Check 버튼을 누르면 키값을 검사하는 방식일것으로 보입니다. About은 그냥 이 프로그램에 대한 간단한 설명을 띄워줍니다. 이제 한번 IDA를 통해서 분석해보겠습니다. 우선 키값을 검사하는 로직을 찾기위해서 관련된 문자열을 먼저 찾아봤습니다. 가운데 문자열을 보면 아까전에 프로그램을 실행시키면 나오는 메세지박스의 이름인것을 알수 있습니다. 그러므로 이 문자열이 쓰이는 함수로 진입하면 키값을 검사하는 로직도 찾을수 있을것입니다. 그리고 다른 문자열들도 뭔가 관련되어보이는 ..

워게임/CodeEngn 2022.07.03

[CodeEngn] Basic RCE L11

이번 문제는 다음과 같습니다. 먼저 주어진 실행파일을 exeinfope로 열어봐야합니다. 32비트 기반 실행파일에 UPX 패킹이 되어있습니다 일단 프로그램을 실행시켜보면 다음과 같이 확인을 누르면 키파일을 체크한다고 한뒤 확인버튼을 누르면 파일을 찾을수 없다는 메세지박스가 나오면서 프로그램이 종료됩니다. 이제 정확한 분석을 위해 x32dbg로 분석해보겠습니다. F9를 한번 눌러서 실행시켜보면 pushad로 시작하는 언패킹 루틴이 나옵니다. 여기서 F8을 한번 눌러서 진행한뒤 esp 주소에 하드웨어 중단점을 걸어줍니다. 이 다음에 F9를 눌러서 실행시키면 popad 바로 아래에서 중단합니다. 이제 여기에서 스택에 푸쉬되는 3개의 값들이 바로 StolenByte 입니다. 이유는 아래에 있는 jmp문으로 OE..

워게임/CodeEngn 2022.07.03

[CodeEngn] Basic RCE L10

이번 문제는 다음과 같습니다 먼저 주어진 실행파일을 exeinfope로 열어보겠습니다. 32비트 기반 실행파일에 aspack 이라는 패킹이 되어있다는것을 알수 있습니다. 우선 프로그램을 한번 실행해보면 다음과 같은 화면이 나옵니다. 이름과 시리얼값을 입력할수 있는 텍스트박스가 보이는데 문제는 이 텍스트박스에 아무것도 입력되지 않습니다. 이것이 왜이런지, 그리고 어떻게 등록성공으로 가는 분기를 찾을수 있을지는 분석을 해봐야 할것 같습니다. 이제 x32dbg를 통해서 분석해보겠습니다. 먼저 F9를 통해서 한번 실행해주면 다음과 같이 pushad로 시작하는 부분이있습니다. 한번 F8을 눌러준뒤 esp주소를 덤프따라가기한뒤에 하드웨어 중단점을 설정해줍니다. 그리고 나서 F9를 눌러서 실행해주면 다음과 같이 po..

워게임/CodeEngn 2022.07.02

[CodeEngn] Basic RCE L09

주어진 프로그램의 StolenByte를 구하는 문제입니다. StolenByte란 원래 프로그램의 코드 윗부분의 위치를 upx1로 이동시켜서 upx0이 덤프되지 않는 코드를 말합니다. 원래 OEP를 찾아서 OEP 위에 계속해서 푸쉬된 NOP이 바로 StolenByte라고 할수 있습니다. StolenByte를 찾아보겠습니다. 우선 OEP를 찾아야하기 때문에, 저번처럼 pushad로 스택에 푸쉬된 주소를 하드웨어 중단점을 걸고 실행시키면 popad가 나옵니다. popad와 jmp 사이에 push된 스택이 3개 보입니다. 바로 이 부분이 StolenByte라는 것입니다. jmp 에 있는 주소로 넘어가보면 다음과 같이 프로그램의 원래 OEP가 나옵니다. 그런에 OEP위에 여러개의 NOP이 있습니다. 그리고 Mes..

워게임/CodeEngn 2022.05.19

[CodeEngn] Basic RCE L08

주어진 프로그램의 OEP를 구하는 문제입니다. 먼저 exeinfope로 까보면 UPX로 패킹이 되어있는 상태입니다. 패킹이 되어있으면 원래 프로그램의 OEP와 달라집니다. 그러므로 프로그램을 직접 분석해서 원래 OEP를 알아내야 합니다. x32dbg로 동적분석해보겠습니다. 우선 실행해보면 다음과 같이 pushad에서 EP가 걸렸습니다. 이 다음부터는 여러게의 루프문이 나옵니다. 이런 코드가 많이 나오는 이유는 UPX에서 패킹했던 파일들을 언패킹해주는 작업을 한뒤 하나씩 불러와서 프로그램을 실행시켜야 하기 때문이다. 원래 OEP를 확인하려면 pushad 이후에 나오는 popad를 찾아야 합니다. 이것을 찾기 위해서 푸쉬된 스택의 주소를 하드웨어 중단점을 설정해줘야 합니다. 그러면 스택을 pop 할때, 원래..

워게임/CodeEngn 2022.05.19
728x90