본문 바로가기

[Riversing]/[코드엔진] ADVANCE

[코드엔진] advance01

코드엔진 사이트에 들어가 advance01 문제를 다운로드 받고 압축을 푼다(비밀번호 : codeengn)

 

 

프로그램이 몇 밀리세컨드 후에 종료되는지를 찾는 문제이다.

 

PEiD로 분석 ㄱㄱ

 

 

UPX 패킹이 되어 있는 듯 하다.

언패킹을 시켜보자.

 

 

프로그램을 실행시켜보면

 

 

basic19 번 문제와 보기에는 똑같다.

이강석씨가 프로그램을 만들었다고 나오고, 냅두면 알아서 꺼진다.

 

Ollydbg로 분석 ㄱㄱ

 

 

우선  intermodular calls 를 확인해 timeGetTime 함수에 bp를 걸고 F9를 눌러보면

 

 

흠, 19번과 정말 유사하다.

올리를 키기 전에는 프로그램 실행이 잘 됐는데, 올리로 프로그램을 실행하니 에러가 뜬다? => 안티디버깅

 

 

다시 intermodular calls 에서 안티디버깅 함수인 IsDebuggerPresent 를 찾아 거기로 이동해본다.

 

 

위 사진과 같이 분기점을 반대로 바꿔서 안티디버깅을 우회하는 패치버전 파일을 만든다.

 

패치파일을 올리로 열어서 timeGetTime 함수에 bp를 걸고 디버깅을 진행하면 아래와 같이 나온다.

 

 

이 상황에서 디버깅을 하다 보면

아래사진의 분기점을 만나 EAX(A7C4) 와 [008AF87C](337B) 를 비교한 뒤 프로그램이 끝나는 쪽으로 이동한다.

 

 

그렇다면 337B 를 십진수로 변환하고 그걸 MD5 암호화 하면 답이 될 것이다.

 

짜잔

'[Riversing] > [코드엔진] ADVANCE' 카테고리의 다른 글

[코드엔진] advance04  (0) 2020.04.09
[코드엔진] advance03  (0) 2020.04.07
[코드엔진] advance02  (0) 2020.04.07