Bazinga!
[시스템 보안] 바이너리 닌자 사용해보기 본문
어디부터 분석해야할까?
main 부터
가끔 완전히 strip되어있다면 main이 없을때도 있다. 그럴땐 어떻게 찾아가야할까?
-> 리눅스 elf header라는곳을 보면 entry point를 알 수 있다.
readelf -h
----------
i를 누르면 변경 가능
디옵티마이징 최적화 된 내용을 역으로 풀어내는것
----------------------------practice 1
------------------practice 2
변수 이름 바꾸는 단축키 : n
스택
스택이라는 자료구조 안에 자료를 넣을때마다 포인터가 항상 스택의 위를 가리키고있어야한다. 자료가 빠질때는 반대로
선입후출 형식
스택포인터가 가장 위를 가리킨다.
push - 스택 포인터가 가리키고 있는 영역을 채우고 한칸(4byte) 올린다
pop - 스택 포인터가 가리키고 있는 영역을 빼고 한칸 내려온다.
스택 포인터 esp
베이스 포인터 ebp - 실행하고 있는 함수의 context 저장 / 항상 스택의 바닥을 가리킨다. 바닥에서부터 offset으로 판단.
(ex - bp에서 위로 32칸만큼 가면 있는 4byte정수가 변수 a다)와 같은 bp를 기준으로 연산을 하며 지역변수가 사용된다.
stack frame
어셈블리 코드에서 어떻게 진행되고 있는지 봐보자
myprint 함수 인자 2개
1. eax에 hello world! 문자열 포인터가 들어가있다.
2. push 1
3. call myprintf
= push eip+5 ; ( 다음 실행할 주소를 넣는다. 080491e4 -> 080491e9)
= jmp myprintf
'수업기록 > 시스템 해킹' 카테고리의 다른 글
버퍼 오버플로우와 취약점 (0) | 2024.09.12 |
---|---|
python 쉘 코드와 함수 이용하여 파일 열기 (0) | 2024.08.06 |
[시스템 보안] 시스템 해킹 조사 유의사항 (0) | 2024.08.03 |