원문링크 https://www.megabeets.net/a-journey-into-radare-2-part-1/
제세한 내용 및 실습은 원문을 참고하기 바랍니다.
radare2 실행
>실행컨텍스트 안에서 radare2쉘은 rabin2 등을 사용할 수 있다.
Informations
오픈한 파일에 대한 각종 정보를 검색할 수 있음
>i? (show information-anything)
>ie (information entrypoint)
Analysis
aaa 또는 -A 옵션을 사용해 바이너리에 대한 분석이 가능함
>a? (analyse)
>aa (analyse all): 명령과 달리 모든 분석X, 추가 명령어가 뒤에 붙어서 분석될 수 있음
aa 또는 aaa 이후 아래 명령어들을 통해 추가적인 내용 분석이 가능함
Flag
Flags can be grouped into ‘flag spaces’
>fs : 플래그라는 이름으로 불리는 sections,function,symbols 등 흥미로운 오프셋 보여줌
fs를 사용해 플래그 공간을 선택할 수 있으며 f를 사용하여 플래그들을 출력할 수 있음
세미콜론을 활용해 한번에 여러개의 커맨드를 넘길 수 있음
>fs imports; f
Strings
>iz: data sections에 있는 문자열 리스트 출력
>izz: 전체 바이너리 내 문자열 검색
>axt @@ str.*
'axt'는 원하는 주소의 데이타/코드가 참조하는 주소를 찾을 수 있다.
자세한 사용법은 >ax?를 실행
'@@'는 foreach 반복문 신호와 같다.
'str.*' 는 str.로 시작하는 모든 플래그를 위한 와일드카드이다.
이 명령어 조합을 통해 함수 이름 리스트와 문자열 플래그 리스트를 볼 수 있으며
그것이 참조된 instruction의 위치를 알 수 있다.
axt를 사용하기 전에는 반드시 Sstrings flagspace를 먼저 선택해야한다.
(기본 값은 'fs *'으로 되어있다)
Seeking (중요)
>s?
radare2를 실행하면 기본적으로 프로그램의 엔트리 포인트에 위치하게 된다.
우리가 리스트한 문자열들은 모두 'main'에 의해 참조된다. 오프셋에서 오프셋으로 탐색하기 위해서는
seek 명령어이 필요하다. 정규표현식을 활용해 숫자연산,플래그,메모리 접근 연산자가 사용될 수 있다.
먼저 afl명령어를 사용해 함수리스트를 분석하자
>afl :Analyze Functions List의 약자이다.
s main을 이용해 함수를 seek하고 pdf를 이용해 디스어셈블했다.
>s main : seek main
>pdf : Print Dissasemlbe Function의 약자이다.
비쥬얼 모드: 리버싱에 친숙한 화면을 볼 수 있다.
>V : 비쥬얼모드로 스크린 전환,
Etner: jump,call에 있을때 목적지로 이동 가능
x/X: Cross-Refernces
p/P: 모드 변경,
:command :비쥬얼모드 안에서 r2 커맨드 실행
;[-]: 주석 추가 및 삭제
m<key>: 특정 오프셋 마크에 사용됨
;[2]: 각 점프와 호출 옆에 대괄호 안에 숫자가 있습니다. 키보드의 숫자를 누르면 기능 / 주소로 이동합니다.
?: Help
q: 종료
VV: 비쥬얼 그래프 모드 변경 후
Left/Down/Up/Right: h/j/k/l
다음과 같이 브라켓에 있는 문자 입력을 해당 콜로 통해 바로 점프 할 수 있다.
;[ga]: 함수로 이동, Go To 'a' 의 약자다.
자 그럼 흥미로워 보이는 beet 함수를 디스어셈블 해보자.
>s sym.beet (여기서 sym.beet는 beet함수의 플래그다.)
>f sym.<tab키>를 통해 'sym'플래그들을 모두 출력 할 수 있다.
>pdf 이후에 Print Dissasemlbe Function
Seeking없이 바로 디스어셈블을 출력할 수도 있는데 @이를 이용하면 된다.
@는 일시적인 seeking을 이용할때 사용된다.
>pdf @ sym.beet
위 명령어는 오프셋 sym.beet에 위치한 함수를 출력하는 명령어를 의미한다.
흥미로워 보이는 로컬변수를 보자 ebp-0x88
이것은 16진수로 0x88로 표시되어있지만 십진수의 값을 확인하기 위해 보려면 다음과 같은
명령어를 사용할 수 있다.
>? 0x88
136 0x88 0210 136 0000:0088 136 "\x88" 0b10001000 136.0 136.000000f 136.000000 0t12001
rot13 함수는 CTF에서 유몋안 치환 함수이다.
이 함수는 radare가 인식할 수 없는 문자열인 9개의 16진수 값들을 이용한다.
해당 주소들에 대한 다음 명령어 입력을 통해 수작업으로 수정이 가능하다.
> ahi s @@=0x080485a3 0x080485ad 0x080485b7
이후에 다시 디스어셈블을 출력하면 Megabeets로 바뀔 것이다.
>pdf
ahi s는 문자열로써 특정한 오프셋을 설정한다.
@@는 반복물을 의미한다. @@? 를 입력하여 더 자세한 사항을 볼 수 있다.
우리가 입력한 값과 Megabeets를 rot13한 함수를 비교할 것이다.
다행히 rahash2가 rot13 암호화 알고리즘을 지원한다.
자세한 사항은 man rahash2를 통해 확인하자.
:> !rahash2 -E rot -S s:13 -s ‘Megabeets\n’
Zrtnorrgf
이제 디버그 모드로 바이너리를 오픈하여 위 입력값 “Zrtnorrgf”을 입력해보자.
>ood
>ood?
>ood Zrtnorrgf
다음 기회에, 멀웨어 분석, 스크립팅 사용, 익스플로잇을 할 것이다.
처음엔 어렵지만 익숙해지면 좋은 툴박스가 될것이다.
'Debugger > radare2' 카테고리의 다른 글
Disassembling_with_radare2 (0) | 2020.01.03 |
---|---|
Radare2 강의와 치트시트 (0) | 2020.01.03 |
THC2018 (0) | 2020.01.02 |
A journey into Radare 2 – Part 2: Exploitation (미완료) (0) | 2020.01.02 |
How to make radare2 work for a large binary? (0) | 2020.01.02 |