리버싱 입문 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

오늘부터 리버싱이다!!!!


리버싱은 하는 방법에 따라서 2가지로 나뉘게 된다. 정적분석과 동적분석이다.


정적분석

정적분석은 파일의 겉모습을 분석하여 관찰하는 방법이다. 동적적인분석과는 다르게 파일을 실행시키지 않고 분석한다.

파일의 종류, 크기, 헤더정보, API 등 여러가지 정보를 얻어서 동적분석할 때 유용하게 사용될 수 있다.

정적분석 툴로는 IDA, Ghidra가 있고, 올해 3월에 기드라가 무료로 풀렸는데 ida랑 ghidra딱 두가지만 사용해 볼 예정이다.



[사진. Ghidra 짱짱]


동적분석

동적분석은 말그대로 동적으로 PE를 분석한다. 프로그램을 실행시켜보면서 분석하는 행위.

레지스트리, 메모리 상태 등을 확인하며 프로그램의 동작원리를 파악할 수 있다.

대표적인 동적분석 도구로는 x64dbg, ollydbg가 있으며 대세가 지난 올리디버거 보다는 x64dbg를 사용해볼 예정입니다



[그림2. 무려 한글버전의 xdbg] - 영어로 바꿔서 쓰는게 호환좋다고함;;


입문으로 블랙펄 콘치님의 리버싱 튜토리얼부터 시작하였다. (https://bpsecblog.wordpress.com/2016/06/10/re_tutorial_3/)


먼저 PE파일을 준비했다. 소스는 다음과 같이 준비했다. (환경 : 코드블록)



이 PE파일을 리버싱할 것이다. 

hellow!!.exe



먼저 무작정 x32dbg에 해당 파일을 넣고 돌려보았다. 그 후에 F7,F8,F9를 눌러가며 무슨 동작을 하는 키인지 구글링하면서 눌렀다.


F7 : 안으로 단계진행 (함수만나면 진입)

F8 : 건너서 단계진행 (함수만나도 그냥넘어감)

F9 : 실행 (첨부터 끝까지 실행됨)


짜잔! call을 지나서 hellow!!가 출력됨. 끝! (visual studio로 안해서 그런건진 모르겠는데 내용이 약간 달랐다)






'보안' 카테고리의 다른 글

[보안] Tomcat 취약점  (0) 2019.03.26
[보안] 티스토리 블로그 취약점 문의  (0) 2019.03.25
이번 주 해야할 것  (0) 2019.03.25
[보안] 취약점 ppt  (0) 2019.03.22
[보안] 블로그 취약점 분석중(2)  (0) 2019.03.21

+ Recent posts