[정보 보안] 리버싱 6

[Reversing] 기초 이론_Assembly(어셈블리)_3

메모리 연산 명령어 > [ LEA / SCAS / STOS / REP ] LEA > Load Effective Address, MOV와 유사하지만 LEA는 주소 값을 복사하는 명령어이다. SCAS > Scan String, AL / AX / EAX에 저장되어 있는 값과 EDI에 저장된 주소를 참조한 곳의 값을 비교. (비교 후 Flag 값 설정) STOS > Store String, AL / AX / EAX에 저장되어 있는 값과 EDI에 저장된 주소를 참조한 곳의 값을 비교. (비교 후 Flag 값 설정) REP > Repeat String, ECX Register에 저장된 값 만큼 ECX가 0이 될 때까지 REP 뒤에 위치한 명령을 반복. CODE 이동 명령어 > [ JMP / CALL / RET ] ..

[Reversing] 기초 이론_Assembly(어셈블리)_2

산술 연산 명령어 > IA32에서 지원하는 산술연산 명령어의 종류는 아래와 같다. > [ ADD / SUB / MUL / DIV / IMUL / IDIV ] ADD ( 덧셈, + ) > add esp, 4 > Esp=esp+4 > 변수 공간을 해제할때 사용 SUB ( 뺄셈, - ) > sub esp, 8 > Esp=esp-8 주로 변수 공간을 확보할 때 사용이 된다. MUL ( 곱셈, * ) > eax와 연관 > Ex) mul ecx : eax*ecx > 위 예시의 연산 결과값은 edx:eax에 저장 (상위 비트 : edx, 하위 비트 : eax) IMUL (Interger Multiply, 부호 있는 정수의 곱셈, sign) > MUL과 IMUL 두 명령어 곱셈을 수행한다. ( Unsign과 Sign형..

[Reversing] 기초 이론_Assembly(어셈블리)

Assembly(어셈블리) > 어셈블리 언어는 언어들 중 낮은 레벨의 저급 언어로, 컴퓨터에 가장 가까운 언어. ( Reversing에서 사용되는 언어는 어셈블리 언어 ) > CPU 마다 고유한 어셈블리 언어를 갖고 있다. > 어셈블리 언어는 CPU가 사용하는 바이너리 코드 기계어를 사람이 보기 쉬운 형태로 문자화 시킨 것 > 프로그래밍 언어들은 컴파일러를 통해 기계어로 각자의 언어들을 CPU가 해석해서 실행할 수 있게 기계어로 변환된다. > 기계어를 CPU에 맞게 어셈블리 언어로 변환하여 Reversing에 사용된다. > 인텔 IA32 어셈블리 명령 포맷(가장 대중화) > 먼저 IA32 명령어 형태는 opcode(옵코드) 와 operand(오퍼랜드) 로 구성 OPCODE Operand1(목적지), Op..

[Reversing] 기초 이론_CPU와 레지스터_3

Main Register (메인 레지스터) > 주로 산술연산 명령어에서 데이터 저장 용도로 많이 사용된다. (그 밖에 특수한 용도로도 사용) > 32비트의 크기를 갖고 있고, 데이터를 효율적으로 사용하기 위해 구역을 나누어 사용한다. EAX (Accumulator) > 산술/논리 연산의 중심이 되는 레지스터이다. 곱셈, 나눗셈 명령에서 자동으로 사용한다. > 함수 리턴 값이 저장된다. EBX (Base Register) > 간접번지 지정에 사용된다. (EBX + EAX -> 64비트 연산) > 메모리 주소 지정을 확장, 포인터 ECX (Count Register) > 반복 명령어에서 반복 횟수를 지정에 사용된다. EDX (Data Register) > 간접 번지 지정에 사용된다. (EDX + EAX ->..

[Reversing] 기초 이론_CPU와 레지스터_2

Paging? > 총 32비트 선형주소 중 10비트의 Page Directory와 CPU CR3 Register를 통해 Page Table의 시작 주소를 얻는다. (Page Directory의 수 : 2^10 =1024) > Page Table의 시작 주소 + 이전 세그먼테이션에서의 선형주소의 Page Table 값 = 실제 물리 주소의 페이지 Byte Ordering? > 컴퓨터에서 메모리에 데이터를 저장하는 방식 > 데이터가 메모리에 저장되는 순서에 따라 2가지로 구분 > [ Little Endian(리틀 엔디언) / Big Endian(빅 엔디언) ] Big Endian > 데이터가 상위 바이트부터 메모리에 적재 (Network Ordering) > 높은 비트열 먼저 들어와서 연산 시 데이터를 다 ..

[Reversing] 기초 이론_CPU와 레지스터

Reverse Engineering? > 리버스 엔지니어링, 즉 리버싱은 "역공학", "역분석"을 말합니다. > 프로그램을 역으로 분석하여 원래의 소스코드를 얻는 과정입니다. 개발적인 관점에서의 리버싱? > 개발 시 필요한 지식 습득을 위해 소프트웨어 분석 보안적인 관점에서의 리버싱? > 프로그램의 취약점 파악 후 악성코드 제작 > 백신업체에서 악성코드 분석 후 백신 제작 > 소프트웨어의 암호화 알고리즘 분석 CPU의 구조 > CPU는 Central Processing Unit의 약자로, 중앙 처리 장치를 말합니다. > 메모리를 읽고 쓰거나, 명령어 해석 연산을 통해 다른 H/W를 제어합니다. CPU를 세분화해서 나누면 ALU / Control Unit / Register / Bus Interface 총..