일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BOJ
- 코딩
- JUCE 튜토리얼
- C++ gui 라이브러리
- 공룡책
- OS
- 운영체제
- Nebula
- gui
- c++ heap
- tour of go
- go channel
- C++ library
- 알고리즘
- JUCE library
- 자료구조
- vim-go
- 프로그래밍
- C++ gui
- JUCE라이브러리
- 리듬게임
- C언어
- a tour of go
- 연결리스트
- Docker
- go
- C++
- 백준
- LOB
- JUCE
- Today
- Total
목록CafeM0ca (266)
CafeM0ca
mutable은 const나 static, register, extern과 같은 키워드다.역할은 const선언된 구조체나 클래스에서 값을 바꿀 수 있도록 도와준다. 123456789101112struct student{ char name[20]; int IQ; mutable int age;}; int main(void){ //상수화된 구조체 struct student const me={"M0ca",111,17}; //me.IQ=130 안된다. me.age=18; //된다. return 0;}Colored by Color Scriptercs
RTL을 사용해야하는 듯 하다.RTL은 라이브러리로 리턴한다는 의미로 eip를 라이브러리 함수주소로 돌리면 된다. 쉘을 얻기 위해 system함수를 사용하여 인자로 /bin/sh를 실행하면 쉘이 실행될 것이다.우선 시스템 주소부터 찾아보자.gdb로 카피 파일을 열어서 적절한 곳에 bp를 걸어주고 print system하면 libc system주소가 나온다.->system함수 시작점: 0x40058ae0인자로 쓸 /bin/sh를 찾아야하는데 곰곰히 생각해보니 system함수도 /bin/sh를 실행하고 다른 명령을 받으므로 system함수 어딘가에 /bin/sh가 있을 것이다. 그 주소를 찾아서 인자로 넣어주면 된다. 일일이 찾을 순 없으니 /bin/sh를 찾는 소스코드를 작성하자.0x400fbff9가 /b..
입장ID:golem입장PW:cup of coffee problem_child에서 1바이트만큼 오버플로우된다. 버퍼오버플로우시킨 후 eip의 흐름을 보자인자 "\x90"*40+"A"problem_child+41에 break point를 잡고 ebp를 확인해보면 버퍼에 nop*40+A가 박혀있다. ebp를 보면 주소가 0xbffffc41다. 41번째 byte는 오버플로우된 바이트고 42,43,44번재 byte는 \xfc\xff\xbf가 박혀있는 상태다. 따라서 41번째 byte를 주소를 잘 맞춰주면 버퍼의 주소를 가르킬 수 있다는 의미고 이는 버퍼에 쉘코드를 올리면 쉘이 실행된다는 의미다. 쉘코드를 올리고 41번째 byte를 54로 맞춰보자.problem_child 에필로그전 ebp는 쉘코드 주소를 가리키고..
입장ID:skeleton입장PW:shellcoder 조건을 보면 argv[1][47]은 \xbf 이어야하고 스택은 사용하지 못한다.그럼 스택이 아닌 부분을 사용해야 하는데 이 문제는 공유라이브러리를 사용해야한다.공유 라이브러리는 printf나 strcpy와 같은 함수들이 있는 공간이다.리눅스에는 LD_PRELOAD라는 환경변수가 존재한다. 이 환경변수는 등록한 공유라이브러리를 우선시 한다.예를 들면 위 사진의 코드중 printf는 공유라이브러리에 존재한다. 하지만 사용자가 임의의 printf함수를 만들고 공유라이브러리로 컴파일하여 LD_PRELOAD로 올리면 기존의 printf가 아닌 사용자가 만든 printf가 작동한다.(후킹)그럼, 방금 말한 시나리오대로 간편하게 "쉘을 실행시키는 printf 함수를..
템플릿은 편리하며 유용하다. 사용법template or template //같은거다. T는 자료형이다. T가 int면 모든 T는 int로 치환된다. 12345678910111213#includeusing namespace std::couttemplate void PrintNum(T n){ cout
마이웨이로 살꺼다! 1. C++ 숙달 2. 모던 C++ 숙달3. C++ STL 숙달4. 이펙티브 시리즈 완독 5. 공룡책완독// 6. 멀티코어 // 7. 작은 OS 개발8. FC3 9. FC410. 레나리버싱11. vortex12. nubula12. protostar13. fusion14. 아이디어노트에 있는 게임 프로젝트15. CTF 입상 16. 소마 성공하면 줄그어야징~
2017년을 마무리 하면서 컴퓨터를 공부한지 8개월이 지났다. 8개월간 한 일을 월별로 정리해보자 월 한 일 3월 C언어(기초,조건문,반복문) 4월 C언어(배열,포인터,별찍기) 5월 C언어(CafeM0ca-리듬게임 프로젝트) / 알고리즘(BFS/DFS) 6월 자료구조(Stack/queue) / LOB(gate,1,2,3,4,5) / 리눅스 설치(15일) 7월 점프 투 파이썬 / F.T.Z(training1~10,level1~20) / LOB(6,7,8,9) / C++(inline,class,상속,정보은닉,캡슐화) 8월 LOB(10,11,12,13,14,15,16,17,18,19,20) / C++(오버라이딩,오버로딩,가상함수, 템플릿) / LOS(1,2) 9월 FC3(1,2,3~) / SOLID / LOB..
위의 파일 올려놉니다.
친구에게 도움을 많이 받았다. 3일걸렸는데 1일차에는 링크드리스트 직접구현해서 써먹을려다 실패. 2일차에는 std list 사용법 익히다가 erase부분에서 조건 몰라서 실패 3일차에 erase부분 도움받았다. 123456789101112131415161718192021222324252627282930313233343536373839#include#include#includeusing namespace std;int main(void){ int L; //줄 수 string s; cin >> L; while(L>0){ list keyloger; //keyloger 리스트 생성 list::iterator insert_pos = keyloger.begin(); //insert_pos라는 리스트의 iterato..
컴퓨터 프로그래밍에서 파일 디스크립터는 종류에 상관없이 파일에 접근하기 위한 추상적인 지시자이다. - wikipedia파일 디스크립터는 3개의 표준 스트림이 있다.정수 값이름에 정의된 상수 파일 스트림0표준 입력STDIN_FILENOstdin1표준 출력STDOUT_FILENOstdout2표준 에러STDERR_FILENOstderr 표 출처: wikipedia 표준 입력은 키보드로부터 이루어 지고 출력과 에러는 모니터를 통해 이루어진다.프로세스들의 파일 디스크립터 테이블의 0,1,2번은 이미 위의 표준으로 예약되있어서 3번부터 쓸 수 있다. -1은 오류쉘에서 실행한 프로세스가 0~2번만 사용된다는 것은 프로세스마다 개별적인 파일 디스크립터 테이블을 가지고 있다는 것. init프로세스로부터 fork()를 통..