반응형 → My Meta+IT/리버싱5 어셈블리어/Assembly_5_실습 어셈블리어/Assembly_5_실습 5. (실습) hello실습 world 문자열 패치 C언어 API(win32, Linux API) C++ API(MFC) VB 자바, 파이썬, 펄 같은 언어들은 디컴파일러가 이미 있다. 상기 언어는 별도의 엔진이 필요한데, 악성코드 배포자의 입장에서는 범용적이지 않으면 쓸모가 없다. OS 지식(실행 파일 구조) CPU 아키텍처 어셈블리어 프로세스 메모리 레이아웃 구조(code, data, heap, stack) 프로그래밍 언어(C - Win32, C++ - MFC, VB) Packer / Protector Anti-디버깅 코드 가상화 윈도우는 MASM 리눅스는 GAS 리버싱은 플랫폼마다 그 방식이 다 다른데 플랫폼이 다양하기 때문에 어려운 것이다. 메모리는 하드디스크에.. 2022. 1. 14. 어셈블리어/Assembly_4_Break Point(브레이크 포인트) 어셈블리어/Assembly_4_Break Point(브레이크 포인트) 4. Break Point(브레이크 포인트)란? 프로그램을 실행하는 도중에 유저가 필요한 시점에서 프로그램을 일시정지 시키는 역할. 디버깅 기법 중 하나. 명령을 실행하는 CPU를 일시 중지, 한 바이트 명령어를 사용해 디버깅 대상 프로세스의 실행을 중지 보통 어플리케이션을 디버깅할 때 사용되는 브레이크 포인트, 일반적 코드 : 0xCC, INT 3 동작방법 1. 현재 주소의 opcode를 뽑아서 브레이크 포인터 테이블에 저장 2. opcode를 0xCC로 교체 3. 명령어 실행 4. 원래의 opcode로 돌려놓음 종류 - 일회성 브레이크 포인트 : 브레이크 포인트 리스트에 정보가 들어가고 브레이크가 수행되고 나면 리스트에서 정보가 제.. 2022. 1. 14. 어셈블리어/Assembly_3_엔디언 어셈블리어/Assembly_3_엔디언 3. 엔디언(Endianness)이란? 메모리와 같은 1차원 공간에 C언어에서 배열을 사용하듯 연속된 대상을 열거하는 방법이다. 이것은 빅 엔디언(Big-endian)과 리틀 엔디언(Little-endian)으로 나누어질 수 있다. 빅 엔디언(Big-endian) 아래의 그림에서 볼 수 있듯이 Register에 저장된 값 0A 0B0C0D값을 메모리에 차례대로 최상위 바이트(MSB)부터 차례대로 저장하는 방식이다. ■ 장점 1. 디버그를 편하게 해주는 경향이 있다. (사람이 숫자를 읽고 쓰는 방법과 같기 때문) 2. TCP/IP는 16비트와 32비트 정수에서 빅 엔디안 방식을 사용한다. 3. 숫자 비교 시, 유리 4. UNIX에서 사용하는 바이트 오더 리틀 엔디언(L.. 2022. 1. 14. 어셈블리어/Assembly_2 어셈블리어/Assembly_2 2. 어셈블리어(Assembly language)란? - 기계어와 1대1 대응되는 컴퓨터 프로그램의 저급 언어. 어셈블러(Assember)란? - 어셈블리어로 작성된 소스 코드를 기계어로 변환하는 프로그램. 어셈블리어 구조 CPU는 2진수로 모든 것을 처리하는데 어셈블리 명령어들도 2진수로 되어 있다. 하지만 2진수로 된 것은 알아보기가 힘들어 mov, add와 같은 형태로 변환하여 보여진다. mov %eax %ebx는 C언어로 보면 ebx = eax의 경우와 같다. eax에 저장된 값을 ebx에 할당한다. 어셈블리어 문법 (Intel vs AT&T) Intel 방식 - 가독성이 뛰어남. - 윈도우 환경에서 구동. - 오퍼랜드 위치 : mov dest, source - 메모.. 2022. 1. 14. 어셈블리어/Assembly_1 어셈블리어/Assembly_1 1. 레지스터란? CPU 내부에 존재하는 작은 고속의 메모리이다. 레지스터의 종류 > 위 레지스터들은 범용 레지스터, 인덱스 레지스터, 포인터 레지스터라고 한다. > 32비트 환경에서는 첫 글자가 E(Extended)로 시작한다. > 64비트 환경에서는 첫 글자가 R(Register)로 시작하고 32비트의 레지스터를 포함한다. 범용 레지스터 AX(Accumulator) : 연산에 사용 BX(Base) : 메모리 주소 지정 시 사용 CX(Counter) : 반복과 같은 상황에 사용 DX(Data) : EAX와 함께 연산, 부호확장 인덱스 레지스터 SI(Source) : 메모리를 이동 및 비교 시 해당 주소 DI(Destination) : 메모리 이동 및 비교 시 목적지 주소 .. 2022. 1. 14. 이전 1 다음 반응형