SuperVingo

CodeEngn.com Basic RCE L12 WriteUp 본문

Wargame[워게임]/CodeEngn

CodeEngn.com Basic RCE L12 WriteUp

SuperVingo 2020. 7. 29. 13:09
728x90

0. 실행화면

Key가 틀리면 아무 변화가 없다.

 

1. ExeInfoPE 분석

패킹은 되어있지 않는듯 하다. 바로 분석들어가자.

 

2. 올리디버거 분석

올리 디버거를 열고 쭉 훑어보면

이와 같은 흐름으로 진행된다. GetDlgItemInt를 통해 값을 받아오므로, 키는 정수로 입력되어야한다. 그럼 1234를 넣고 테스트를 진행한다. GetDlgItemInt 직후 BP를 걸어두고 1234를 입력했다. 그후 EAX를 확인해보자.

이처럼 우리가 입력한 값이 정수로 들어간 것을 볼 수 있다. 그리고

무언가 엄청 긴 문자열과 함께 연산을 진행한 후, EAX값을 특정값과 비교한다. 이 과정이 키 생성과정이라고 생각했다. 그래서 비교하는 CMP 구문에 BP를 걸고 진행을 했는데...

??? 루틴을 진행해도 EAX값은 그대로다. 처음에 뭔가 잘못된건가 생각했다가 "설마 함정인가?"라는 생각으로 단순히 특정 값을 키로 생각해봤다. 특정값을 10진수로 바꾸어 대입해봤다.

맞았다. 단순히 가운데 이상한 연산들은 우리를 함정에 빠뜨리기 위한 속임수였던것이다.

 

3. HxD 분석

우리는 성공 문자열 대신에 키값을 출력해야한다. 그러기 위해서는 성공 문자열 부분에 오버라이딩을 통해서 키값을 써주면된다. 

HxD에디터를 통해서 성공 문자열을 찾을 수 있었고, 우리는 키값을 성공 문자열 시작부분부터 오버라이딩을 하면된다. 중요한건 키값을 쓴 후에, NULL값을 통해 String의 끝을 알려줘야한다. 즉 변경해야 하는 길이는 키값 + 1(null)인것이다.

728x90