orge.c의 코드 이다. argv의 갯수 제한이 있고, argv[1]과 buffer를 초기화합니다. 이 문제는 argv[0]에 쉘코드를 넣어주면 풀릴 것 같다고 생각했습니다. tmp로 troll을 복사해서 troll에 쉘코드와 약간의 NOP으로 구성된 심볼릭링크를 걸어줍니다. tmp에서 코어파일을 보기위해 페이로드를 작성해줍니다. 저렇게 페이로드를 작성했을 때 스택의 구조입니다. gdb로 코어파일을 분석하기 위해 디버깅합니다. argv[0]의 시작주소는 0xbffffa74입니다. 이제 임시디렉토리인 tmp 말고 orge에서 원본파일에 심볼릭 링크를 걸어보겠습니다. ret에 들어갈 주소를 argv[0]의 중간쯤으로 하고 페이로드를 작성하였더니 exploit 되었습니다. 원본파일에 페이로드를 작성했을 때의..
Cpu 레지스터란? 레지스터(Register)란 Cpu 내부에 존재하는 다목적 저장공간이다. 다른 저장공간(SSD,RAM,HDD) 등과는 다르게 레지스터는 Cpu 내부에 위치해있어 연산속도가 빠르다. 리버싱을 하는데 레지스터를 알아야 하는 이유? 디버깅을 하려면 디버거가 어셈블리어로 해석을 해주기 때문에 어셈블리어를 잘 알아야 한다. 그런데 이 어셈블리어 명령어의 대부분은 레지스터를 조작하고 내용을 검사하는 것이기 때문에 레지스터를 잘 알아야 한다. IA32(Intel Architecture 32bit)란 인텔의 32비트 Cpu에서 사용하는 명령 아키텍쳐이다. IA32의 구조 ALU : 전기적인 신호를 흘려보내서 연산을 하는 회로I/O Unit : 입/출력을 할 때 데이터의 통로(키보드나 마이크등) 입/..
리버싱 이란 무엇일까?흔히 역공학, 프로그램 분석을 역으로 분석하는 과정이라고 불린다. 프로그램이 제작되는 과정.c -> [complie] -> .obj -> [link](linking) -> .exe 프로그램은 위와같은 과정을 통해 만들어진다. 위와같은 과정을 통해 생성된 .exe(실행파일)을 .c파일로 복구해 내는 과정을디컴파일이라 한다. 디스어셈블을 할 수 있는 도구를 우리는 디버거 라고 한다. 디버거에는 ollydbg, IDA 등이 있다. 나는 ollydbg를 사용한다. 무료이기 때문이다.