Reversing 썸네일형 리스트형 PE구조 PE 구조 출처:http://www.malwareurl.com/ 예시-notepad.exe 용어 설명 VA : 프로세스 가상 메모리의 절대 주소 RVA : ImageBase에서부터의 상대 주소 RVA + ImageBase = VA DOS Header - DOS header 의 구조체의 크기는 40 출처:http://source.winehq.org/source/include/winnt.h#L2271 * e_magic : 4D5A ("MZ") e_lfanew : NT header 의 offset DOS stub - 존재 여부는 옵션이며 크기가 일정하지 않음 DOS stub이 없어도 실행에는 문제 없음 NT Header - NT Header는 3개의 멤버로 이루어짐 FileHeader 와 OptionalHea.. 더보기 PEB 정보를 이용한 Anti debugging PEB 정보를 이용한 Anti Debugging PEB구조체 중 안티 디버깅 기법에 이용되는 멤버 0x002 BeingDebugged : UChar 0x00c Ldr : Ptr32 _PEB_LDR_DATA 0x018 ProcessHeap : Ptr32 Void 0x068 NtGlobalFlag : Uint4B 1. BeingDebugged(+0x02) - 디버거 중일 때는 1로 셋팅 됨 mov eax, DWORD PTR FS:[0x30] 을 삽입하여 PEB의 주소를 eax 레지스터에 저장 저장된 주소 7FFDA000 을 보면 7FFDA002 주소에 1로 셋팅 되어 있다. ** PEB 주소 구하는 법 mov eax, DWORD PTR FS:[0x30] or mov eax, DWORD PTR FS:[0x18.. 더보기 SEH SEH 는 Windows OS 에서 제공하는 예외 처리 시스템 소스코드에서 __try, __except, __finally 키워드로 구현 가능 어셈을 이용한 SEH 설치 PUSH @MyHandler ;예외 처리기 PUSH DWORD PTR FS:[0] ; Head of SEH Linked List MOV DWORD PTR FS:[0], ESP ; 연결 리스트 추가 SEH는 체인 형태로 구성되어 있다. 첫 번째 예외 처리기에서 해당 예외를 처리하지 못하면 다음 예외 처리기로 넘겨주는 형식 기술적으로 SEH는 _EXCEPTION_REGISTRATION_RECORD 구조체 연결 리스트의 형태로 구성 더보기 PEB PEB란 프로세스 정보를 담고 있는 구조체 TEB.ProcessEnvironmentBlock 멤버가 PEB구조체의 주소 FS:[30] = TEB.ProcessEnvironmentBlock = address of PEB 어셈 코드1 mov eax, DWORD PTR FS:[30] 어셈 코드2 mov eax, DWORD PTR FS:[18] ; FS[18] = address of TEB mov eax, DWORD PTR DS:[EAX+30] ; DS[EAX+30] = address of PEB PEB 구조체 - 자세한 것은 WinDbg로 확인 주요 멤버 BeingDebugged -> IsDebuggerPresent 함수다 디버깅을 당하는지 판단하는 함수인데 이 함수가 이 멤버 정보를 참조한다. 위 그림에서 .. 더보기 TEB TEB TEB(Thread Environment Block)란 프로세스에서 실행되는 스레드에 대한 정보를 담고 있는 구조체 스레드 별로 구조체가 하나씩 할당 TEB구조체 FS세그먼트 레지스터는 현재 스레드의 TEB를 지시하는데 사용된다. FS세그먼트 레지스터는 실제 TEB 주소를 가지고 있는 Segment Descriptor Table 의 Index값을 가지고 있다. FS:[0x18] = TEB 시작 주소 FS:[0x18] = TEB.NtTib.Self = address of TIB = address of TEB = FS:0 FS:0의 의미는 FS 레지스터가 Indexing 하는 Segment Descriptor가 가리키는 Segment Memory의 시작 주소 NT_TIB 구조체 정의에서 018옵셋 떨.. 더보기 TLS TLS TLS(Thread Local Storage)란 스레드 별로 독립된 데이터 저장 공간 스레드 내에서 프로세스의 전역 데이터나 정적 데이터를 마치 지역 데이터처럼 독립적으로 취급하고 싶을 때 사용 AddressOfCallBacks 멤버가 TLS 콜백 함수 주소배열을 가리킴 프로세스가 시작될 때 시스템에서 이 배열에 저장된 함수를 하나씩 호출. 여러 개 등록 가능 EP코드보다 먼저 호출 되기 때문에 안티 디버깅 기법으로 사용 TLS 콜백은 스레드의 생성시점과 종료시점에 자동으로 호출 TLS Callback 함수 더보기 안티 디버거 기술 디버거 동작 방식 소프트웨어 브레이크 포인트 - 사용자가 명령에 브포를 설정하면 디버거는 일반적으로 해당 명령을 int 3 명령으로 교한다. int 3 명령은 특별한 브포 인터럽트로서 코드의 실행이 브레이크 포인트에 도달했다고 디버거에 통보 통보를 받은 디버거는 int 3 명령을 원래의 명령으로 교체하고 프로그램의 실행을 중지시킨다. 하드웨어 브레이크 포인트 - 프로세서 자신이 관리하는 브레이크 포인트. 디버깅 대상 프로그램 안의 어느것도 변경하지 않음 단순히 프로세서가 특정 메모리 주소에 대한 접근이 이뤄질 때 브레이크 포인트가 발생했다고 판단 IA-32 프로세서는 이런 싱글 스텝(각 코드 실행)의 구현을 EFLAGS레지스터의 트랩 플래그(TF) 를 이용해서 구현 TF가 ON 되어 있으면 프로세서는 각.. 더보기 Anti Reversing Anti Reversing 1. 심볼 정보 제거 - 프로그램 안의 문자열 정보를 제거. 대부분의 바이트 코드 난독기의 가장 기본적인 특징은 모든 심볼의 이름 을 의미없는 문자열로 바꾸는 것. 2. 프로그램 난독화 - 수동 리버싱 방법과 같은 정적 분석으로부터 프로그램의 취약점을 제거할 목적으로 사용되는 다양한 기술들을 일반적으로 난독화 라고 한다. 프로그램 구조의 외형이나 로직, 데이터, 조직 등을 변경 3. 안티 디버깅 코드 삽입 - 동적분석을 방해하는 방법. 디버거가 존재하는지 판단해서 존재하면 프로그램을 종료시키거나 제대로 동작못하게 하는 것 더보기 VS++ 2008 DLL 파일 생성 방법 Visual Studio 2008 에서 DLL 파일 생성 방법 프로젝트 속성(alt+f7) => 구성 속성-일반 => 프로젝트 기본값-구성 형식 => 동적 라이브러리로 설정 release 모드로 빌드 더보기 Dll Injector Dll injector 순서 1. 대상 프로세스 핸들 구하기 hProcess = OpenProcess() HANDLE WINAPI OpenProcess( _In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ DWORD dwProcessId ); 2. 대상 프로세스 메모리에 인젝션할 DLL 경로 쓰기 pRemoteBuf = VirtualAllocEx() LPVOID WINAPI VirtualAllocEx( _In_ HANDLE hProcess, _In_opt_ LPVOID lpAddress, _In_ SIZE_T dwSize, _In_ DWORD flAllocationType, _In_ DWORD flProtect ); WriteProcessMemory(.. 더보기 이전 1 다음