-->

[CodeEngn] Basic RCE L10 풀이 (ASPack)

CodeEngn Basic RCE L10 문제 확인

이전에 간간히 있었던 문제와 동일한 성향의 문제이다. 언팩을 통해 OEP를 구해야 하고 추가적으로 등록 성공 지점으로 가는 분기점의 옵코드를 구해야 한다.

 

 

 

파일을 실행시켜보니 아래와 같이 Name, Serial을 입력받게 되어있다.

 

 

 

여태까지 UPX 패킹만 나왔는데 이번엔 ASPack이 나왔다. 하지만 UPX이던 ASPack이던 간단한 패커이기 때문에 레지스터 백업과 복원의 위치에서 OEP로 뛰는 부분만 잘 찾아주면 된다.

 

 

 

CodeEngn Basic RCE L10 분석

pushad로 처음엔 레지스터 상태를 백업하고 있다.

 

 

 

그다음 popad에 bp를 걸여주려 했는데 한개가 아니라서.. 스택에 하드웨어 bp를 걸기로 했다.

 

 

 

pushad를 실행시키고 나서 스택창을 보면 레지스터 값들이 백업되어있을 것이다. 해당 스택 부분에 하드웨어 bp를 걸었다. 하드웨어 bp를 걸어놓았으니 실행시켰을 때, 해당 스택값을 복원하려고 하는 지점에서 bp가 걸릴 것이다.

 

 

 

중단된 곳은 아래의 popad 부분이다. 바로 밑에서 jne로 점프 후 445834로 리턴하고 있다.

 

 

 

해당 부분이 OEP가 맞는지 덤프를 떠보자. x32Dbg의 내장 툴인 Scylla를 사용해 IAT 정보를 자동으로 찾아준 후 덤프를 떠주었다.

 

 

 

IDA로 잘 열리는 것을 보니 OEP를 알맞게 찾아준 것 같다. 이제 등록성공으로 가는 분기문을 찾아야 한다. serial 문자열은 안나와서 Name으로 검색하니 아래의 'Name must be~' 문자열을 찾았다.

 

 

 

해당 문자열이 있는 함수로 가보니 윗부분에 엄청나게 시리얼인지 의심스러운 문자열이 있다.

 

 

 

참고로 위에처럼 빨간색으로 뜨는 건 함수 지정이 제대로 되지 않아서 그렇다. 이런 경우 함수 시작 프롤로그 부분에서 마우스 우클릭을 한 후 'Create Function'을 해주면 된다.

 

 

 

시리얼처럼 생긴 문자열 위치로 가보니 밑에 "Registered..."라는 등록 성공과 관련한 문자열이 보인다. 해당 문자열이 사용되는 함수로 가보았다.

 

 

 

그러면 아래와 같이 등록 성공으로 가는 분기점의 jnz 코드를 확인할 수 있다.

 

 

 

참고로, IDA에서 옵코드를 확인하려면 Options>General을 클릭 후 아래의 'Number of opcode bytes' 부분을 원하는 크기로 변경해주면 된다.

 

 

댓글

Designed by JB FACTORY