본문 바로가기

반응형

분류 전체보기

(73)
x86-64 어셈블리어 어셈블리 언어프로그래밍 언어(C, C++, JAVA, Python) 보다 저수준 언어로 컴퓨터가 이해할 수 있도록 만든 언어.종류 : IA-32(intel 32bit), x86-64, ARM, MIPS어셈블리어(Assembly Language)기계어와 일대일 대응이 되는 저수준 언어사용자가 이해하기 어려운 기계어 대신에 명령 기능을 쉽게 연상할 수 있는 기호를 기계어와 1:1로 대응시켜 코드화한 기호 언어기계어(Machine Language)프로그램을 나타내는 가장 낮은 단계의 개념.중앙처리장치(CPU)가 직접 판독하고 실행할 수 있는 비트(0과 1의 조합) 단위로 쓰인 컴퓨터 언어 기본구조기본형태 : 명령어(옵코드) + 인자(오퍼랜드)명령어 (옵코드) 명령 코드 설명데이터 이동(Data Transfer..
x86-64 CPU 레지스터 레지스터중앙처리장치(CPU)의 내부에 존재하는 고속 메모리로, 중앙처리장치의 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 공간. 처리 후 해당 결과 값 역시 레지스터에 저장한 후 상황에 따라 메모리에 저장한다. 레지스터 단위OS 32/64bit : CPU가 한꺼번에 처리할 수 있는 데이터량을 말함  01. 범용 레지스터레지스터역할AX (Acumulator register)가장 많이 쓰이는 변수로, 각종 연산에 쓰임. 주로 리턴 값을 저장하거나 입출력 연산에 사용.DX (Data register)각종 연산에 쓰이는 변수로, 입출력 명령어와 곱셈과 나눗셈 연산에서 추가적엔 데이터로 사용CX (Counter register)반복문의 카운터로 사용, 미리 값을 정해놓고 0이 될 때까지 진행, 변수로 ..
CPU 구조 CPU (Central Processing Unit)CPU는 컴퓨터의 두뇌로, 명령어를 해석하고 연산을 수행하여 컴퓨터의 다른 하드웨어(HW)들을 제어하는 핵심 역할을 한다. 프로그램이 실행될 때, CPU는 메모리에서 명령어를 읽어 들이고 명령어를 해석 하여 필요한 연산을 수행한다. 그 결과를 다시 메모리에 기록하거나 다음 작업을 위해 다른 하드웨어 장치로 전송한다. Control UnitCPU의 운영 제어 역할을 하며, 하드웨어 컴포넌트 간의 효율적인 협업을 보장CPU에게 전달되는 바이너리 명령어를 해석다른 구성 요소들이 올바르게 동작하도록 제어프로그램 카운터를 통해 다음에 실행할 명령어의 위치를 추적명령어를 메모리에서 가져와 Fetching, Decoding, Execution 진행ALU (Arith..
PE 파일 구조 01. PE (Portable Executable)Microsoft의 운영 체제 Window OS에서 지원되는 실행 파일의 구조파일이 다른 곳으로 옮겨져도 실행 가능하도록 만든 포맷으로 다양한 운영체제에서의 이식성을 보여준다는 의미에서 Portable Executable이라고 불림Window Loader가 코드를 관리하는 데 필요한 정보를 캡슐화한 데이터 구조체코드 정보, 애플리케이션 유형, 필요한 라이브러리 함수, 메모리 공간 요구사항 정보 포함참조할 DLL, API import 테이블, 자원 관리 데이터, TLS 데이터 포함1.1 PE 파일 종류실행 파일 계열 : EXE, SCR(Screen Saver)라이브러리 계열 : DLL, OCX(Active X), CPL, DRV드라이버 계열: SYS, VX..
[Dream Hack - Reversing] Simple Patch me 문제 해석main 함수dword_40404C 값이 0 으로 시작해서 0x2237까지 증가하면서 while문이 동작하고 있다. sleep(0xE10u) 함수를 사용하여 한번 증가할때마다 1시간씩 걸리는 것을 확인할 수 있다.두가지 방법으로 기다리지 않고 진행하도록 만들 수 있을 것 같다. dword_40404C에 0x2237보다 큰 값을 넣는 방법sleep 함수에 0을 넣는 방법방법 선택을 위해 sub_401196 함수를 살펴보자  sub_401196 dword_40404C = 0x2238 로 세팅하는 방법으로도 가능해 보인다.sleep(0) 을 설정하는게 간단해 보여 이 방법을 사용하고자 한다. 풀이 방법 a) dword_40404C = 0x2238 세팅ELF 파일 포맷이므로 Linux 환경에서 pwnd..
[Dream Hack - Reversing] Simple Counter 문제 해석파일 실행 결과 IDA수도 코드를 살펴보면 i는 10에서 0까지 반복하면서 출력되고, i=3일때, src에 어떤 스트링이 복사되는 것을 확인할 수 있다.flag_gen 함수는 IDA View에서 찾을 수 있었다. 동작과정을 요약하면 아래와 같다.loc_15A0 : i와 0 비교.→ i > 0 : 반복문 수행 → i ≤ 0 : i 와 5 비교.     → i == 5 : flag_gen 실행      → i ≠ 5 : 프로그램 종료.i를 중간에서 5로 바꿔주면 flag_gen 함수를 실행시킬 수 있다. pwndbg$ break main $ run 에서 와 5가 비교되는 것을 볼 수 있다. breakpoint를 걸고 실행한다.$ break *main+278$ continue $ x/1 $rbp-40..
[리버싱] kali - pwndbg 세팅 & 기본 명령어 ELF분석을 위해서 kali에 gdb 환경을 세팅하고 pwndbg 플러그인을 설치하고자 한다.환경 세팅모두 관리자 권한이 있는 상태에서 실행해야 한다. 권한 없이 실행했다가 pwndbg 플러그인이 동작하지 않아서 애를 먹었다.gdb 설치$ sudo su$ apt-get install update $ apt-get install upgrade -y$ apt-get install gdb -ypwndbg 설치$ apt-get install python3.12 python3.12-venv python3-pip python3-dev git libssl-dev libffi-dev build-essential -y$ python3 -m pip install --upgrade pip$ python3 -m pip ins..
[Dream Hack - Web] sql injection bypass WAF 문제 해석error based sql injection 문제와 달라진 점 중이 크게 두가지 보였다.keywords에 있는 문자열을 포함하는 경우, SQL 문이 실행되지 않는다.keywords = ['union', 'select', 'from', 'and', 'or', 'admin', ' ', '*', '/']def check_WAF(data): for keyword in keywords: if keyword in data: return True return False더 이상 에러문을 출력하지 않는다.uid = request.args.get('uid') if uid: if check_WAF(uid): return 'your r..

반응형