본문 바로가기

Reversing/Code_Engn(Basic)

Code Engn - Basic 14 RCE




UPX로 패킹되어있길래 언패킹부터 하고 시작하였다.

성공 메세지 문자열을 기준으로 성공과 실패 출력 부분의 조건 분기문을 찾아보니 먼저 아래 입력받는 부분부터 시작되었다.

각각 0x403038 과 0x403138에 입력받은 문자열을 저장하게 되는데, 이후 각각 다른 연산을 통해 나온 결과값을 내게 된다.

이 두 결과값이 일치하면 성공, 다르면 실패.



먼저 첫번째 문자열의 연산과정

0x401309 ~ 0x40132c의 루프 부분.


IDA로 보면 아래와 같다.



두번째 문자열의 연산과정

0x401383에 위치한 함수를 통해서 값을 반환하게 되는데 해당 함수를 보면 아래와 같다.

읽어온 값에서 0x30을 뺀후 루프를 돌며 10을 곱하고, 이 값을 계속 더해나가는 것을 보니 atoi 함수와 같은 역할을 하는 것 같다.



IDA로 보면 atoi 함수와 기능이 같은걸 알 수 있다.


두번째 연산함수가 atoi()이므로, 브루트 포싱할 필요없이

"CodeEngn"에 대한 첫번째 연산 결과값(esi 레지스터에 저장된값)을 10진수 로 넣어주면 인증에 성공할 수 있다.



'Reversing > Code_Engn(Basic)' 카테고리의 다른 글

Code Engn - Basic 16 RCE  (0) 2015.06.08
Code Engn - Basic 15 RCE  (0) 2015.06.04
Code Engn - Basic 13 RCE  (0) 2015.05.29
Code Engn - Basic 12 RCE  (0) 2015.05.26
Code Engn - Basic 11 RCE  (0) 2015.05.26