일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Forensic #CTF #디지털포렌식 #disk forensic
- 탈중화
- 파일 접근 권한 #linux #chown #chmond #umask #명령어
- Forensic CTF #disk Forensic #windows file analyzer #WFA #Codegate 2012 F100
- Injection #Reflected #웹취약점
- 메소드
- evm
- #정보보안 #어셈블리 #저급언어 #기계어 #it #정보보안
- 포렌식
- 프로그래밍
- 자바
- EnCase #mount #Forensic #image mount
- forensic
- java
- 코딩
- 디지털포렌식챌린지 #dfchallenge #디지털포렌식 #Forensic
- PYTHON
- 객체
- 파이썬
- 안드로이드 #서비스 #안드로이스 서비스 #Android #java
- 비박스 #웹취약점분석 #버그바운티 #bee-box #웹 #모의해킹
- 안드로이드 #스레드 #핸들러 #예제
- 정보보안기사 #정보보안산업기사 #클라우드컴퓨팅 #보안 #컴퓨팅보안
- It
- HTML Injection #bWAPP
- CIDR #서브넷 #Network #ip 주소고갈
- 디지털포렌식 연구회 워크샵 #디지털포렌식 #디지털포렌식챌린지 #Forensic #ctf #정보보호학회
- 디지털 포렌식
- 정보보안기사 #정보보안산업기사 #2020년 정보보안기사 #시험일정
- snedmail #linux #정보보안기사 #정보보안산업기사 #mail protocol
- Today
- Total
목록프로그래밍언어/리버싱 입문 (12)
Jsecurity
Crackme 1 프로그램 실행 프로그램을 실행하면, CD-ROM이 아니라 실행할 수 없다는 에러 경고창이 뜬다. OllyDbg 분석 OllyDbg에 실행파일을 로드했을때 나오는 화면이며 내용은 그렇게 길지 않은 프로그램인것을 알 수 있다. 풀이 1 이 프로그램이 정상적으로 실행이 되려면 주소 "00401024"의 내용 "JE SHORT abexcm1. 0040103D" 분기문이 아래의 통과 메시지로 넘어가야한다. 그렇다면, 현재는 통과 메시지가 아닌 에러 메시지의 분기로 간다는 것이다. 그렇기 때문에 "JE" 분기문을 변경 한다. "JE SHORT abexcm1. 0040103D"의 내용을 "JNZ SHORT abexcm1. 0040103D" 또는 "JMP SHORT abexcm1. 0040103D" ..
개요 - 레지스터는 CPU에서 사용하는 고속의 기억장치다. CPU는 연산을 수행하기 위해 메모리에 있는 데이터를 CPU 내부에 있는 레지스터로 가지고 온다. 연산 중간에도 레지스터에 데이터를 저장한다. - 인텔 x86 CPU의 기본 구조인 IA-32 아키텍처에서는 9개의 범용 레지스터를 제공한다. 프로그램에서 사용하는 EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP 레지스터와 운영체제에서 사용하는 EIP 레지스터다. 이 밖에도 다양한 레지스터를 제공하고 있다. 레지스터 종류 EAX (Extended Accumulator Register) - 곱셈과 나눗셈 명령에서 사용되며, 함수의 반환값을 저장한다. EBX (Extended Base Register) - ESI나 EDI와 결합해 인..
cmp (compare) - 두 피연산자를 비교하는 명령어 - 레지스터나 메모리의 값을 변경하지 않는다 - 플래그 레지스터에만 영향을 준다 (flag reguster - 상태 레지스터) -> SF (부호), CF (올림수), ZF (0, 두개의 비교값이 같을 때) 결과가 0인 경우 -> SF:0, CF:0, ZF: 1 결과가 음수인 경우 -> eax SF:1, CF:0, ZF:0 결과가 양수인 경우-> eax > ebx => SF:0, ZF:0, CF:0 jmp 명령어 - 조건없이 분기하는 명령어 - 제어를 전달하는데 일반적으로 사용되는 명령어 - JMP 계열 명령어들은 플래그 레지스터의 플래그를 보고 명령어 수행 조건 분기 명령어 (부호없는 데이터) 명령어 조건(CMP) 비교 Fulln..
#Shift 연산 -사칙연산 만큼 자주 논리연산을 사용한다. -4비트씩 이동이 필요하다. 4, 8, 16, 32 비트 단위로 사용 ※ 종류 shr (shift right) - 오른쪽으로 1비트씩 이동 ex) shr ax, 4 shl (shift lenft) - 왼쪽으로 1비트씩 이동 ex) shl ax, 4 #shift 연산 예제 #AND, OR, XOR, NOT 연산 #and, or, xor operand1, operand2 operand1, operand2 - 연산대상을 레지스터, 메모리, 상수 모두가능 - 모두 메모리인 경우는 연산 불가능 연산 결과는 operand1에 저장 #not operand1 Operand1 -연산대상으로 레지스터, 메모리, 상수 모두 가능 - 연산결과 저장 이진수 형태로 숫..
DIV / IDIV div(divide) – 부호없는 데이터에 사용 idiv(integer divide) – 부호있는 데이터에 사용 기본적인 나눗셈 연산 • 워드/바이트 , 더블워드/워드, 쿼드워드/더블워드 형식 [라벨:] div / idiv 레지스터 / 메모리 워드/바이트 AL – 몫을 저장 - 부호가 없는 경우 : 최대 +255(FFH) - 부호가 있는 경우 : 최대 +127(7FH) AH – 나머지를 저장 더블워드/워드 쿼드워드/더블워드 #제수[레지스터] : 피젯수[레지스터] 명령어 제수 피제수 몫 나머지 div cl 바이트 ax al ah div cx 워드 dx:ax ax dx div rbx 더블워드 rdx:rax rax rdx #제수[메모리] : 피젯수[레지스터] 명령어 제수 피제수 곱 나머지 ..
MUL / IMUL - mul -> 2진수 데이터의 곱셈에서 데이터가 부호가 없을 때 사용 - imul -> 2의 보수일 때 사용, 즉 부호가 있을 때 사용 형식: [라벨:] mul / imul 레지스터 / 메모리 - 피연산자는 레지스터/메모리 여야 하며, 즉시 값, 상수 값은 피연산자로 사용할 수 없다. - 곱셈 연산 - 바이트 * 바이트 , 워드 * 워드, 더블워드 * 더블워드 바이트(Byte) 곱셈 워드(Word) 곱셈 더블워드(dword) 곱셈 실습1 #레지스터간 곱셈, 레지스터와 메모리 간의 곱셈 %include "io64.inc" section .data section.bss mul_reg resd 1 mul_mem resd 1 a resd 1 section .text global CMAIN ..
# ADD와 SUB명령어 add - 두 레지스터의 내용을 더하거나, 레지스터와 메모리 변수의 내용을 더하는데 사용되는 명령어 - 메모리 변수 사이의 직접적인 ADD 명령 실행은 불가능하다. 형식] add 목적지 근원지 ex) add, ax, bx ; ax와 bx의 내용을 더해 ax에 저장 add, wrd, cx ;wrd와 cx의 내용을 더해 wrd에 저장 add, cl, 10 ;cl의 내용에 10을 더해서 cl에 저장 근원지 오퍼랜드 목적지 오퍼랜드 (add, sub) 일반레지스터 메모리 변수 일반 레지스터 가능 가능 메모리 변수 불가능 상수 가능 sub - 두 레지스터의 내용을 서로 빼거나, 레지스터와 메모리 변수의 내용을 서로 빼는데 사용되는 명령어 - 메모리 변수 사이의 직접적인 sub 명령 실행은..
※ 어셈블리 명령어의 구성 L1 : mov %eax , %ebx ;comment Label 작동 코드 제 1 오퍼랜드 제 2 오퍼랜드 설명문 ※ 주소 지정 방식의 이해 $1. 레지스터 주소 지정 : 레지스터의 주소 값을 직접 지정 복사, 처리 속도 가장 빠름 MOV EDX, EAX => EAX 레지스터의 내용을 EDX레지스터로 복사 $2. 직접 메모리 주소 지정 : 가장 일반적인 주소 지정 방식 보통 피연산자 하나가 메모리 위치를 참조하고 다른 하나는 레지스터를 참조.(예) DS:[8088h]와 DS:[1234h]는 각각 ‘세그멘트:오프셋’ 형식의 메모리에 직접 접근하는 방식 MOV AL, DS:[8080h] MOV DS:[1234h], DL $3. 레지스터 간접 주소 지정 : '세그먼트 : 오프셋' 형..
#어셈블리어의 구조 Intel 문법과 AT&T 문법이 있다. 윈도우에서는 Intel 문법 사용, 리눅스에서는 AT&T 문법 사용Intel 문법에서는 목적지 (destination)가 먼저 오고 원본(source)이 뒤에 위치 AT&T에서는 반대. #Intel 문법에서 어셈블리어의 명령 형식 Label레이블 MOV작동 코드 BX제2피연산자 AX제1피연산자 ;comment설명 #AT&T 문법에서 어셈블리어의 명령 형식 Label레이블 MOV작동 코드 %AX제1피연산자 %BX제2피연산자 ;comment설명 인텔사와 AT&T의 어셈블리언어의 문법은 1피연산자 , 2피연산자의 위치가 반대이다. (유의) #어셈블리어 데이터 타입 db : 바이트(Byte) : 1바이트(8비트) 데이터 항목dw : 워드(Word) :..
# 프로그래밍 절차# 프로그래밍 언어A = A + 1 (고급언어) 변수 A에 1을 더한다. MOV AX, A ADD AX, 1 (저급언어)MOV A, AX 변수 A를 AX 레지스터로 가져온다 AX 레지스터의 내용에 1을 더한다.AX 레스스터의 내용을 A에 저장한다. 10100001 00000010 00000000 00000001 00000000 00000000 (기계어)10100011 00000010 00000000 어셈블리어 코드를 명령어 형식에 따라 기 계어 코드로 변환하면 9바이트의 실행코드가 만들어진다. # 고급언어와 저급언어의 특징 고급언어의 특징 •프로세서 종류에 상관없이 실행할 수 있다.•프로세서에 대한 사전 지식이 필요 없다.•문법이 간단하고 이해하기가 쉽다.•프로그램 코드의 양이 적고 디..