y0u_bat
힌트로 rail fence를 받았다. 검색해보니 암호방법중 하나 였다.그리고 파일을 받았는데 기차가 4장으로 짤려있었다.그걸보고 rail key가 4라는걸 알 수 있었다. 디코더 온라인 사이를 찾아 키 4넣고 디코딩했다. 클리어
[CodeGate2014] Angry_Doraemon] 도라에몽!! 풀이 바이너리 파일을 뒤지다.버퍼오버플로우에 취약한곳을 찾았습니다. read(fd,&buf,0x6E); 에서 버퍼오버플로우가 일어납니다. 버퍼의 크기는 16-c인데요 계산해보면 10이 나오는걸 볼 수 있습니다. 한번 입력해보았습니다.보니까 스택 스매싱 뜨는걸 볼 수 있는데요. SSP 보호기법이 걸려 있는 문제이네요. 카나리를 구해줘야되는데 이 문제같은경우는 fork 때문에 카나리가 고정되어 있습니다. 여기서 카나리는 int v8가 카나리 입니다. 여기서 메모리 릭으로 카나리를 구해 줄 수 있습니다. sprintf같은경우 0x00을 만날때까지만 출력해줍니다. 그런데 카나리의 첫번째 글자는 0x00이구요. 그런데 저희가 그 널을 다른걸로 덮..
[Hand-Ray] 1. C언어 기초 간단한 c언어 코드를 짜서 컴파일 하고 gdb로 어셈으로 보겠습니다. sub esp,0x20 // esp의 0x20만큼 공간 확보mov DWORD PTR [esp+0x18],0xa // [esp+0x18] 공간에 0xa(10) 넣기 c코드로는 int a = 10;mov DWORD PTR [esp+0x1c],0x14 // [esp+1c] 공간에 0x14 넣기 c코드로는 int b = 20; 여기서 왜 변수 시작이 esp+0x18부터냐?- 컴파일러 마다 다름(컴파일러 마음임) call add 위에 mov는 add의 인자값이나 그런게 들어있습니다. mov eax,DWORD PTR [esp+0x1c] // 두번째 인자 [esp+0x1c] -> 0x14mov DWORD PTR..