CodeEngn Challenges : Basic 08 문제 풀이
반응형

안녕하세요 테라트입니다


자격증공부 하느라고 코드엔진 풀이가 많이 늦어졌습니다 ㅋㅋ


정보처리기사 시험 준비중입니다!



8번 풀이 시작합니다



URL : https://codeengn.com/challenges/basic/08



OEP를 구하라고 합니다!


OEP에 대한 개념은 지난 번 풀이 때 설명했으므로 생략하겠습니다


참고 : https://qufdln.tistory.com/60


OEP 찾는 문제니까 프로그램의 실행과는 무관하겠지만 한번 실행시켜봤습니다


계산기 프로그램이네요



OEP를 찾으라고 하니 패킹이 당연히 걸려있겠죠?


확인해보겠습니다



흔히 쓰이는 UPX 패킹으로 되어있음을 확인할 수 있습니다


OEP를 찾는 방법으로, 두가지 방법으로 추려집니다


1. UPX 언패커로 풀기

2. 직접 OEP 찾기





1. UPX 언패커로 풀기


UPX 패킹 프로그램 사용법 참고 : https://qufdln.tistory.com/40



패커로 하니 빠르고 간편합니다 패킹이 풀렸음을 확인한 후 프로그램을 시작하면


바로 OEP가 보이겠죠?



네,, OEP는 1012475 이네요


확인했습니다 ㅋㅋ 그럼 다음방법으로 가보겠습니다




2. 직접 OEP 찾기


직접 찾아보겠습니다 어렵지 않습니다 이 방법 역시 이전에도 풀었던 방법이지만 한 번 더 수동 언패킹 해보도록 하겠습니다


올리디버거로 실행시키려고 하면 압축된 코드라고 경고창이 뜹니다 계속 분석하겠다고 '예' 를 눌러줍니다



UPX 패킹은 PUSHAD와 POPAD로 이루어져있습니다


PUSHAD가 보임을 확인할 수 있습니다


F8을 눌러 1번만 진행한 후 ESP 값을 누른 뒤 'Follow in Dump' 를 클릭해줍니다



그럼 밑의 덤프 창에 값이 바뀜을 확인할 수 있습니다


덤프의 첫번째 값에 Hardware BreakPoint를 설정하겠습니다



F9를 눌러 브레이크 포인트까지 진행을 하게 되면 다음과 같이 보이실겁니다


밑의 JMP문을 더블클릭해서 들어가보게 되면 OEP찾기 성공입니다




수동으로 언패킹하기도 너무너무 간단하죠?




자그럼 알아낸 값으로 정답 검증을 해보도록 하겠습니다


코드엔진 정답검증 방법 참고 : https://qufdln.tistory.com/8





성공적으로 찾았습니다!


반응형

댓글,

테라트

Since 2018.07.03 / IT 관련 정보, 일상의 공유를 위한 블로그