목록분류 전체보기 (420)
외로운 Nova의 작업실
안녕하세요. 디지털 포렌식 기초관련하여 디지털 포렌식에대해 정리해보려고합니다. 디지털 포렌식 관련하여 인프런 영상을 시청중이며 관심있으신 분들은 접속하여 직접 보시는 것을 추천드립니다. https://www.inflearn.com/course/%EA%B8%B0%EC%B4%88-%EB%94%94%EC%A7%80%ED%84%B8-%ED%8F%AC%EB%A0%8C%EC%8B%9D/ [무료] 기초부터 따라하는 디지털포렌식 - 인프런 | 강의 기초부터 따라하는 디지털포렌식 강의입니다. 강의를 따라하다보면 "물 흐르듯, 자연스럽게" 실력이 늘어가는 강의를 추구합니다., - 강의 소개 | 인프런... www.inflearn.com - 디지털 포렌식이란? 디지털 포렌식이란 과학적으로 증명된 사실을 가지고 디지털 세계인..
안녕하세요, 이번 시간에는 irvine32 라이브러리중에 문자열을 손쉽게 다룰 수 있게 해주는 스트링 프리미티브 명령어에대해서 알아보겠습니다. - 스트링 프리미티브 명령어 MOVSB, MOVSW, MOVSD : 데이터를 ESI가 가르키는 메모리에서 EDI가 가르키는 메모리로 복사한다. CMPSB, CMPSW, CMPSD : ESI와 EDI가 가르키는 두 메모리의 내용을 비교한다. SCASB, SCASW, SCASD : 누산기(AL,AX,EAX)의 값과 와 EDI가 가르키는 메모리의 내용을 비교합니다. STOSB, STOSW, STOSD : 누산기의 내용을 EDI가 가르키는 메모리에 저장합니다. LODSB, LODSW, LODSD : ESI가 가르키는 내용을 누산기로 적재합니다. 위 명령어들은 배열을 다루..
안녕하세요, 오늘은 프로시저를 정의하고 호출하는 강력한 수단에대해서 배워보도록 하겠습니다. - INVOKE, ADDR 우리는 지금까지 레지스터나 스택으로 프로시저에게 매개변수를 전달했습니다. 하지만 invoke 명령어를 이용하면 편하게 C언어에서 함수를 사용하는 것처럼 사용할 수 있습니다. 단, 매개변수는 역순으로 스택에 push됩니다. 바로 예제를 봐봅시다. .code invoke DumpArray, OFFSET array, LENGTHOF array, TYPE array 위 코드는 DumpArray 프로시저를 실행합니다. DumpArray 프로시저는 Array의 값들을 순서대로 콘솔에 출력해줍니다. 매개변수로는 배열의 주소, 배열의 길이, 배열의 크기를 주어야합니다. 위 코드는 MASM 어셈블러에 의..
안녕하세요, 이번시간에는 프로시저에서 사용할 수 있는 ENTER과 LEAVE 명령어 또, 지역변수를 만들어주는 LOCAL 명령어에 대해서 알아보겠습니다. - ENTER 명령어와 LEAVE 명령어 우리는 항상 스택을 사용하는 프로시저를 만들면 아래와 같은 코드를 사용하곤 했습니다. push ebp mov ebp, esp sub esp, numbytes//지역변수 공간 확보 위 3가지를 한번에 써주는 명령어가 ENTER 명령어 입니다. ENTER 명령어는 피연산자 2개가 있습니다. 하나는 지역변수 공간 확보를 위한 버이트수를 지정하는 상수이고, 다른 하나는 구문 중첩 수준 지정을 위한 상수입니다. 구문 중첩 수준 지정을 위한 상수는 항상 0으로 두면 됩니다. 그렇다면 예제를 하나 보도록 하겠습니다. plus..
안녕하세요, 이번시간에는 간접 참조에대해서 좀 더 정리를 해볼까합니다. LEA 명령어 간접 참조에 대해 설명하기 좋은 명령어가 있습니다. 바로 LEA 명령어 입니다. LEA 명령어에 대해 알기전에 한가지 물음을 던져 보겠습니다. 우리는 간접 참조를 한다고 하면 아래와 같이 사용합니다. .code mov eax, [ebx] 만약, ebx에는 0x12345678이라는 값이 들어있고, 0x12345678 번지주소에는 0xAABBCCDD 값이 있다고 치면 eax에는 어떤 값이 들어가게 될까요? 답은 0xAABBCCDD입니다. [ebx] -> [0x12345678] -> 0xAABBCCDD 로 변경됩니다. 즉, 0x12345678 번지주소에 있는 값으로 변경되는 것입니다. 그렇다면 만약 아래와 같은 코드는 어떻게..
안녕하세요. 이번시간에는 스택 프레임에대해서 알아보도록 하겠습니다. - 스택 프레임 스택 프레임은 스택안에서 함수에 의해 나눠진 공간을 의미합니다. 즉 main 프로시저안에서 프로시저1, 프로시저2, 프로시저3이 있고, 각 프로시저마다 스택에 변수를 넣는다면, 스택에는 프로시저1의 공간, 프로시저 2의 공간. 프로시저3의 공간으로 나눠지며, 각각을 스택 프레임이라고 할 수 있습니다. 스택은 상위주소에서 하위주소로 저장을 합니다. EBP는 Enhance Base Pointer로 각 스택 프레임의 첫 시작 포인터를 의미합니다. 스택프레임은 EBP가 저장된 주소를 기준으로 나뉘어지며, 항상 함수를 시작할때는 이전의 EBP값을 저장시켜주어야합니다. main 프로시저안에 프로시저1, 프로시저 2, 프로시저3 이있..
안녕하세요. 이번시간에는 double 시프트 연산자와 곱셈, 나눗셈에대해 배워보도록 하겠습니다. - SHLD 와 SHRD SHLD 는 shift left double 명령어로, 소스 비트와 목적지 비트를 연결해서 left 해줍니다. 예시를 한번 보겠습니다. .code mov al, 11110000b mov ah, 00001111b SHLD ah, al, 4 위 코드를 실행하게되면 ah - al 이 연결되며 왼쪽으로 시프트 하게됩니다. 즉, 00001111(ah) - 11110000(al) 이 상태에서 왼쪽으로 시프트 하는 거죠. 연산결과는 11111111(ah) - 00000000(al) 입니다. 왜냐면 마지막 4가 4번 하라는 뜻이기 때문입니다. 여기서 소비트는 al 이며, 목적지 비트는 ah라 부릅니..
안녕하세요. 이번시간에는 어셈블리어의 시프트 연산과 회전 명령어에대해 알아보겠습니다. - 시프트와 회전 명령어 SHL 왼쪽 시프트 SHR 오른쪽 시프트 SAL 왼쪽 산술 시프트 SAR 오른쪽 산술 시프트 ROL 왼쪽 회전 ORO 오른쪽 회전 RCL 왼쪽 캐리포함 회전 RCR 오른쪽 캐리포함 회전 SHLD 2배 정밀도 왼쪽 시프트 SHRD 2배 정밀도 오른쪽 시프트 - 논리 시프트와 산술 시프트 시프트 연산에는 총 2가지가 있습니다. 논리 시프트 연산과 산술 시프트 연산이죠. 시프트 연산을 할때는 항상 공백비트가 생깁니다. 이 공백비트를 0으로 채우는게 논리 시프트 연산이고, 이전의 숫자의 부호를 유지시키면서 채우는게 산술 시프트 연산이죠. 예를들어, 11111110b 를 오른쪽 시프트를 하게되면 0111..
안녕하세요. 이번시간에는 조건부 제어흐름을 조금이나마 쉽게 할 수 있는 디렉티브를 알아볼까합니다. 간단하게 말하면 고급언어에서 사용하는 if, while 문을 어셈블러 디렉티브로 작성하면 어셈블러가 그것을 해것하여 어셈블리어로 변경해줍니다. - .IF 디렉티브 고급언어에서 if 문과 같은 .IF 디렉티브에 대해서 알아보겠습니다. eax가1이면 ebx = 321, eax가 2면 ebx = 456, eax 가 3이면 ebx = 789를 넣는 어셈블리어 코드를 .IF 디렉티브를 이용해 짜보도록 하겠습니다. ;-----------------INCLUDE------------------------- ; include c:\assembly\irvine32.inc includelib c:\assembly\irvine..
안녕하세요. 이번 시간에는 문자열 암호화 예제 프로그램으로 XOR 문자열 암호화 프로그램을 어셈블리어로 작성해보도록 하겠습니다. 먼저 스터브 프로그램 작성을 해보도록 하겠습니다. ;this program is encryption or decryption ;-----------------INCLUDE------------------------- ; include c:\assembly\irvine32.inc includelib c:\assembly\irvine32.lib includelib c:\assembly\kernel32.lib includelib c:\assembly\user32.lib ;----------------------------------------------- .data Key = 231..