전체 글 147

리버싱 05 - x86 Assembly

*모든 내용과 이미지의 출처는 x86 Assembly🤖: Essential Part(1) | Dreamhack 로그인 | Dreamhack dreamhack.io 어셈블리 언어 컴퓨터의 기계어와 치환되는 언어. CPU에 사용되는 ISA는 IA-32, x86-64 등 종류가 굉장히 다양함 -> 이 종류만큼 많은 수의 어셈블리어가 존재함. 해당 강의는 x64 아키텍처를 대상으로 하기 때문에 x64 어셈블리어만 공부함. x64 어셈블리 언어 기본 구조 명령어(Operation Code) + 피연산자(Operand) 명령어는 동사 역할, 피연산자는 목적어 역할 mov eax, 3 opecode = 대입해라 operand1 = eax에operand2 = 3을 주요 명령어 21가지 산술 연산(Arithmetic) ..

Dreamhack 2022.07.12

iframe

기본 형식 iframe 태그를 다루지 않는 브라우저에 의해 대신 출력되는 텍스트 src : 출력할 웹 페이지의 URL 주소 srcdoc : 직접 HTML 태그로 작성된 텍스트로서 출력될 내용 name : 프레임 윈도우의 이름. 다른 웹 페이지에서 target 속성 값으로 사용 width : 프레임의 폭, 픽셀 값, 디폴트 300 height : 프레임의 높이, 픽셀 값, 디폴트 150 브라우저 윈도우와 프레임 윈도우는 부모 자식 관계임. parent 윈도우 child 윈도우 top 윈도우 : 최상위 브라우저 윈도우 가장 최상위 윈도우 = top 윈도우 top 윈도우 안에 left frame윈도우와 right frame 윈도우가 child 윈도우로 들어감. upper와 lower 윈도우는 right fra..

리버싱 04 - Windows Memory Layout

*모든 내용, 이미지의 출처는 Background: Windows Memory Layout | Dreamhack 로그인 | Dreamhack dreamhack.io 메모리 레이아웃(Memory Layout) 프로세스 가상 메모리의 구성. *가상 메모리(Virtual Memory) : 프로그램 실행 시 운영체제에서 프로세스에게 사용 가능한 메모리 공간을 할당해주는데, 이 공간을 가상메모리라고 함. 운영체제가 하는 일 - 프로그램의 정보를 참조하여 저장된 데이터가 적절한 영역에 저장되도록 함. - 프로세스가 사용할 가상 메모리를 용도별로 구획. - 프로세스가 사용하는 데이터를 적절한 구획에 저장. -> 유사한 데이터끼리. 구획에 권한 부여. => 개발자가 프로세스의 메모리를 직관적으로 이해 가능함. 섹션: ..

Dreamhack 2022.07.10

리버싱 03 - 컴퓨터 구조, 명령어 집합 구조

* 모든 내용과 이미지 출처는 Background: Computer Architecture | Dreamhack 로그인 | Dreamhack dreamhack.io CPU : 컴퓨터 작동의 핵심이 되는 연산 처리. 저장장치 : 데이터 저장 GPU : 그래픽 데이터 처리 랜카드 : 네트워크 통신 처리 사운드 카드 : 소리 데이터 처리 컴퓨터 구조(Computer Architecture) 컴퓨터의 기본 설계. 서로 다른 부품들이 이 설계에 맞춰서 개발되고 조립되어 컴퓨터가 완성됨. 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 구성하는 방법. 명령어 집합구조(Instruction Set Architecture, ISA) CPU가 사용하는 명령어와 관련된 설계 인텔 x86-6..

Dreamhack 2022.07.10

리버싱 02 - 동적 분석과 정적 분석

* 모든 내용과 이미지의 출처는 Background: Static Analysis vs. Dynamic Analysis | Dreamhack 로그인 | Dreamhack dreamhack.io 정적 분석(Static Analysis) : 외적 관찰만으로 정보 알아냄. - 프로그램을 실행기키지 않고 분석하는 방법. 장점 1) 프로그램의 전체구조 파악 Easy. -> 어떤 함수로 구성됐는지, 함수들이 서로 갖는 호출 관계, 어떤 API를 사용하고 문자열을 포함하는지 등 2) 분석 환경 제약에서 자유로움. -> 안드로이드 apk 파일은 별도의 sw를 사용하지 않는 한 윈도우 시스템에서 실행 불가능. 동적 분석 번거로우나 정적 분석은 프로그램 실행 안해도 됨. 3) 바이러스와 같은 악성 프로그램의 위협으로부터 ..

