일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DYNAMIC Section
- add-apt-repository 에러
- 개발
- GDB
- Seccomp bypass
- z3 signed 이슈
- OpenAI 개발
- tool
- 임베디드 시스템 해킹
- vhdx 파일 복구
- ppa:deadsnakes/ppa
- Recoverit
- user or team does not exist.
- python3.11 설치
- pwn
- 리커버릿
- Windows 부팅 오류
- VSCode C++ 표준 버전 수정
- c++
- 지훈현서
- std::cerr
- Python.h: No such file or directory
- python3.11 pip
- GEF
- wsl2 복구
- 공유 라이브러리는 왜 항상 같은 순서로 맵핑 될까?
- 실시간로깅
- docker
- pip 에러 해결
- pwntools
- Today
- Total
목록Tips (87)
OZ1NG의 뽀나블(Pwnable)
보호되어 있는 글입니다.
보호되어 있는 글입니다.
[*] 클래스 생성자의 첫 번째 인자에는 항상 해당 클래스를 저장할 공간의 주소가 들어간다. // cpp new test #include using namespace std; class PageHeap{ public: int a = 1; int b = 2; PageHeap(){ cout
[*] tcmalloc을 분석하다가 아래와 같은 코드를 봤는데 뭔지 잘모르겠어서 삽질해보게 되었다. new (&pageheap_.memory) PageHeap; 먼저 두괄식으로 결과부터 말하자면 보통 C++에서 동적 할당할 때 사용하는 new operator는 정적할당도 가능하다는 것이다. (정확히는 정적할당된 공간에 클래스를 저장한다) [*] 사용법 new (void * address) Class; 위와 같은 형태로 구성된다. 결과 : address에 Class가 할당된다. 정적 변수에 클래스를 할당 할 수 있다. [*] 테스트 코드 // cpp new test #include using namespace std; class PageHeap{ public: int a = 1; int b = 2; Pag..
[*] tcmalloc 코드를 분석하다가 Span 구조체의 멤버 변수 선언부에 `:`으로 신기하게 변수가 선언된 부분이 있어서 찾아보다가 알게된 bitfield에 대해 정리해봤따. [*] bitfield? C/C++ 구조체에 있는 문법으로 특정 변수의 크기를 비트 단위로 정할 때 사용한다. struct { unsigned int a : 16; unsigned int b : 16; unsigned short c; } typedef test; 위와 같이 선언한다면 a와 b 변수는 원래는 4바이트의 크기를 갖는 unsigned int 형이지만 16비트로 크기 제한을 걸었기 때문에 실제로는 2바이트의 크기만을 갖게 된다. (근데 타입은 유지함..) 이 경우 a와 b 변수는 unsigned short int 형으..
[*] pwntools의 asm(), disasm() 함수처럼 C와 C++ 전용으로 사용 가능한 capstone 라이브러리를 소개한다. - 공식 사이트 : https://www.capstone-engine.org/ The Ultimate Disassembly Framework The Ultimate Disassembler www.capstone-engine.org [*] 장점 - 당연히 파이썬 기반인 pwntools를 사용하는 것보다 몇십배는 빠른 연산이 가능하다. - 실제 3바이트 짜리 어셈 코드 테이블을 만드는데 pwntools는 7시간 이상이 걸렸지만 capstone은 20~30초 내로 끝났다... - 또한 apt에 등록되어있어 매우 간편하게 설치가 가능하다. [*] 라이브러리 설치 (최신 버전 >..
[*] 발단 친구한테 python3에서는 -c 옵션이 제대로 안먹히는 것 같으니 확인 좀 해달라는 연락을 받았다. 실제 테스트를 해보니 python2.7에서와 완벽히 같은 입력이지만 확실히 결과가 다른 것을 확인 할 수 있었다. [*] 원인 python3에서 바이트 표현 값에 0xc2가 있는 것을 보고 눈치챈 사람들도 있겠지만, 이 둘의 결과가 다른 이유는 문자열 인코딩 문제였다. python3는 디폴트로 utf-8을 사용하고 python2는 디폴트로 ascii를 사용한다. 그럼 python3에서 python2와 같은 결과를 내려면 어떻게 해야할까? [*] 변환 방법 위와 같은 일반적인 입력 방법으로는 원하는 모습으로 변환이 되지 않았기 때문에 utf-8을 ascii로 재인코딩 하는 방법을 사용하기로 했..
[*] PIE가 걸려 있는 경우 디버깅을 할 수 있는 방법은 다양하지만 특히 gef를 사용하면 pie가 걸려 있을 때 편한 디버깅을 지원해주는 pie 명령어를 지원해주기 때문에 훠어어얼씬 편하게 디버깅을 할 수 있다. (맨날 pwndbg로 pie 디버깅하다가 gef로 쓰니까 신세계가 따로 없었따...) [*] gef 설치 $ wget -O ~/.gdbinit-gef.py -q https://gef.blah.cat/py $ echo source ~/.gdbinit-gef.py >> ~/.gdbinit - 참고(공식 깃헙) : https://github.com/hugsy/gef GitHub - hugsy/gef: GEF (GDB Enhanced Features) - a modern experience for..