리버싱 입문 1


리버싱 입문자로써 가장 많이 추천하는 책인 '리버싱 핵심 원리'를 통해서 학습을 진행할 것이다!



리버싱계의 성경(?)이라고 하는데 넘 기대댄다

우선 이 책은 출판된지 굉장히 오래되었다. 그래서 ollydbg로 시작을 하는데 나는 x32dbg로 실습을 진행하겠다. (64비트가 대세니까 x64쓸거임 ㅎ)


우선 다음의 hello world!로 리버싱을 입문하였다.


HelloWorld.exe


다음과 같이 간단한 소스이다.


x32dbg에 넣은 후에 [F9]키를 한번 누르면 EntryPoint(를 찾아준다



Entry Point는 PE파일의 실행 시작 주소를 가르킨다 ASLR이라고 프로그램이 시작될때마다 주소가 바뀌게하는 안티 디버깅 기법도 알아두면 좋을거 같다.


아무튼 내가 오늘 해볼일은 디버거의 여러가지 단축키를 손에 익을(?)떄까지 사용해볼것이다.


F7, F8, F9, Ctrl+F2 등을 이용해서 OPcode를 실행시켜보면서 main함수를 찾아볼 예정이다. (단축키설명 생략)


call인자는 함수의 호출을 뜻한다. call 부분에서 F7을 누르면 해당 함수로 진입한다.


Ctrl+F9는 함수에 진입한 후 빠져나올 때 사용하는데 return값으로 커서가 이동하니 F7을 한번만 더눌르면 함수 탈출에 성공하고 다음 opcode로 넘어간다.

(모르면 단축키막 눌러보자!)


어쨌든 우리는 MessageBox API를 호출하는 부분이 main함수의 안쪽이기 때문에 MessageBox관련 내용이 나올때까지 디버깅을 실시한다.

(F7쓰지말고 F8만... 함수한번들어가면 나오기힘듬...)



그러다보면 <&GetCommandLineA>이런거도 보게되고 좀더 디버깅을 하다보면



다음과 같이 내가찾던 MessageBox API를 호출하는 코드를 확인할 수 있다.

그래서 해당함수 안으로 F7로 진입해보면

짜잔! main함수 안으로 진입하였다!! 밑의 push 두개는 각각 Title과 data를 스택에 주소를 할당하는 과정인것 같다.





그 이후로 여러가지 디버거의 명령어들과 단축키들에 대해서 실습해본다.

대부분 올리디버거랑 단축키는 비슷했다.


[Ctrl+G]


[F2 - BreakPoint]


[; - 주석] (주석이랑 레이블 동시에 안되더라; 올리랑 약간다른듯)

[: - 레이블]



주석과 레이블 확인 (Ctrl+Alt+C,L)


레이블은 basecamp를 차릴때 많이 사용하는 듯하다 저자 이승원님은 이렇게 basecamp를 차린다고 합니다.



다음으로 위와같이 한줄씩 디버깅하는게 아니라 함수가 호출된 부분을 검색할 수있는 쉬운 방법도 있다고 한다.

xdb같은경우에는 올리랑 조금 다르더라.

'우클릭 - 다음을 찾기 - 모든 모듈 - 모듈간 호출' 에서 message를 검색하고 떠블클릭하면 해당 opcode로 이동!

- 이렇게하면 좀더 빨리 main안으로 진입할 수 있었을텐데...



나머지 memory map이나 name같은 것들은 책을보면서 실습해보면 되겠다.


이제는 프로그램을 패치 시켜보겠다. Hello world를 Hello reversing으로... ㅋㅋ


첫번째 방법으로 문자열 자체를 패치시키면 된다.

(hello world가 들어간 12692A4를 헥사덤프에서 이동후에 데이터값을 변조)




오오오오!! ㅋㅋㅋㅋ (문자열 수정의 제약조건 - 기존 문자열 버퍼 크기 이상의 문자열을 입력하긴 어렵다)



두번째방법! 메모리 영역에 새로운 문자열을 생성하여 전달해본다.

- 현재는 Hello world를 F292A4주소에 전달하고, 메세지박스가 그걸 출력해준다.

그러면 이문자열의 주소를 변경해서 출력해주면 될것 같다. (전혀 다른 문자열주소를 함수에 넘겨줌)



헥사의 빈 Null padding공간에 데이터를 작성한 후




push에 수정된 메모리 주소를 넘겨준다




그랬더니...아니 이건






[헤헤]



오늘은 여기까지 ㅅㅅ


정리.

- xdbg로 실습.

- hex값 변조로 데이터 변조

- push 메모리 주소값 변조를 통해 내용변조

- 계속 디버깅해봐야 눈에 stub code가 보인다고함

- 리버싱 재밌다. 뒤에가면 어렵다는데 무섭당 -끝-








'Reversing' 카테고리의 다른 글

PE File(1)  (0) 2019.04.02
리버싱 5  (0) 2019.04.02
리버싱 4  (0) 2019.03.29
리버싱 3 Stackframe  (0) 2019.03.28
리버싱 2  (0) 2019.03.27

+ Recent posts