본문 바로가기

Reversing/▷ Study

(10)
[CodeEngn] basic 20 advance 문제 다시풀어보기 전에 기초 다질겸 basic 20번 문제를 다시한번 풀어보았다. 메인 함수보면 CRACKME3.KEY 파일이 있는지 확인 후 있다면 파일 데이터가 0x12 byte 인지 확인한다. 같은 디렉토리에 따로 18byte CRACKME3.KEY 파일을 만든다음 분석을 진행했다. 함수 두개만 중점적으로 보면 된다. 첫번째 함수이다. 대략 pseudo code로 나타내보면123456789101112131415161718 int file_data[18]; int sum = 0; int bl = 0x41; for (int i = 0; ; i++) { file_data[i] ^= bl; bl++; sum += file_data[i]; if (file_data[i] == 0) break; ..
angr 설치 전에 칼리에서 angr 설치하다가.. 오류 고치느라 몇일을 고생한 적이 있다. 이참에 우분투로 갈아탔는데 앞으로 칼리쓸 일은 없을거같다. 먼저 angr를 설치하기 위한 명령어 단계이다.1.sudo apt-get update2.sudo apt-get install virtualenvwrapper python2.7-dev build-essential libxml2-dev libxslt1-dev git libffi-dev cmake libreadline-dev libtool debootstrap debian-archive-keyring libglib2.0-dev libpixman-1-dev libqt4-dev graphviz-dev binutils-multiarch nasm libc6:i386 libgcc1:..
Retargetable Decompiler https://retdec.com위 페이지에서 제공하는 디컴파일 아키텍처는 Intel x86, ARM, MIPS, PIC32, and PowerPC 이다.전에는 웹 버전의 디컴파일 서비스가 작동되어 파일을 open 하고 간단히 디컴파일 소스를 다운받기 쉬웠는데 최근 들어가보니 과부하로 인해 웹 버전 디컴파일 서비스가 중단되었다.그래서 직접 Retargetable Decompiler's API를 사용하여 디컴파일 소스를 다운받는 방법을 소개합니다https://retdec.com/api/docs/위에 사이트에서 친절하게 모든 설명을 해준다 위 아키텍처 파일을 input 하여 디컴파일 소스를 받아오는 방법 1. 회원가입 후 API key 확인2. 리눅스 상에서 () 괄호안에 있는 내용은 직접 써넣으셔야 합니다..
ELF Simple Anti Reverser 흔히들 사용하는 Reversing 이라는 말은 Reverse Engineering, 역공학의 준말이다. 위키 백과에서는 역공학을 " 장치 또는 시스템의 기술적인 원리를 그 구조 분석을 통해 발견해 내는 과정이다 " 라고 정의한다. 또한 " 목적은 원본 생산의 절차에 관한 지식이 거의 없는 상태에서, 최종 제품을 가지고 디자인 결정 과정을 추론하는 것이다. " 라고 말한다. 어떤 행위를 하게 되면, 자연히 그 행위에 대한 결과가 발생한다. [ 행위 --> 결과 ] 라는 순서가 존재하는 것이다. 역공학이란, 행위가 결과를 만드는 일반적인 순서에 대조하여, 어떤 결과를 가지고 대상이 한 행동, 행위를 분석하는 과정이다. 전통적인 순학인 Forward Engineering 이 어떠한 개념을 실체화 시키는 것을 ..
프로그램 실행구조 프로그램 기본 실행구조 컴퓨터의 기본적인 구성요소는 CPU와 메모리 그리고 하드디스크이다. 프로그램을 만들어서 배포하면 프로그램을 실행할 수 있는 파일(exe)은 기본적으로 하드디스크에 저장된다. 윈도우에서는 실행파일을 PE파일 이라고 부른다. PE파일에 프로그램을 실행하는 데 필요한 기본 정보와 파일을 메모리 어디에 저장해야 할지 알려주는 배치 정보가 들어 있다. PE파일은 헤더와 보디로 구성되는데, 헤더에 이러한 중요 정보가 들어 있고 보디에는 코드와 데이터가 들어 있다. PE파일에는 exe, dll, ocx 등 다양한 종류가 있다. PE 포맷(헤더+보디)으로 구성된 실행 파일을 클릭하면 운영체제에 있는 로더는 PE 헤더에 있는 정보를 분석해서 PE 보디에 있는 코드와 데이터를 메모리에 배치한다. 메..
어셈블리와 C언어의 포인터 구문 형식 어셈블리와 C언어의 포인터 구문 형식 예를 들어 디버거에서 이런 어셈블리 코드를 본적이 있을것이다.MOV DWORD PTR SS: [EBP-4] , 1 이게 무엇인가 하니 C언어 에서는 포인터 개념이라고 한다.--------------------------------------------------------------------------------------------------- 어셈블리 언어 C언어 Type casting DWORD PTR SS:[EBP-4] *(DWORD*)(EBP-4) DWORD (4byte)WORD PTR SS:[EBP-4] *(WORD*)(EBP-4) WORD (2byte)BYTE PTR SS:[EBP-4] *(BYTE*)(EBP-4) BYTE ----------------..
Stack Frame(스택 프레임) 프로그램에서 선언되는 로컬 변수와 함수 호출에 사용되는 스택 프레임(Stack Frame)에 대해 공부 스택 프레임이란 ESP(스택 포인터)가 아닌 - EBP(베이스 포인터) 레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법을 말한다.ESP 레지스터의 값은 프로그램 안에서 수시로 변경되기 때문에 스택에 저장된 변수, 파라미터에 접근하고자 할 때 ESP 값을 기준으로 하면 프로그램을 만들기 힘들고, CPU가 정확한 위치를 참고할 때 어려움이 생긴다.따라서 어떤 기준 시점(ex. 함수의 시작)의 ESP 값을 EBP에 저장하고 이를 함수 내에서 유지해주면 ESP값이 아무리 변하더라도 EBP를 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근 가능 Stack Fra..
스택(Stack) 요약 스택의 고유 특성과 간단 요약 로컬 변수 저장, 함수 파라미터 전달, 복귀 주소 저장 등의 다양한 용도로 사용되는 스택 (디버깅 할때 스택 메모리를 확인하는 일이 매우 많음) 스택 메모리의 역할1. 함수 내의 로컬 변수 임시 저장2. 함수 호출 시 파라미터 전달3. 복귀 주소(return address) 전달 스택의 FIBO(First Input Last Output)구조 확인 스택의 특징 - 스택에 값을 입력하면(PUSH) 스택 포인터(ESP)는 감소하고, 스택에서 값을 꺼내면(POP) 스택 포인터는 증가한다. 이러한 스택의 특성 때문에 보통 "스택은 거꾸로 자란다"라는 표현을 쓴다.