본문 바로가기

Reversing

(9)
09. Anti-Debugging 1. Anti-Debugging? 안티디버깅이란 말 그대로 디버깅을 힘들게 하는 기술을 말한다. 그렇다면 디버깅을 힘들게해서 무엇을 얻어낼 것인가?프로그램의 코드를 올리디버거등의 도구를 이용한 디버깅하는 것을 방해하는 것이다.상용 프로그램에서 사용되며, 악성코드에서 사용되기도 한다. 악성코드에서 사용될 경우, 분석가의 입장에서는 악성코드의 행위를 파악하기 힘들어진다는 점이 존재한다. 따라서, 안티디버깅을 효율적으로 해제하여 악성코드의 악성행위를 파악하는 것이 분석가의 자질로서 필요하다. 안티디버깅의 유형에는 Static 유형과 Dynamic 유형이 존재한다. 2. Static Anti-Debugging Static 안티디버깅의 특징은 프로그램의 첫 실행에서 디버거를 탐지하는 것이다. 그 후에는 더이상 탐..
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..