보안/리버싱

[리버싱] 리버싱이란

antoroong 2025. 2. 12. 00:57

리버싱은 개발에 가까운 보안이다

많이 어렵다고 한다

그만큼 매력있는 수업

리버싱은 개발도상국에서 많이 더 사용됨

 


reverse 리버싱

reverse engineering 역분석, 역공학

개발적인 관점 :

  • 개발시 필요한 지식 습득 을 위해 소프트웨어 분석

보안적인 관점 :

  • 프로그램의 취약점 파악 후 악성코드 제작 또는 분석하기 위한 선행작업
  • 백신업체에서 악성코드 분석 후 백신 제작
  • 소프트웨어의 암호화 알고리즘 분석

저급언어 :

  • 어셈블리언어 (CPU)

고급언어 :

  • C언어 자바 Python

CPU 구조

  • CPU : Central Processing Unit 중앙처리 장치
  • 역할 : 명령어 해석 연산을 통해 다른 HW 제어
  • 세분화 작업을 하면 ALU, Control Unit Register, Bus Interface 4개로

 

 

 

Control Unit

CPU에게 전달되는 바이너리 명령어를 해석

ALU : Arithemetic Logic Unit : 산술 논리 장치

CPU 연산 담당 (산술연산, 논리연산)

산술 연산 : 사칙연산

논리 연산 : and or

Register(중요)

  • ALU에서 연산된 데이타를 저장하는 곳, 저장 공간
  • CPU 내부의 저장장치
  • 용량은 적지만 데이타 접근거리 가까워 속도 빠름
  • 리버싱에서 가장 중요한 개념

 

 

Bus Interface

  • HW간에 데이터를 전송하고 입력하는 통신경로
  • 장치간 통신하는 방법이 틀려서 각각의 버스인터페이스 존재
  • address, data, control 3가지 버스가 있고 이를 bus system이라함

address bus : 메모리 주소값 전송을 통제

  • data bus : 메모리 주소안의 데이터를 통제
  • control bus : cpu와 memory간의 데이터 송수신을 통제

clock pulse

  • CPU가 일하는 타이밍 조절
  • CPU가 HW보다 성능이 좋으면 장치 부하가 걸리고
  • CPU가 HW보다 성능이 낮으면 쓰레기 데이타를 가져갈수가 있다
  • CPU와 구성요소의 박자를 맞추어 효율적인 일을 하도록 도와줌

메모리 구조(HW, RAM, cash , register)

  • 메모리는 프로그램이 실행되는 동안의 데이터 입출력
  • CPU와의 거리와 속도 저장크기 따라 틀림

 

 

[메모리 접근]

  • CPU - register - cash - RAM - HDD
  1. 메모리는 CPU와 가까울 수록 속도가 빠르고 멀수록 느리다
  2. 메모리는 CPU와 가까울 수록 공간이 작고 멀수록 용량이 커진다

여기서 문제 ? 왜 resigter가 공간이 크면 되잔ㅋㅎ아?

항상 문제는 $이나 가격을담당할 수 없다

그래서 보통 HDD에 데이타를 저장 ⇒ 실행시 RAM과 cash

최종적으로 레지스터로 이동하면서 CPU연산을 함

 

 

 


가상메모리(SWAP)

HP : 50 ← 보스 공격력 : 100

실드 : 150

 

150+50← 보스 공격력 : 100 =100이 남네 ?

 

RAM의 부족함을 HDD로 확장하는 개념

이로인해 RAM크기에 상관없이 메모리 공간을 할당함

 

가상메모리 윈도우에서 보는 법

 

 

 

 

 

실제 RAM 2G (본통 2배)

  1. HDD 저장된 파일 실행(32bit)
  2. RAM에서 데이터가 프로세스로 변신함
  3. 프로세스는 4G의 메모리를 할당받는다 (가상메모리)

위에 내용처럼

가상메모리는 CPU가 실제 메모리가 2G더라도

4G로 느낄 수 있도록 해준다

이것을 MMU(memory management unit)이라고 한다

CPU는 MMU를 통해 메모리공간을 할당 받는다

메모리 할당시 1개의 블록은 4byte다

만약 15byte를 요청하면 4개의 블록을 할당한다

블록 크기를 정해놓고 할당하면 공간 낭비가 적고 연산이 적어져

속도가 빨라짐

