Hack
-
PinTool 설치Hack/Pwnable 2015. 7. 24. 13:56
https://software.intel.com/en-us/articles/pintool-downloads 핀툴을 다운로드받는다. 자신의 VS버전을확인해야하는데, C드라이브 -> Program Files -> Visual Studio ??.0을 확인하고 핀툴사이트에서 v??를 받아주면된다. 그리고 VS로 source -> tools디렉터리에있는 소스중 하나를 선택하여 컴파일을 하면 dll이 생기게된다. VS 컴파일중오류가 나면, include디렉터리안에있는 모든거을 그 소스파일있는곳으로 옮겨준후, gen폴더안에있는것도 꺼내준다. 그러면 정상적으로 컴파일이되는데, dll이 파일을 쓰면된다. SAFESEH 오류가 난다면, 프로젝트속성 -> 링커 -> 명령줄에서 /safeseh:no를 입력하고 적용후 컴파일하..
-
-
printf disassemblyHack/Pwnable 2015. 7. 12. 01:07
0x0804841d :push ebp 0x0804841e :mov ebp,esp 0x08048420 :and esp,0xfffffff0 0x08048423 :sub esp,0x20 0x08048426 :mov DWORD PTR [esp+0x1c],0x0 0x0804842e :mov eax,DWORD PTR [esp+0x1c] 0x08048432 :mov DWORD PTR [esp+0x4],eax 0x08048436 :mov DWORD PTR [esp],0x80484e0 0x0804843d :call 0x80482f0 0x08048442 :leave 0x08048443 :ret 어셈블리이다. 우선 esp에서 0x20을 빼준다.and esp,값으로 우릴 방해하긴하지만 ㅠㅠㅠ 일단 그렇게 가정을하자. 그리고 ..
-
Use After FreeHack/Pwnable 2015. 7. 8. 02:35
UAF 즉, Use After Free는 malloc으로 동적할당한것을 free하고 재사용을 할경우에 터지는 취약점이다. 대충 하나 예제를 보자 #include #include typedef struct samplestruct{int number;} sample; int main(){sample *one;sample *two;one = malloc(256);printf("[1] one-> number: %d\n", one->number);one->number = 54321;printf("[2] one->number : %d\n",one->number);free(one);two = malloc(256);printf("[3] two->number:%d\n",two->number);return 0; } sam..
-
ARM 공부Hack/Pwnable 2015. 7. 4. 08:49
ARM프로세스의 6개 특권모드 1개의 일반모드가 있다.프로세스 모드는 어떤 권한을 가지고 동작하는지를 나타낸다. User 모드: 일반 유저 앱을 수행할때 프로세서 동작모드 System 모드: User모드와 동일한 레지스터를 사용하지만 CPSR을 완전히 읽고 쓸수있는 특수모드 (Current Porgram Status Register) FIQ모드: 빠른 인터럽트 처리를 위한 프로세서 동작모드IRQ 모드: 일반적으로 사용되는 인터럽트를 처리하기위한 프로세서 동작모드SVC모드: 일반적으로 운영체제 커널이 동작하는 모드로, 리셋이나 소프트웨어 인터럽트가 발생하는 경우의 프로세서 동작모드Abort모드: 메모리 접근이 실패한경우의 동작모드Undefined모드: 프로세서가 정의되지않은 명령을 수행하려할때 수행되는 동..
-
Memory LeakHack/Pwnable 2015. 6. 27. 08:26
char* read_buffer(FILE *file, const int size){ int foo = 0; char* buf = (char*) malloc(size); if (buf == NULL) { return NULL; } if (fread(buf, 1u, size, file) != size) { return NULL; } return buf;} buf에서 malloc을통해 동적할당을 해준다. fread에서 읽기에 실패하면 NULL을 리턴하고, 그뒤에 return but;가 존재하는데여기서 malloc을 해줬지만 free를 해주지않았기에 메모리 릭이 발생한다. char *foo = (char *) malloc(100);char *bar = (char *) malloc(200);bar = foo; f..
-
stack canary for gccHack/Pwnable 2015. 6. 24. 23:31
-fstack-protector옵션을 주면 protected_func함수에만 SSP가 적용된다. 메인함수에는 아무것도 적용되있지 않다. protected_func함수이다. 잡다한것들이 많이 추가되어있다. __stack_chk_fail함수가 보이면 이것은 SSP가 제대로 적용된것이다. 카나리값은 보다시피 gs레지스터가 가리키는 세그먼트의 20번째 오프셋에 존재한다. 프로그램 실행마다 바뀌는게 단점이자... 장점? *Canary는 buf와 ebp사이에두어 까나리 변조가 시도되었을때, stack smashing detected가 발생하는데, __stack_chk_fail함수가 호출되기때문이다.