목록분류 전체보기 (173)
Iriton's log
문제 파일을 다운로드 하고 기존 사용하던 올리디버거로 파일을 열었는데, 실행이 안 됐다. 새로운 디버거 x64dbg를 설치하니 실행이 잘 됐다. 프로그램을 실행하면 그냥 Input: 이 뜨고 내가 문자를 입력하면 자동 종료가 된다. 디버거를 열어서 문자열 검색을 진행했다. 내가 찾으려고 한 건 Input이기 때문에 해당 코드로 이동한다. 어떤 함수를 호출하고, test 명령어가 나온 후 Correct와 Wrong으로 나뉜다. eax 값을 검사하여 값이 0이면 Wrong, 1이면 Correct를 띄우는 것이다. (TEST 연산이란 두 피연산자 사이에 AND 연산을 하고, 결과가 0인 경우 ZF가 1로 세팅되지만 결과값을 저장하지는 않는다. 단독 사용은 불가하며 JMP문과 같은 이동 명령어와 함께 사용된다...
*본 포스트는 '유선배 SQL개발자 과외노트' 도서를 참고하여 작성되었습니다. 01. 정규화 데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔터티를 작은 단위로 분리하는 과정 정규화 할 경우 데이터 조회성능은 처리 조건에 따라 향상되는 경우도 있고 저하되는 경우도 있다. 근데 입력, 수정, 삭제 성능은 일반적으로 향상된다. 하지만 그렇다고 모든 엔터티를 무작정 분리하면 안 된다. 따라서 일정한 룰이 존재한다. 제1정규형 모든 속성은 반드시 하나의 값만 가져야 한다. 유사한 속성이 반복되는 경우도 1차 정규화의 대상이 된다. 애플리케이션에서 데이터를 꺼내 쓸 때 불필요한 Split을 사용해야 하는 번거로움이 생길 수 있기 때문이다. 제2정규형 엔터티의 모든 일반 속성을 반드시 모든 주 식..
*본 포스트는 '유선배 SQL개발자 과외노트' 도서를 참고하여 작성되었습니다. 01. 데이터 모델의 이해 모델링이란? 데이터베이스의 모델링은 현실 세계를 단순화하여 표현하는 기법 모델링이 갖춰야 할 조건 현실 세계 반영 단순화하여 표현 관리하고자 하는 데이터를 모델로 설계 모델링의 특징 추상화 현실 세계를 일정한 형식으로 표현 아이디어나 개념을 간략하게 단순화 복잡한 현실 세계를 정해진 표기법으로 단순하게 쉽게 표현 명확화 불분명함을 제거하고 명확하게 해석할 수 있도록 기술 모델링의 세 가지 관점 데이터 관점 어떤 데이터들이 업무와 얽혀 있는지, 데이터 간의 관계가 어떤지에 대해 모델링 프로세스 관점 이 업무가 실제로 처리하고 있는 일은 무엇인지 또는 앞으로 처리해야 하는 일은 무엇인지를 모델링 데이터와..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. gdb & pwndbg gdb는 리눅스의 대표적인 디버거 오픈 소스 실습 https://github.com/scwuaptx/Pwngdb 가이드라인을 따라서 다운로드 후 // Name: debugee.c // Compile: gcc -o debugee debugee.c -no-pie #include int main(void) { int sum = 0; int val1 = 1; int val2 = 2; sum = val1 + val2; printf("1 + 2 = %d\\n", sum); return 0; } 해당 코드를 컴파일 한다. 컴파일 방법은 주석 참고 여기서 gcc 컴파일러 옵션의 -no-pie는..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. 어셈블리어와 x86-64 x64 어셈블리 언어 명령 코드 데이터 이동(Data Transfer) mov, lea 산술 연산(Arithmetic) inc, dec, add, sub 논리 연산(Logical) and, or, xor, not 비교(Comparison) cmp, test 분기(Branch) jmp, je, jg 스택(Stack) push, pop 프로시져(Procedure) call, ret, leave 시스템 콜(System call) syscall 피연산자 상수 레지스터 메모리 []로 둘러싸인 것으로 표현되며 앞에 크기 지정자가 추가될 수 있다. 타입 BYTE - 1 WORD - 2 DW..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. 리눅스 프로세스의 메모리 구조 세그먼트 리눅스에서는 프로세서의 메모리를 크게 5가지의 세그먼트로 구분한다. 용도에 맞게 적절한 권한을 부여할 수 있다는 장점이 있다. 코드 세그먼트 실행 가능한 기계 코드가 위치하는 영역으로 텍스트 세그먼트라고도 불린다. 프로그램이 동작하려면 코드를 실행할 수 있어야 돼서 r-x 권한이 부여된다. 쓰기 권한이 없는 이유는 공격자가 악의적인 코드를 삽입하는 것을 방지하기 위해서이다. 데이터 세그먼트 컴파일 시점에 값이 정해진 전역 변수 및 전역 상수들이 위치한다. CPU가 데이터를 읽을 수 있어야 하므로 r— 권한이 부여된다. data segment 쓰기 가능한 세그먼트 ..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. 컴퓨터 구조와 명령어 집합 구조 컴퓨터 구조 컴퓨터가 효율적을 작동할 수 있도록 HW, SW의 기능을 고안하고 구성하는 방법을 말함. 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조가 있다. CPU의 명령어에 대한 설계는 명령어 집합 구조(Instruction Set Architecture) - 명령어 설계 CPU의 하드웨어적 설계는 마이크로 아키텍처(Micro Architecture) - 회로 설계 폰 노이만 구조 중앙처리장치(Central Processing Unit, CPU) 연산, 제어 담당 산술논리장치 산술/논리 연산을 수행 제어장치 CPU 제어 레지스터 데이터 저장 기억장치 컴퓨터가 동작..
*본 포스트는 '리버싱 입문' 책을 참고하여 작성되었습니다. 1. 리버싱을 위한 프로그램 실행 구조 컴퓨터의 기본 요소 - CPU - 메모리 - 하드디스크 실행할 수 있는 파일(exe)은 기본적으로 HDD에 저장된다. 윈도우 상에서 이 실행 파일을 PE(Portable Executable) 파일이라고 부른다. PE 파일 구조 - Header: 중요 정보가 들어 있다. 해당 정보를 Loader가 분석해서 Body에 있는 Code와 Data를 메모리에 배치한다. - Body: Code, Data가 들어 있다. 메모리 구조 - 코드 영역: 프로그램 코드가 들어간다. - 데이터 영역: 정적 변수, 전역 변수가 들어간다.(고정된 값) - 스택 영역: 함수 호출 시 사용되는 매개 변수, 지역 변수가 들어간다. (코..