블록의 명칭

물리 메모리에서 page frame,

가상 메모리에서 page


CPU, 가상 메모리, 물리메모리 흐름

  1. CPU가 0x41000 번지에 저장하라 명령
  2. MMU가 0x41000 번지에 해당하는 페이지프레임(블록)을 물리 메모리에 할당

순간 물리 메모리를 초과하는 연산이 들어오면 컴퓨터는 뻗어버릴 수 있다

하지만 HDD로 가상메모리를 만들어주면 단기적으로 대처가 가능하다

 

    3.2G의 물리메모리가 다차면 가장 오래된 페이지를 가상메모리에 저장하고 새로운 페이지를 물리 메모리에 적재

이후 저장된 가상메모리에 물리메모리에 있는 내용을 붙여서 완성시킴

 

가상메모리는 SWAP

가상메모리 작업을 Paging이라고 부른다

 

가상메모리가 프로세스들이 사용하는 저장공간을 사용하는 이유(보안과 관리)

 

보안 : 물리메모리에 도착 가상메모리 안에서 연산처리 후 운영체제에서 검사를 한다

다른 물리 메모리에 접근을 못하기 때문에 다른 프로세스에 영향을 줄 수 없음

 

 

관리 : 같은 방에서 두사람이 이동하면서 일한다고 생각해봄

분명 사고가 난다. 서로의 영역을 간섭하게 됨(블루스크린)

프로세스간 영역이 겹치지 않게 하기 위해서 사용

 

 

 

 

 


1bit , 8bit = 1byte

byte ordering

컴퓨터에서 메모리에 데이터를 저장하는 방식

데이터가 메모리에 저장되는 순서에 따라 2가지로 구분

Littile Endian(리틀 엔디언) ***

  • 낮은 주소에서 높은 주소로감
  • 보통 컴퓨터가 쓰는 방식

Big Endian(빅 엔디언)

  • 높은주소에서 낮은 주소로 감
  • 사람이 이해하기 더 편함
  • 애플은 처음에 빅엔디언 → 지금은 리틀 엔디언 ..ㅎ

DATA 0x12345678 저장

빅엔디언 12 34 56 78

리틀 엔디언 78 56 43 12

Big Endian (빅 엔디언)

데이터 상위 바이트부터 메모리에 적재(Network Ordering)

12 34 56 78

 

 

Little-Endian 방식

데이터가 하위 바이트부터 메모리에 적재(Host Ordering)

78 56 34 12

 

 

 

컴퓨터는 낮은주소 높은 주소 처리

낮은 비트열 먼저 들어와서 들어오는 족족이 연산을 바로핤 ㅜ있다

연산속도가 빠름

 

빅엔디언은

높은 비트열 먼저 들어와서 연산시 데이터를 다 받아야 한다

연산속도가 느리다.

빅엔디언 비교연산 시에는 높은 비트열 비교하면 되므로 유리하다 .

 

포인트 : 리틀엔디언은 낮은주소에 ㅈ높은주소로 데이타가 오더링 됨

연산속도가 빠르다

 

하나의 데이터 안에서 바뀐다 ex) 바이트 단위 - 하나의 데이터를 1byte로 본다

 


 

Reversing시 필수 Register

IA32 register (Intel Architenture 32 bit register 인텔에서만든 32비트 레지스터)

데이터 처리 시 32비트 크기의 데이터를 처리

32비트 크기의 주소를 사용한다 그러므로 CPU의 레지스터 크기는 32비트이다

악성코드는 보통 범용성을 고려햐 32비트로 만듬

CPU에서 레지스터를 사용하는 이유

  • 데이터(연산에 필요한 즈서, 연산자)의 저장공간 용도로 사용
  • CPU가 용도에 맞는 각가으 ㅣ레지스터들이 존재
  • 레지스터는 CPU 안에 구성되어 있기에 데이터를 고속으로 처리가 가능

 

 

'보안 > 리버싱' 카테고리의 다른 글

[리버싱] 16진수에 관하여  (0) 2025.02.13
[리버싱] x64dbg 실습 및 조작키  (0) 2025.02.13
[리버싱] x64dbg 실행 및 조작키  (0) 2025.02.13
[리버싱] x64dbg 설치  (0) 2025.02.13
[리버싱] 레지스터 정리  (0) 2025.02.13