Dreamhack 2022.07.10

리버싱 01 - Binary

리버싱 = 역공학 Good - 개발 중단 프로그램 패치 시. - 보안성 평가, 악성코드 분석 Bad - 크랙, 키젠 프로그램, 시리얼 넘버 생성기 -> 유료 프로그램이 어떤 방식으로 정품 인증을 하는지 알아냄. - 게임핵 기계어 : 0과 1로 이루어짐. -> 인간이 해석하기 어려움. 어셈블리어(Assembly Language), 어셈블러(Assembler) : 사람들이 이해하기 쉬운 언어로 어셈블리어 고안, 어셈블러는 어셈블리어를 기게어로 번역함. -> 단점 : 규모가 큰 프로그램 개발 어려움. 컴파일러와 고급언어 : 어셈블리어보다 더 프로그램 개발 효율을 높임 저급 언어 : 기게어, 어셈블리어 고급 언어 : C, C++, Go, Rust 등 프로그램 : 연산 장치가 수행해야 하는 동작을 정의한 일종의 ..

Dreamhack 2022.07.09

백준 2일차 - 2840번

c프로그래밍 공부를 열심히 했던 보람이 있다. c프 공부할 때 정삼각형, 이등변삼각형, 일반 삼각형 구별하는 문제가 있었는데, 그때와 비슷한 방식으로 조건문을 만들었다. 주사위 눈금 변수를 x, y, z로 정해서 받았다. 상금은 reward 변수로. 먼저 세 눈금이 다 같을 때를 첫번째 조건으로 정하고, 두번째 조건을 모든 눈금이 다를 떄로 했다. 세 눈금 중 두 개 눈금만 같은 걸 조건식으로 쓰려면 굉장히 코드가 길어지고 복잡하고 귀찮아지기 때문에 그건 굳이 조건문을 쓰지 않고 else로 처리했다. 오늘 너무 바빠서 한 문제밖에 못 풀었지만 어쨌든 조건문 문제들 다 풀어서 기분 좋다.

백준 2022.07.05

백준 1일차 - 14681번, 2884번, 2525번

14681번은 좌표를 입력하면 해당 좌표가 어느 사분면에 위치하는지를 출력하는 문제였다. C프로그래밍 시험 공부하면서 구조체였나 함수였나 하여튼 이 문제를 풀어본 적이 있어서 수월하게 풀었다. 처음에는 조건을 x0 이런 식으로 하려다가 오히려 더 코드가 복잡해질 것 같아서 크게 x가 음수일 대, 양수일 때로 나누고 조건문 내부에 y 기준으로 또 조건문을 만드는 코드를 작성했다. 백준 매우 까다롭다.. 2884번 답 출력에 공백 없다고 대차게 까인 게 한 3번... 일단 문제는 45분 일찍 알람시계 맞추는 문제다. 시간 문제 정말 까다롭다고 생각했는데 메모장 켜두고 좀 끄적이면서 열심히 고민해봤더니 어떤 식으로 코드를 짜야할지가 떠올랐다. 진짜 해결책 떠오르는 순간이 제일 행복해... 24시간 단위를 사용..

백준 2022.07.04

C++ 6주차 스터디 과제 1 : Template

오버로딩 : 하나의 함수로 다양한 타입을 처리하는 것. Ex) add()의 매개변수를 int형과 double형으로 사용. 템플릿 : 함수나 클래스를 일반화하기 위한 도구 템플릿 선언 1) template 2) template -> 권장되는 방식 *T : 제네릭 타입. 사용자가 원하는 이름으로 정해줌. 구체화 : 사용자가 원하는대로 정해둔 typename이 넣어주는 값의 자료형에 따라서 함수 자료형이 int, double 등으로 변함. 위 이미지에서처럼 typename SWING으로 정해뒀던 void myswap 함수가 main에서는 void myswap(int &a, int &b)로 구체화 및 참조에 의한 호출이 발생한다. 한 번 템플릿을 선언하고나서 템플릿을 계속 이용할 수 있을 줄 알았는데, 그러진 ..

C++ 2022.06.23