코드엔진 사이트에 들어가 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 |