- Today
- Total
목록Reverse Engineering (4)
Phantom
간단한 리버싱 패턴을 분석한 글을 적고자 한다. 우선 scanf, printf 같은것들은 생략하기로 한다. 컴파일 옵션은 다음과 같다. gcc -m32 -fno-stack-protector -mpreferred-stack-boundary=2 -z execstack -fno-pie -o --------------------if_elseif_elseif_elseif_elseif_elseif_elseif_elseif_elseif_elseif_elseif_elseif_elseif_elseif_else-------------------- 간단히 if ifelse else 세가지만 처리해봤다. 함수 프롤로그 이후 scanf로 한개를 입력받는다. 그 후에 ebp-0x4에 있는데이터를 eax로 옮기며 분기문을 시작한다..
오늘은 리다이렉션에 대해 글을 쓰려 합니다.리눅스에선 기본 입출력 방식이 3가지가 있는데요* 표준 입력(0), ex)키보드* 표준 출력(1), ex)모니터* 표준 에러(2), ex)모니터 이렇게 세가지가 있습니다.--------------------------- Standard Input 0 모니터--------------------------- |Standard Error 2 -------+ --------------------------- 표준 입출력에 사용되는 기호로는 > 쓰기 > 추가 /dev/null 1>2& 출력을 에러로 보낸다. 2>&1 에러를 출력으로 내보낸다. 예시를 들어보겠습니다.#cat result.txt#cat < result.txt (cat result.txt 와 동일합니다)#ca..
오늘은 함수 호출 규약에 대해 알아보도록 하겠습니다.함수 호출 규약이란 함수를 호출할 때 파라미터를 어떤식으로 전달하는지에 대한 일종의 약속입니다. 우린 이미 함수 호출전에 파라미터를 스택을 통해 전달한다는 것을 알고 있습니다. 스택이란 프로세스에서 정의된 메모리 공간이며 주소가 줄어드는 방향으로 자랍니다. 또한 PE헤더에 그 큭가 명시되어 있습니다. 즉, 프로세스가 실행될 때 스택 메모리의 크기가 결정됩니다. 애플리케이션 디버깅에서는 cdecl과 stdcall의 차이점을 확실히 알아야 합니다. 1. cdecl - 주로 C언어에서 사용되는 방식이며 Caller(함수를 호출한 쪽)에서 스택을 정리하는 것이 특징입니다.ex)C언어에서 사용자가 만든 함수가 종료 된 후에, main함수가 메모리를 정리해줍니다...
매우 오랜만에 글을 쓰네요 요즘 최근에 리버스 엔지니어링이란것을 배우기 시작해서 리버싱에 대한 글을 쓰려합니다 저는 리버싱에 대해 공부할때 가장 힘든것이 레지스터였는데요 그것에 대해 글을 써보려 합니다 먼저 레지스터란 CPU내부에 존재하는 다목적 저장 공간으로써 RAM과는 조금 다른데요물론 RAM의 속도도빠르지만 CPU가 RAM에있는 데이터를 접근하기 위해서는 물리적으로 멀리 가야하기 때문에 자주 사용하는 저용량의 데이터들을 CPU안의 레지스터에 저장합니다. 그렇기에 레지스터가 용량은 적지만 RAM보다 더 빠른 속도로 데이터를 처리할 수 있습니다. 이것은 컴퓨터 구조론의 계층적 데이터 접근?에 나와있는 얘기인데요 레지스터 RAM 보조 저장장치 로 봤을때 용량이 적을수록 처리속도가 빨라집니다 계층적으로보자..