일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C++ library
- 코딩
- C++ gui
- Docker
- LOB
- 알고리즘
- JUCE library
- go channel
- 공룡책
- C언어
- JUCE라이브러리
- C++ gui 라이브러리
- Nebula
- a tour of go
- 자료구조
- C++
- 백준
- OS
- c++ heap
- 프로그래밍
- vim-go
- tour of go
- JUCE
- 운영체제
- gui
- BOJ
- 연결리스트
- go
- 리듬게임
- JUCE 튜토리얼
- Today
- Total
목록CafeM0ca (265)
CafeM0ca
ID:assassinPW:pushing me away이전 문제에서 strcpy대신 strncpy를 사용한다. ret뒤로 페이로드를 구성 못하게할 셈. FakeEBP를 이용해서 풀어야한다.FakeEbp: leave,ret가젯을 이용하여 eip를 컨트롤한다.leave,ret명령어를 열어보면 //leave,ret을 에필로그라 함leave : mov esp ebp //esp를 ebp로 옮기고 pop ebp //스택 최상단(esp)에서 4byte를 빼고 ebp에 저장한다. pop되니까 당연히 esp값은 +4된다. (스택은 거꾸로 자란다.) ret : pop eip //스택 최상단에서 4byte를 빼고 eip는 스택 최상단을 가리킨다. jmp eip //eip가 가리키는 곳을 실행 return 값으로 leave,r..
ID:giant PW:one step closerhmm.. use ret sled.ret sled: return ret ret ret.... eip point next 4byte stackbuf | sfp | ret | ret's ret | ret's ret's ret| ret's ret's ret's ret| shellcode put on argv[1]Oh.. No addr. add stack addr(possible). after ret, instruction point NOP(sleeeeeeed) expoit maybe easy . this way will be use FC3
ID:bugbearPW:new divide this code get libc offset,execve offset.libc offset + execve offset = execve addr!popen is read from process One thing, you should know that execve addr is fixed any binary file! So. easily get execve addr.print execve == p execve in gdb copy original giant.c to ./tmp(mkdir tmp. tmp directory is acess any user) and add code at giant.c like pictureyou can check execve_addr..
사용툴:immunity debugger포스팅 3분의 1쯤 썼는데 다 날라가버렸다. 키파일을 확인하기위해 확인버튼을 눌러달라고 한다. 눌렀는데 없다고하고 끝나버린다.이 부분에서 파일을 만드는데 인자들을 보자hTemplateFile 파일의 속성을 제공할 템플릿 / 반드시 NULL이어야함 Attributes 파일 속성 / 현재 노말이다. 인자에따라 숨김파일,암호화파일,시스템파일,읽기전용파일,임시파일 등으로 만들 수 있다. Mode 파일 생성 or 열기 / OPEN_EXISTING은 이미 존재하는 파일을 엶. pSecurity 파일 보안 속성 / 파일 보안 속성 지정하는 구조체. NULL이면 자식프로세스에게 핸들이 상속되지 않으며 디폴트 보안 설정자 ShareMode 공유 모드 / 0은 다른 프로세스 파일,장치..
사용한 툴: immunity debugger1에 비해 난이도가 올라간 느낌?.. 조사해보니 visual basic으로 짜여져 있다. 풀어보자! 프로그램을 실행시켜보면 CALL 이라는 곳으로 도착하는데 여기가 메인함수부분이다. F7로 함수 내부로 들어가보자.계속 실행시키다보면 창을 띄울 준비를 한다.그리고 CALL MSVEVM60.6600A4C2에서 창이 나온다.이름을 입력하고 시리얼키를 입력받는데 아마 이 문제가 원하는건 시리얼키를 맞추는 것 같다.그리고 저 창이 출력된 후 디버거가 다음 명령을 듣지 않는다. 즉 저 함수 안에 check와 about, quit를 입력받는 무언가가 있다는 의미다.근데 이런식으로 하나하나 분석하려면 시간과 노력이 많이들테니 무슨 함수들이 있고 필요한것만 분석하는게 좋을 듯 ..
abex라는 사람이 어셈블리로 만든 파일이라고 한다. 리버싱 시작한지 30분도 안됐지만 풀 수 있었다. 디버거는 immunity debuger를 사용할 것이다. (뭔가 올리디버거는 80~90년대 느낌나서 싫더라) 처음 열어보면 아래와 같이 신기하게 생긴 창이 생성됀다.어셈블리 명령어,hex값,스택,레지스터가 보인다. 한줄씩 쭉 실행시키다보면(F8) 메시지 박스가 보인다. 하드를 CD-ROM으로 바꾸라고 하는데 자세히보면 맨 첫줄 0x40101F에서 JMP가 하나 있고 0x401024에서 조건문이 하나 있다. Ok, I readlly think that your HD is a CD-ROM! :p 를 띄워줘야할꺼 같은 느낌이 드는데 3가지 방법이 보인다.1. JMP를 0x401021에서 0x40103D로 바..
'수고'를 별로 찍어보자. 123456789101112131415161718192021222324252627282930313233343536373839#includeint main() { int i, j, n,div; scanf("%d", &n); for (i = 0; i
_cdecl 인자값 전달은 오른쪽부터, 스택 정리는 caller(Add esp,n) //n만큼 스택을 할당한걸 회수함 _stdcall 인자값 전달은 오른쪽부터, 스택 정리는 callee(ret n) _fastcall 인자값 전달은 레지스터+스택, 속도가 빠르나, 경우에 따라 오히려 코드가 길어짐 C언어 : _cdeclWINAPI : _stdcall
static을 C에서 재귀함수에서 전역변수 대신 지역변수로 선언하여 사용하고 하는데 책을 읽던 중 재밌는 사실이 있더라 static은 프로그램이 종료할 때 까지 남아있다.1234void Function(){ static int n=1; n++;}cs Function함수는 n값을 실행시킬때마다 1씩 증가시킨다. class에서 멤버변수로 static선언을 하면 어떻게 될까.12345678class Student{private: char *name; int age; static int total;public: //생략};csStudent라는 객체를 만들었고 이름과 나이를 저장할 수 있다. 여기서 total은 학생 수를 나타낸다. 1234567int main(void){ Student s1; Student s2..
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