본문 바로가기

2. Reversing (리버싱)/2) 개념 정리

(8)
[2022.03.19] 어셈블리어, 레지스터 어셈블리어란? 어셈블리어(assembly language)는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어이다. 0과 1의 이진수로 프로그램을 하는 기계어는 인간의 관점에서는 컴퓨터가 바로 읽을 수 있다는 점만 빼면 장점이 없는 언어이기 때문에 이를 보완하기 위해 나온 언어가 어셈블리어이다. 기계어와 명령어가 1:1로 대응되는 단어들로 구성되어 있으며 저급 언어는 컴퓨터와 가까운 언어이기 때문에 컴파일을 해도 간단한 명령으로 실행돼서 실행 속도가 굉장히 빠르다. 하지만 배우기가 어렵고 유지보수가 힘들다는 이유로 특수한 경우를 제외하고는 사용되지 않고 있다. 컴파일 vs 어셈블 고급언어로 작성한 원시 프로그램을 컴파일러가 기계어로 번역하는 작업을 컴파일(Complie)한다고 하고, 어셈블리어로..
[2021.11.13] 패킹과 언패킹, UPX, 매뉴얼 언패킹, 코드 인젝션 보호되어 있는 글입니다.
[2021.09.18] abex crackme 1&2, 어셈블러 보호되어 있는 글입니다.
[2021.09.11] 리버싱을 위한 준비, codeengn basic 01 보호되어 있는 글입니다.
[2021.09.11] 코드 분석, PE FILE FORMAT 보호되어 있는 글입니다.
[ 2021.09.04 ] 01. 리버싱을 위한 기초 지식 1. 리버싱을 위한 프로그램 실행구조 컴퓨터의 구성 3요소 : CPU, 메모리, 하드디스크 실행파일 = PE파일 { 헤더 - 중요정보 저장 (기본정보와 { 보디 - 코드와 데이터 저장 배치정보를 담고있음) 로더가 헤더의 중요정보를 분석하고 보디에 있는 코드와 데이터들을 메모리에 배치한다. 메모리 - 코드 영역 : 프로그래 코드 저장 - 데이터 영역 : 정적 변수, 전역 변수 - 스택 영억 : 매개 변수, 지역 변수 - 히프 영역 : 동적 메모리 할당 코드 영역과 데이터 영역은 프로그램 로딩시 사용되고 스택 영역과 히프영역은 프로그램 실행시 사용된다. C언어는 MAIN()함수부터 프로그램을 실행하는 것처럼 PE 파일은 엔트리 포인트 위치부터 프로그램을 실행한다. 명령어 실행 : CPU에 있는 제어장치, 연..
[2020.04.14] Reversing.kr | AutoHotkey1 개념 정리 http://reversing.kr의 AutoHotkey1,2 문제를 푸는 도중 UPX 패킹과 관련된 부분이 나와서 UPX 패킹에 대해 개념 정리를 해보기로 했다. UPX 패킹? 패킹은 "실행 압축"이라고 표현할 수 있다. 실행 파일 내부에 있는 코드를 압축하여 평소에는 코드를 압축한 상태로 저장하고 있다가 파일을 실행하면 메모리에서 압축을 해제 시킨 후 파일을 실행시키는 기술이다. PE, UPX 프로그램 패킹의 흐름 UPX 패킹 확인 Exeinfo PE 툴로 UPX 패킹이 됐는지 확인할 수 있다. UPX 패킹 upx -o "생성될 패킹 파일 경로" "패킹에 사용할 파일 경로" UPX 언패킹 upx -d "언패킹 할 파일" UPX 패킹 파일 Ollydbg 분석 PUSHAD : CPU 레지스터 값들을 모두..
[2020.04.07] 리버싱 개념정리 - PEid EPsection과 DLL, IAT정보 PEid로 EPsection을 확인해보면, .text로 된 부분이 있다. 이 부분에 대해 알아보도록 하자 먼저, 간단히 설명하자면 PE파일에서 섹션을 이루는 부분이 있는데 .text라는 것은 그중에 실행코드를 담고 있는 부분이다 위의 설명에서 보면, .text섹션은 IAT 정보를 담고 있는 부분이라고 한다. IAT 정보가 무엇인지 알아보기에 앞서, DLL파일부터 파악할 필요가 있다. 과거 16비트 DOS를 사용하던 시절에는 DLL개념이 없고 라이브러리만 존재했다. 예를 들어 printf()함수를 사용할 때 컴파일러가 이 함수의 바이너리 코드를 라이브러리에서 그대로 가져와서 바로 프로그램에 삽입하는 형태였는데, 그러나 32비트 윈도우 환경을 사용하는 경우에는 매우 많은 라이브러리를 사용해야 하므로 이러한 ..