본문 바로가기
반응형

Study78

[리버싱] CD.exe 문제풀기 문제를 풀어보자. 'HD를 CD-Rom으로 인식하게 하라'가 문제이다. 올리디버거로 분석해보자. 생긴건 이러하다. Code Window만 보면 주석을 보면 MessageBoxA, GetDriveTypeA와 같은 API가 있다. MessageBoxA는 메시지박스를 띄우는 API이고, GetDriveTypeA는 드라이브 타입이 어떤 타입인지 확인하는 API이다. 한줄씩 분석하다보면 ESI레지스터와 EAX레지스터의 값이 바뀌는 것을 볼 수 있다. EAX레지스터는 GetDriveTypeA가 실행되면 값이 3이 되는 것을 볼 수 있다. ESI는 증가하고 EAX는 값소하다가 401024를 보면 서로 비교를 한다. 비교 후, 같으면 JE 명령어로 인해 CD.0040103D로 가게되고 아니면 계속 진행 된다. 문제 해.. 2017. 8. 24.
[리버싱] API에 대해 알아보자 API(Application Programming Interface)란? 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 리버싱 때 유용한 API 파일 생성하거나 열기(Open)32bit : CreateFileAwide : CreateFileW 파일 입출력(Read&Write)ReadFile : 읽기WriteFile : 쓰기 파일 접근(Access)SetFilePointer 시스템 디렉터리를 얻어오는 함수32bit : GetSystemDirectoryAwide : GetSystemDirectoryW .ini 파일과 관련된 함수32bit : GetPrivateProfileStringA, GetPrivateProfileIntA, .. 2017. 8. 24.
[리버싱] hello world 문자열 패치 hello world 문자열 패치 hello world가 출력되는 소스이다. 이 프로그램을 리버싱 하여 다른 문자가 출력되게 해보자!! 우선 printf나 hello world 문자열을 찾으면 된다. hello wolrd가 담겨있는 404000을 찾아보자 주소와 아스키코드가 보여지는 Dump Window에 가서 ctrl + G를 하여 404000 주소를 입력한다. 아스키 코드를 바꿔서 hello man을 만들어보자. 이렇게 바꿔주면~~ hello man으로 바뀐 것을 볼 수 있다. Dump window창에서 바꾼 문자열을 드래그 하고 Copy to executable file을 누르고 save file을 하면 패치가 된다. 끝 2017. 8. 24.
[리버싱] Break Point에 대해 알아보자 Break Point(브레이크 포인트)란? 프로그램을 실행하는 도중에 유저가 필요한 시점에서 프로그램을 일시정지 시키는 역할. 디버깅 기법 중 하나. 소프트웨어 브레이크 포인트 명령을 실행하는 CPU를 일시 중지, 한 바이트 명령어를 사용해 디버깅 대상 프로세스의 실행을 중지 보통 어플리케이션을 디버깅할 때 사용되는 브레이크 포인트, 일반적 코드 : 0xCC, INT 3 동작방법 1. 현재 주소의 opcode를 뽑아서 브레이크 포인터 테이블에 저장 2. opcode를 0xCC로 교체 3. 명령어 실행 4. 원래의 opcode로 돌려놓음 종류 - 일회성 브레이크 포인트 : 브레이크 포인트 리스트에 정보가 들어가고 브레이크가 수행되고 나면 리스트에서 정보가 제거된다. - 지속적 브레이크 포인트 : 리스트에 .. 2017. 8. 24.
[리버싱] 리틀 엔디언&빅 엔디언 엔디언(Endianness)이란? 컴퓨터의 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열하는 방법이다. 빅 엔디언(Big-endian)과 리틀 엔디언(Little-endian)으로 나눠진다. 빅 엔디언(Big-endian) 최상위 바이트(MSB)부터 차례대로 저장하는 방식이다.장점 디버그를 편하게 해주는 경향이 있다. (사람이 숫자를 읽고 쓰는 방법과 같기 때문) TCP/IP는 16비트와 32비트 정수에서 빅 엔디안 방식을 사용한다. 숫자 비교시, 유리 UNIX에서 사용하는 바이트 오더 리틀 엔디언(Little-endian) 최 하위 바이트(LSB)부터 차례대로 저장하는 방식이다. 장점 메모리에 저장된 값의 하위 바이트들만 사용할 때 별도의 계산이 필요 없다. 수치 계산시, 유리 Intel에.. 2017. 8. 23.
[리버싱] 레지스터에 대해 알아보자 레지스터란? CPU 내부에 존재하는 작은 고속의 메모리이다. 레지스터의 종류 위 레지스터들은 범용레지스터, 인덱스레지스터, 포인터레지스터라고 한다. 32비트 환경에서는 첫 글자가 E(Extended)로 시작한다. 64비트 환경에서는 첫 글자가 R(Register)로 시작하고 32비트의 레지스터를 포함한다. 범용 레지스터 AX(Accumulator) : 연산에 사용 BX(Base) : 메모리 주소 지정 시 사용 CX(Counter) : 반복과 같은 상황에 사용 DX(Data) : EAX와 함께 연산, 부호확장 인덱스 레지스터 SI(Source) : 메모리를 이동 및 비교 시 해당 주소 DI(Destination) : 메모리 이동 및 비교 시 목적지 주소 포인터 레지스터 IP(Instruction) : 다음.. 2017. 8. 23.
반응형