일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- DART
- CustomScrollView
- textfield
- viewmodel
- Button
- Navigation
- tabbar
- Kotlin
- data
- LifeCycle
- 테스트
- Coroutines
- binding
- activity
- appbar
- drift
- 앱
- textview
- android
- Compose
- TEST
- ScrollView
- Flutter
- scroll
- 계측
- 앱바
- livedata
- intent
- 안드로이드
- Dialog
- Today
- Total
Study Record
[리버싱] 참고 CMD(readelf, nm, objdump/objcopy, strings, binwalk, as, ld) 본문
[리버싱] 참고 CMD(readelf, nm, objdump/objcopy, strings, binwalk, as, ld)
초코초코초코 2021. 11. 15. 17:31readelf CMD
- https://devanix.tistory.com/186
- ELF 파일의 정보를 확인할 때 사용한다.
☞ ELF 헤더
-h, --file-feader : ELF 파일 헤더
-l, --program-header, --semgents : 프로그램 헤더
-S, --section-headers, --sections : 섹션 헤더
-e, --headers : 위의 세가지 헤더
☞ ELF 정보 출력
-s : 심볼 데이터
-r : 재배치 정보
-d : 동작 세그먼트
-V : 버전 섹션
-A : 아키텍쳐 의존 정보
-a : 모든 헤더 정보
☞ 디버그 섹션 출력(DWARF2)
-wl : line (.debug_line)
-wi : info (.debug_info)
-wa : abbrev (.debug_abbrev)
-wr : aranges (.debug_aranges)
-wR : Ranges (.debug_ragnes)
-wp : pubnames (.debug_pubnames)
-ws : line (.debug_str)
-wo : lov (.debug_loc)
# readelf -S /bin/ls : [Nr] 섹션번호를 확인한다.
# readelf -x3 /bin/ls : -x 옵션 뒤에 섹션번호를 붙이면 그 섹션 내용을 확인할 수 있다.
nm CMD
- https://devanix.tistory.com/190
- 오프젝트 파일을 대상으로 파일의 심볼의 리스트를 확인할 수 있다.
- 형식 : nm [options] <obj 파일>
☞ 주요 옵션
--size-sort : 심볼 크기를 작은 순으로 정렬
-r : 출력 순서 역순
-r --size-sort : 심볼 크기가 큰 순으로 정렬
-S : 심볼 값을 출력한다. 다음과 같은 행으로 출력된다.
[ 심볼 값 ] [ 심볼 크기 ] [ 심볼 클래스 ] [ 심볼명 ]
-f [ sysv | posix |
bsd
] : 출력 형식 지정
-D : 공유 라이브러리를 동적으로 링크하기 위한 심볼 정보 출력
+ 심볼 클래스
A : 심볼 값이 절대값으로 링크해도 변하지 않음.
B : 초기화되지 않은 데이터 영역(BSS)에 존재함.
C : 공유(common) 심볼. 초기화 되지 않은 데이터
D : 초기화된 데이터 섹션에 존재
G : 작은 오브젝트에 사용되며 초기화된 데이터 섹션에 존재
I : 다른 심볼의 간접참조. a.out의 GNU 확장
N : 디버그용 심볼
R : 읽기전용 데이터 섹션에 존재
S : 작은 오브젝트에 사용되며 초기화되지 않은 데이터 섹션에 존재
T : 텍스트 섹션에 존재
U : 정의되지 않은 심볼. 다른 오브젝트 파일 또는 공유 라이브러리에 실제
V : 심볼이 존재
W : weak 오브젝트
- : a.out 오브젝트 파일 내의 stabs 심볼(디버그 정보 등)
? : 알 수 없는 클래스
# nm -D wall.o
# nm -r wall.o
# nm -f sysv wall.o
objdump / objcopy CMD
- https://devanix.tistory.com/187?category=338572
- Object 파일 덤프/복사
☞ 옵션
-s, --full-contents : 모든 섹션의 전체 내용 표시
-i, --info : 지정가능한 오브젝츠 형식 출력
-b [object] : 오브젝트 형식 지정
-d, --disassemble : 실행 섹션의 어셈블리 내용 표시
-h : 존재하는 섹션 확인
-j [section] , --section=[section] : 특정 섹션을 지정하여 덤프
--start-address=[address] / --stop-address=[address] : 덤프할 주소 범위 지정
# objdump -s -j .interp /bin/ls
# objdump -d myshell
# objdump -i
strings CMD
- https://devanix.tistory.com/191?category=338572
- Binary 파일의 문자열 추출
- 형식 : strings <바이너리 파일>
☞ 옵션
-a : 강제적으로 파일 전체를 대상으로 검색한다.
-eS : 8비트로 인코딩한다. - 주로 한글(UTF-8) 을 출력할 때 사용한다.
-t [radix] : 문자열 앞에 파일의 오프셋 출력
※ radix : "x"-16진수 , "d"-10진수, "o"-8진수
binwalk CMD
- https://liveyourit.tistory.com/70
- 펌웨어 파일의 구성을 분석할 수 있는 툴로 어떤 데이터가 들어있는지 확인해준다.
- 형식 : binwalk [options] <file1> <file2> ...
☞ 옵션
-B : 파일 시그니쳐 분석 옵션이다. (default option)
해당 펌웨어가 어떤 데이터나 파일시스템을 쓰고 있는지 알 수 있다.
-A : 펌웨어 아키텍쳐 분석을 해준다.
-E : 엔트로피 분석을 해준다.
-e : 펌웨어 내부에 알려진 파일 타입을 추출해준다. - 언패킹 가능
# binwalk -BE filename.bin
# binwalk -A filename.bin
# binwalk -e filename.bin
as CMD
- https://www.ibm.com/docs/ko/aix/7.2?topic=as-command
- 형식 : as [옵션] <filename>
- 어셈블리로 작성된 소스 파일을 읽고 어셈블한다.
☞ 옵션
-a[ 32 | 64 ] : 32비트 혹은 64비트 모드로 설정한다.
-l[Listfile] : 어셈블리 리스트를 생성한다. 소스 파일 이름의 접미어 확장자를 .lst 로 대체한 이름이 디폴트이다.
-o <objFileName> : 어셈블리 프로세스의 출력할 파일 지정 (default : a.out)
# as -o myshell.o myshell.c
ld CMD
- https://ko.eyewated.com/linux-unix-%EB%AA%85%EB%A0%B9-id/
- 많은 수의 객체와 아카이브 파일을 결합하고 데이터를 재배치하여 심볼 참조를 묶습니다. 보통 프로그램을 컴파일하는 마지막 단계는 ld 를 실행하는 것입니다. (GNU 링커(linker))
- 보통 어셈블리 코드를 as 명령어로 어셈블한 다음 ld 명령어로 링킹한다.
- 형식 : ld [옵션] <objfile> ...
# ld myshell.o -o myshell : myshell.o 을 링킹한다음 출력 결과를 myshell 에 저장한다.
'리버싱 > 기본' 카테고리의 다른 글
[리버싱] Hack Me 리버싱 의사코드 복원 (7,10단계) (0) | 2021.11.16 |
---|---|
[리버싱] Hack Me 리버싱 의사코드 복원 (5,6단계) (0) | 2021.11.15 |
[리버싱] netcat(nc) CMD (0) | 2021.11.15 |
[리버싱] 간단한 어셈블리 코드 분석 후 복원 (0) | 2021.11.12 |
[리버싱] 어셈블리어 문법 (0) | 2021.11.12 |