본문 바로가기
정보보안/리버싱

리버싱) 리버싱의 기초_2

by _miiiiiin_zzang_ 2020. 12. 24.

올리 디버거의 기본 명령어(code window에서 동작)

Restart : 다시 처음부터 디버깅 시작(디버깅을 당하는 프로세스를 종료하고 재실행) - ctrl+f2

step into : 하나의 OP code 실행(call 명령 시 함수 코드 내부로 따라 들어감) - f7

step over : 하나의 OP code 실행(call 명령 시 함수 코드 내부로 따라 들어가지 않고 그냥 함수 자체를 실행) - f8

execute till return : 함수 코드 내에서 retn 명령어까지 실행(함수 탈출) - ctrl + f9

 

처음 화면
f7 명령어 사용하여 step into 실행

명령어 실행 시 어셈블리어 코드 확인 가능

RETN은 함수의 끝에서 사용되며 이 함수가 호출된 원래 주소 쪽으로 되돌아 가는 명령어

어셈블리어에서 'JMP 0040104F를 실행하라'라고 말하는 것은 F7을 눌러 Step into 하라는 것임

 

visual C++로 제작된 실행 파일의 구성은 대부분 이렇다

이건 stub code : 개발 도구끼리, 버전에 따라 구성이 다 다르기 때문에 많이 보고 눈에 익히는 게 좋음

위에서부터 F7을 누르며 한 줄씩 내려오다보면 call 호출 명령어 확인 가능 step into명령어로  함수 내부 확인해보기

402524 함수는 main() 함수가 아님 - 왜냐하면 MessageBox() API 호출 코드가 보이지 않기 때문

함수에 들어가면 메인함수인지 확인하고 아니라면 탈출(ctrl+f9 눌러 retn 명령어 찾아 f7 눌러 탈출)하기를 반복

디버깅하다보면 저런 코드 확인 가능

CALL Kernel32.GetCommandLindW 명령어는 Win32 API 호출 코드이므로 F8눌러 따라 들어가지 않게 함 - 여긴 반복문으로 탈출하기 어려움

디버깅 하다 보면 확인 가능

문자열 확인 가능!! 따라서 이 함수가 바로 main() 함수임

 

다음에는 간단하게 찾는 법을 포스팅 하겠음

댓글