본문 바로가기

전체 글

(126)
[어셈블리 언어] SUB 명령어 ( ↔ ADD ) ※ SUB ( ↔ ADD ): 첫번째 operand의 값을 두번째 operand의 값과 -연산하여 그 결과를 다시첫번째 operand의 메모리 공간에 저장한다.따라서 첫번째 operand는 저장할 수 있는 공간인 reg 혹은 mem이 되어야 한다. SUB reg, reg ex) SUB EAX, EBXSUB reg, mem ex) SUB EAX, [EBP-0x04]SUB mem, reg ex) SUB [EBP-0x04], EAXSUB reg, imm ex) SUB EAX, 0x0ASUB mem, imm ex) SUB [EBP-0x0C], 0x0A [그림 1] 소스코드와 그 실행 결과 위 소스코드에서 main함수의 스택 프레임을 그림으로 표현하면 다음과 같다. [그림 2] main함수의 스택 프레임 어셈블리..
[어셈블리 언어] ADD 명령어 ( ↔ SUB ) ※ ADD ( ↔ SUB ): 첫번째 operand의 값을 두번째 operand의 값과 +연산하여 그 결과를 다시첫번째 operand의 메모리 공간에 저장한다.따라서 첫번째 operand는 저장할 수 있는 공간인 reg 혹은 mem이 되어야 한다. ADD reg, reg ex) ADD EAX, EBXADD reg, mem ex) ADD EAX, [EBP-0x04]ADD mem, reg ex) ADD [EBP-0x04], EAXADD reg, imm ex) ADD EAX, 0x0AADD mem, imm ex) ADD [EBP-0x0C], 0x0A [그림 1] 소스코드와 그 실행 결과 위 소스코드에서 main함수의 스택 프레임을 그림으로 표현하면 다음과 같다. [그림 2] main함수의 스택 프레임 어셈블리..
[어셈블리 언어] DEC 명령어 ※ DEC : operand(피연산자)의 값을 1 감소. DEC reg ex) DEC EAXDEC mem ex) DEC [EBP-0x04] [그림 1] 소스코드와 그 실행 결과 위 소스코드에서 main함수의 스택 프레임을 그림으로 표현하면 다음과 같다. [그림 2] main함수의 스택 프레임 어셈블리 언어에서의 DEC a 는C 언어에서의 --a; 와 같다고 볼 수 있다.
[어셈블리 언어] INC 명령어 (+인라인어셈) ※ 인라인 어셈 _asm{INC a} 위와 같이 _asm의 영역(중괄호) 안에서는 어셈블리 언어를 사용할 수 있다.이것을 인라인 어셈이라고 한다.인라인 어셈은 상위 레벨 언어에서 어셈블리 언어를 사용할 수 있게 해준다. 어셈블리 언어에서 명령어는 대소문자를 구분하지 않으므로 대문자로 쓰든 소문자로 쓰든 상관 없다.그리고 한 라인에 한 명령어만 수행된다. ※ INC : operand(피연산자)의 값을 1 증가. INC reg ex) INC EAXINC mem ex) INC [EBP-0x04] [그림 1] 소스코드와 그 실행 결과 위 소스코드에서 main함수의 스택 프레임을 그림으로 표현하면 다음과 같다. [그림 2] main함수의 스택 프레임 어셈블리 언어에서의 INC a 는C 언어에서의 ++a; 와 같다..
리버싱에서의 레지스터란? ( +OllyDbg, 어셈블리어 기초 ) ※ 프로그램 실행 과정 : HDD -> RAM -> CPU 순으로 옮겨가며 처리된다. ※ 레지스터 : CPU 내부에 존재하는 고속 저장 장치. 프로그래밍의 관점에서 볼 때, 하나의 값을 저장할 수 있는 변수들 중 특별한 용도로 쓰이는 것으로 볼 수 있다. (레지스터는 CPU와 한 몸이기 때문에 고속으로 데이터를 처리할 수 있음) ※ OllyDbg: 리버싱에서 많이 사용되는 프리웨어 중 하나인 OllyDbg라는 프로그램은 디스어셈블리와 디버깅이 가능한 툴이다. OllyDbg로 실행파일(.exe)파일을 열었을 때, 다음과 같은 정보를 보여준다. 우측에 빨간색 네모로 표시된 곳에서 보여주는 내용은 레지스터, 플래그에 관한 정보이다.프로그램을 실행시켰을 때 CPU내부의 레지스터 안에 저장되는 정보들을 보여준다...
리버싱이란? 01 실행파일 생성 과정 (C언어로 코딩한 경우) 1. C언어로 소스코드를 작성. (ex. aaa.c 파일로 저장됨.)2. 컴파일러(Compiler)에 의해 소스코드가 기계어로 바뀐다.(ex. aaa.obj 파일로 저장됨.) - 컴파일3. 링커(Linker)에 의해 실행파일이 생성된다. (ex. aaa.exe 파일로 저장됨.) - 링크 우리가 Visual studio 같은 개발 툴로 빌드 과정을 거칠 때 일어나는 일이다. 빌드 : 2 , 3과정을 묶어서 처리함. (컴파일 + 링크) 02 리버싱 (리버스 엔지니어링 = 역 공학) 위와 같이 생성된 실행파일을 디스어셈블러를 이용해 어셈블리어로 바꿔버릴 수 있다.어셈블리어는 기계어(컴퓨터의 본래의 언어)에 가까운 언어이며, 기계어와 1:1 대응되는 언어이다.한..