본문 바로가기

역공학

아이다(IDA)의 Debugging - IF문 분석 C언어로 if문을 컴파일한 것을 IDA로 분석해보자. #include void main() { int a = 3; int b = 5; if( a > b) { printf(" a 가 크다 "); } else { printf(" b 가 크다 "); } } IDA 그래프 기능으로 본 해당 소스의 흐름이다. 가운데 지점에서 빨간선과 초록선으로 분기하고 각각의 일을 실행한 후 하나로 합쳐지며 프로그램이 종료된다. .text:00411390 push ebp 에 breakpoint를 설정한다. 디버그 모드로 전환(F9)하여 분석을 해보겠다. 다음은 Main함수이다. .text:00411390 main proc near ; CODE XREF: j_mainj .text:00411390 .text:00411390 var_.. 더보기
아이다(IDA)의 Debugging - FOR문 분석 C언어로 for문을 컴파일한 것을 IDA로 분석해보자. #include int main(void) { int i = 0; int result = 0; for ( i ; i 더보기
아이다(IDA)의 Debugging - Stack 분석 IDA의 디버깅을 통한 스택의 Stack 분석 분석해볼 프로그램은 IDA의 사용법을 알아보기 위해 예제로 썻던 것을 계속 쓰겠다. 다시 한번 설명하면 func( ) 함수에 세 개의 값을 파라미터로 전달하고 그 값들의 합을 리턴하는 프로그램이다. #include func(int a, int b, int c) { return a+b+c; } int main(void) { int sum; sum = func(1, 2, 3); return sum; } 프로그램이 실행되기 전의 Stack이다. ESP, EBP의 위치를 살펴본다. .text:00401060 push ebp : EBP가 가리키는 곳이 SFP(Saved Frame Pointer)로 변하고, 그 윗부분이 RET로 바뀌며 스택에 EBP값 12FFC0h값을.. 더보기
아이다(IDA) 사용법 디스어셈블러 : 바이너리 파일을 역으로 어셈블리어로 재구성해주는 툴 IDA가 거의 독보적인 자리를 차지하고 있고, 기능도 다양하다. 아이다(IDA)의 장점 : 1. 거의 모든 CPU를 지원 2. FLIRT(Fast Library Identification and Recognition Technology)는 기계어의 코드로부터 컴파일러 특유의 Library 함수를 산출해낼 수 있는 강력한 기능 3. 각종 플러그인 지원 4. Obfuscation(난독화) 코드도 해석이 잘됨 IDA 설정 : IDA의 설정 파일은 ..\IDA\cfg 경로에 있으며 세부 설정을 할 수 있다. 단축키(idagui)를 재설정할 수 있고 disable된 설정을 enable시킬 수도 있다. 디스어셈블 상태와 디버깅 상태에서 특정 어셈블.. 더보기
시스템 모니터링 툴 파일과 레지스트리 변화와 네트워크 상태, 프로세스의 상태를 분석하는 툴들을 소개한다. (2010. 11. 15. 월요일 확인결과 Filemon 이 없어지고 Process Moniter 가 생겼네요. 사용법은 똑같으니 다운받아서 아래처럼 사용하세요 ㅎㅎ) ProcessMonitor : 어플리케이션이 파일들을 어떻게 사용하는지 실시간으로 모니터링해서 오픈, 읽기, 쓰기, 삭제 등의 상황을 정확히 출력해준다. Filemon.exe를 실행하면 돋보기 모양 : 모니터링(Ctrl+E), 모리시계모양 : 필터링(Ctrl+L) 돋보기 모양의 모니터링 버튼(Ctrl+E)을 이용하여 모니터링 시작 · 중지를 할수 있다. 프로그램을 켜놓기만 하면 이벤트 정보가 로그로 쌓이지만 그 양이 너무 많아서 옵션을 주어야 한다. 먼저.. 더보기
리버싱 수행단계 리버싱을 위해서 툴을 사용하는 기본적인 순서이다. 1. 바이너리 분석 2. 문자열 분석 및 Api와 Dll, Event 분석 3. 모니터링을 통한 파일 및 레지스트리, 네트워크 패킷 분석 4. 디스어셈블러나 디버거를 이용한 분석 1. 바이너리 분석, 컴파일러 확인, 패커 여부를 파악한 후에 어떤 언어로 코딩되어 있는지 확인한다. 사용되는 툴 : PEID, HEX Workshop 2. 어떠한 문자열들이 들어있는지 대략적으로 살펴보고, 어떤 Api를 사용했는지, 어떤 Dll을 로딩하는지 주요 이벤트 시점의 위치에 대해서 분석한다. 사용되는 툴 : Dependency Walker, Dumpbin, Strings 3. 모니터링을 해본다. 외부의 시스템과 어떤 패킷이 오가는지도 확인한다. 사용되는 툴 : Proc.. 더보기
OllyDbg Command 명령어 사용 커맨드 명령을 사용하려면 특정 상황별로 유용한 api를 알고 있어야 한다. 파일 생성하거나 열기(Open) 16bit : CreateFile 32bit : CreateFileA wide : CreateFileW 파일 입출력(Read&Write) ReadFile : 읽기 WriteFile : 쓰기 파일 접근(Access) SetFilePointer 시스템 디렉터리를 얻어오는 함수 16bit : GetSystemDirectory 32bit : GetSystemDirectoryA wide : GetSystemDirectoryW .ini 파일과 관련된 함수 : ini 구성 설정에 관련된 함수들 16bit : GetPrivateProfileString, GetPrivateProfileInt, WritePrivat.. 더보기
리버싱을 위한 기초 지식 - 진수변환과 CPU 레지스터 1. 진수 변환 : 2진수, 10진수 16진수의 뜻과 자유롭게 변환하는 법을 소개한다. 10진수를 기준으로 해서 2진수와 16진수를 설명하겠다. 2진수는 0과 1로만 이루어져 있어서 1 다음이 한 자리 올림을 한 10이 된다. 2진수가 영어로 binary이기 때문에 뒤에 b를 붙인다. 16진수는 1부터 9, 그리고 A부터 F까지 순차적으로 사용하고, 10진수로 16이 되면 그때 자릿수를 올려 10이 된다. 16진수를 표현할 때는 영어로 hexadecimal이기 떄문에 뒤에 h를 붙인다. 그리고 구분을 더 편하게 하기위해서 앞부분에는 0을 붙인다. 10진수 2진수 16진수 10진수 2진수 16진수 1 1 1 10 1010 A 2 10 2 11 1011 B 3 11 3 12 1100 C 4 100 4 13 .. 더보기