본문 바로가기

Reversing

(16)
08. angr 1. angr? 먼저 angr 라는게 뭔지부터 말해보자.뭐 어떤 팀에서 만들어 모듈로 사용한다. 이런식의 말도 할 수 있지만 그런 내용은 블로그 혹은 기사 등에서 잘 찾아볼 수 있으므로 간단하게 얘기하고자한다.(작성자의 실력이 부족한 것도 한 몫한다.)지금까지 사용한 angr에 대한 결론은 복잡한 reversing 문제들 즉, 중첩 if 문이 너무 많거나 switch 문이 너무 많거나 혹은 어떤 조건을 만족시켜야만 풀 수 있는 문제들을 몇 줄의 코드로 손 쉽게 풀 수 있게 도와주는 도구이다. 2. install? 그럼 설치는 어떻게 하는가. 이 또한 다른 블로그 들에 많이 게재되어 있지만 설치 방법을 소개하고자한다. 필자는 리눅스 시스템을 기본으로 설명한다. 먼저,sudo apt-get updateapt..
07. arm 어셈블리어 정리 1. ASL, ASR, LSL, LSR, ROR, ROL ASL : 왼쪽으로 쉬프트 , 빈자리는 부호로 채움ASR : 오른쪽으로 쉬프트 , 빈자리는 부호로 채움LSL : 왼쪽으로 쉬프트 , 빈자리는 0으로 채움LSR : 오른쪽으로 쉬프트, 빈자리는 0으로 채움ROR : 오른쪽으로 로테이션ROL : 왼쪽으로 로테이션 2. MOV ex) MOV r0, [r1, r2] : r0에 r1+r2 주소 값을 읽어서 저장 MOV r0, r1, ROR #1 : r1을 오른쪽으로 한 비트 로테이션 후 그 값을 r0에 저장 3. 산술 명령어 ex) ADD r1, r2 #4 : r2에 4를 더해서 r1에 저장 SUB r1, r1, #1 : r1에서 1을 뺌 ORR r1, r2, r3 , LSL r4 : r3을 r4 만큼 왼쪽..
06. gdb 명령어 정리 01. 정보보기 - info [명령어] : 명령어에 대한 정보를 보여준다 ex) info functions -> 현재 실행 파일의 함수들을 보여줌 info break -> 현재 설치된 브레이크 포인트를 보여줌- p [변수명] : 해당 변수의 value를 출력- p $[레지스터명] : 레지스터에 들어있는 값 출력- p /[출력형식][변수명] : 출력형식에 맞게 변수값 출력 - 출력형식 - t : 2진수 - o : 8진수 - d : 부호없는 10진수 - u : 부호없는 10진수 - x : 16진수 - c : 최초 1바이트 값을 문자형으로 출력 - f : 부동소수점 - a : 가장가까운 심볼의 오프셋 출력 02. 소스보기 - l or list- list : main 함수를 기준으로 소스를 출력한다- list ..
05. 스택, 스택프레임 1. 스택(Stack) 스택의 구조나 부가적인걸 설명하기에 앞서서 스택의 기본을 설명하겠습니다. 스택은 일단 후입선출구조(FILO)로 마지막에 들어간게 제일 먼저 꺼내지는 특징을 지니고 있다.그리고 높은주소에서 낮은주소로 성장한다. 그림으로 살펴보면 대략 이런식으로 생겼다. 저 안에 들어있는건 신경쓸 필요없다.중요한 부분은 높은주소에서 낮은주소로 성장한다는 것, 그리고 저 옆의 esp라는 것이다.높은주소에서 낮은주소는 그렇다치자. 그럼 esp는 무엇일까? ESP(Extend Stack Pointer) 즉, 말 그대로 스택 포인터다. 스택이 현재 어디에 있는지를 가리키는 역할을 하는 레지스터다.그럼 저 esp는 어디에 쓰일까? 이 그림을 보자. 스택에 메인함수,3,2,function1(),1이 들어있다.현..
04. 함수 호출 규약 04. 함수 호출 규약 일단 함수 호출 규약에는 3가지 방식이 있다.시작하기에 앞서 함수 호출 규약을 알아보기위해 사용한 코드이다. 12345678910111213141516171819202122232425#include int __cdecl test1(int a1, int a2, int a3) { int result = a1 + a2 + a3; return result;} int __stdcall test2(int a1, int a2, int a3) { int result = a1 + a2 + a3; return result;} int __fastcall test3(int a1, int a2, int a3) { int result = a1 + a2 + a3; return result;} int main..
03. 패킹 & 언패킹 보호되어 있는 글입니다.
02. IAT & EAT IAT(Import Address Table) 프로그램에서 사용되는 라이브러리에서 어떠한 함수들을 사용하고 있는지 함수 명 함수시작 주소등에 관한 정보를 담고있는 테이블 1. IMAGE_IMPORT_DESCRIPTOR 구조체 typedef struct _IMAGE_IMPORT_DESCRIPTOR{ union { DWORD Characteristics; DWORD OriginalFirstThunk; }; DWORD TimeDataStamp; DWORD ForwarderChain; DWORD Name; DWORD FirstThunk; } IMAGE_IMPORT_DESCRIPTOR; OriginalFirstThunk : INT(Import Name Table)의 RVA 값INT는 IMAGE_THUNK_DATA..
01. PE File Format PE(Portable Executable) 파일 이름 그대로 옮겨다니면서 실행시킬 수 있는 파일을 말한다.초기 목적은 Microsoft사에서 윈도우와 기타 다른 운영체제(리눅스, Mac)와 이식성을 좋게 하기 위해서 만든 파일구조이다. 하지만 현재는 윈도우 운영체제 간 이식성이 좋은 파일로 사용된다. 종류? 실행 계열 : EXE, SCR 드라이버 계열 : SYS, VXD라이브러리 계열 : DLL, OCX, CPL, DRV오브젝트 파일 계열 : OBJ PE 파일의 종류에 대해 더 깊게 살펴보자 EXE : 그렇다. 윈도우를 쓰는 사람에겐 굉장히 익숙한 실행파일 바로 그것SCR : 화면 보호기 확장자. 윈도우에서 오랜시간 동작 X 시 나오는 화면 보호기 바로 그 파일의 확장자.SYS : 시스템 파일 확장자. ..