반응형

Anti-Disassembly 로 많이 사용되는 EB FF 코드에 대해 간단히 살펴보자.

 

EB는 1바이트(-128 ~ +127) 이내 거리로 이동하는 Jump Short 명령이다.

위 그림에서 0x0040123F EB 03은 다음 명령어 주소(0x00401241)를 기준으로 03바이트 이동한 0x00401244로 이동한다.

 

EB 03을 EB FF로 바꿔보자.

FF는 -1을 의미하기 때문에 다음 명령어 주소 0x00401241에서 -1만큼 이동한 0x00401240으로 이동하라는 뜻이다. 그래서 화살표가 다른 곳을 가리키지 않고 명령어 자신을 가리키고 있다. (잘린것 처럼 보인다)

 

엔터키를 눌러 Jump 명령을 실행해 보면 EB FF 명령 중간인 FF의 위치, 0x00401240으로 이동한다.

 

※ 참고

ANTI-DISASSEMBLY TECHNIQUES

Assembly “wrapping”: a technique for anti-disassembly

 

반응형
Posted by J-sean
:
반응형

실행되는 명령들의 log를 남겨보자.

 

Trace into...나 Trace over...를 선택한다.

 

Log Text에 아래와 같은 포맷을 지정한다.

0x{p:cip} {i:cip}

Maximum trace count를 적당히 지정한다.

로그 파일의 이름이나 위치를 바꾸고 싶다면 Log File... 버튼을 클릭한다. (특별히 바꾸고 싶지 않아도 지정은 해줘야 한다. 그렇지 않으면 로그 파일이 생성되지 않는다)

 

지정된 숫자 만큼 명령이 실행되고 로그 파일이 생성된다.

 

※ 참고

Values

Expressions

String Formatting

 

반응형
Posted by J-sean
:
반응형

x64dbg에서 디버깅 중 Pause 명령이 실행되지 않는 경우가 있다.

 

F12 키를 누르면 에러가 발생한다.

 

Threads 탭을 확인해 보자.

 

현재 실행되고 있는 Thread가 Main이 아닌, 7번 14328이기 때문이다. 나머지 Thread는 Suspended 되어 있다.

 

Main 스레드에서 우클릭 - Switch Thread를 선택한다.

 

Pause는 Main 스레드에서만 사용할 수 있다. Main 스레드로 바꾸면 Pause를 사용할 수 있다.

 

반응형
Posted by J-sean
:
반응형

x64dbg와 Claude Desktop, Gemini CLI를 사용해 보자.

 

x64dbgMCP를 다운로드한다.

 

MCPx64dbg.dp64와 x64dbg.py를 x64dbg 플러그인 폴더에 복사한다.

 

x64dbg를 실행하고 Log 윈도우를 확인하면 MCPx64dbg 플러그인이 로드되어 있다.

 

{
  "mcpServers": {
      "ghidra": {
        "command": "python",
        "args": [
          "D:\\ProgramFiles\\ghidra\\bridge_mcp_ghidra.py",
          "--ghidra-server",
          "http://127.0.0.1:8080/"
        ]
      },
      "x64dbg": {
        "command": "Python",
        "args": [
          "D:\\Program Files\\x64dbg\\release\\x64\\plugins\\x64dbg.py"
        ]
      }
  }
}

 

claude_desktop_config.json 파일에 x64dbg 내용을 추가한다.

 

클로드를 실행하면 x64dbg 로컬 MCP 서버가 실행되어 있다.

 

x64dbg에서 디버깅을 시작한다.

 

 

Claude에서 질문을 하면 답을 찾아간다.

 

근거 있는 답변을 제시한다.

 

질문 내용에 따라 Ghidra와 x64dbg를 구분하지 못하는 경우가 있다.

 

 

{
  "selectedAuthType": "oauth-personal",
  "theme": "Default",
  "mcpServers": {
      "ghidra-mcp": {
        "command": "python",
        "args": [
          "D:\\ProgramFiles\\ghidra\\bridge_mcp_ghidra.py",
          "--ghidra-server",
          "http://127.0.0.1:8080/"
        ]
      },
      "x64dbg": {
        "command": "Python",
        "args": [
          "D:\\Program Files\\x64dbg\\release\\x64\\plugins\\x64dbg.py"
        ]
      }
  }
}

 

Gemini CLI 설정 파일 settings.json에 x64dbg MCP Server 내용을 위와 같이 추가한다.

 

Gemini를 실행하면 2개의 MCP Server(Ghidra, x64dbg)가 실행되고 있다고 표시된다.

 

실행되고 있는 x64dbg에 대한 질문을 할 수 있다.

 

질문 내용에 따라 Ghidra와 x64dbg를 구분하지 못하는 경우가 있다.

 

반응형
Posted by J-sean
:
반응형

GhidraMCP와 클로드, 제미나이 CLI를 사용해 보자.

 

Claude에 가입하고 Claude Desktop을 설치한다.

GhidraMCP를 다운로드하고 압축을 푼다. 압축을 풀면 아래와 같은 2개의 파일이 나온다.

 - GhidraMCP-(version).zip

 - bridge_mcp_ghidra.py

이 중 bridge_mcp_ghidra.py 파일은 Ghidra 설치 폴더에 복사한다. (예: D:\ProgramFiles\ghidra)

 

File - Install Extensions 를 선택한다.

 

오른쪽 상단의 + 버튼을 클릭하고 GhidraMCP-(version).zip을 선택한 후 체크 표시가 되면 OK를 클릭한다. 그리고 Ghidra를 다시 실행한다.

 

CodeBrowser에서 File - Configure를 선택한다.

 

Developer - Configure - GhidraMCPPlugin이 체크되어 있는지 확인한다.

 

 

Claude - 파일 - 설정을 클릭한다.

 

개발자 - 구성 편집을 클릭한다.

 

Claude 폴더 - claude_desktop_config.json 파일을 아래 코드와 같이 편집한다.

 

{
  "mcpServers": {
    "ghidra": {
      "command": "python",
      "args": [
        "D:\\ProgramFiles\\ghidra\\bridge_mcp_ghidra.py",
        "--ghidra-server",
        "http://127.0.0.1:8080/"
      ]
    }
  }
}

 

위에서 Ghidra 설치 폴더로 복사해 둔 bridge_mcp_ghidra.py 의 경로 D:\ProgramFiles\ghidra 표현 시 역슬래시 2개를 사용하는것에 주의한다.

 

 

Claude - 파일 - 종료를 선택해 종료하고 Claude를 다시 실행한다. 오른쪽 상단 X 버튼을 클릭해 종료하면 진짜 종료되지 않는다.

 

Claude를 다시 실행해 보면 로컬 MCP 서버가 실행되고 있다.

 

다시 첫 화면으로 돌아와 검색 및 도구 버튼을 클릭하면 ghidra가 활성화 되어 있다.

 

Ghidra로 원하는 프로그램을 분석하다가 FUN_00401130 함수의 역할이 궁금해졌다고 가정하자.

 

 

원하는 함수를 분석해 결과를 알려준다.

 

변수 이름을 알기쉽게 바꿔 달라고 요청해 본다.

 

변수 이름 뿐만 아니라 함수 이름까지 적당히 바꿔서 결과를 출력해 준다.

 

함수 위치에서 대충 질문해도 알아서 잘 답해준다.

 

 

Gemini-CLI를 설치한다.

 

Gemini CLI의 세팅 파일은 settings.json이다.

 

{
  "selectedAuthType": "oauth-personal",
  "theme": "Default",
  "mcpServers": {
    "ghidra-mcp": {
      "command": "python",
      "args": [
        "D:\\ProgramFiles\\ghidra\\bridge_mcp_ghidra.py",
        "--ghidra-server",
        "http://127.0.0.1:8080/"
      ]
    }
  }
}

 

settings.json을 위와 같이 작성한다.

 

Gemini CLI를 실행하면 위와 같이 1개의 MCP server가 사용되고 있음이 표시된다.

 

Ctrl+t 키를 누르면 사용 가능한 툴이 표시된다.

 

Ghidra에서 분석을 진행하다 궁금한게 있다면 질문하고 답변을 받을 수 있다.

 

반응형
Posted by J-sean
:
반응형

실행 파일에서 원하는 리소스를 찾아보자.

 

ImagePrc.zip
0.12MB

 

 

 

ImagePrc.exe 를 x32dbg - xAnalyzer로 분석하면 위와 같이 FindResourceA 함수에서 두 번째 인수인 리소스 이름으로 65를 사용한 것을 확인할 수 있다. FindResourceA 함수의 두 번째 인수는 포인터가 아닐 경우 MAKEINTRESOURCE(ID) 이다.

 

 

PE를 분석하면 Resource ID가 65인 데이터를 찾을 수 있다.

 

반응형
Posted by J-sean
:
반응형

간단한 비주얼 베이직 프로그램으로 VB Decompiler 사용법을 익혀보자.

 

Music_Player.zip
9.52MB

 

 

Music_Player 실행 화면.

 

VB Decompiler로 Music_Player를 로드하면 간단한 프로그램 정보를 확인할 수 있다.

 

Forms - FrmMain에서 프로그램에 쓰인 여러가지 컨트롤 정보를 확인 할 수 있다.

예를 들어 STOP 버튼은 Caption으로 '■' 문자를 사용하고 (1680, 1560, 615, 495)에 위치하며 이벤트 처리 함수는 CMD_STOP이다.

 

CMD_STOP_Click() 의 디컴파일 내용을 확인 할 수 있다.

 

 

디스어셈블 내용도 확인 할 수 있다.

 

x32dbg에서 CMD_STOP()의 주소 00403EE0 로 이동해도 같은 내용을 확인할 수 있다.

 

ClsMCI에서 그 외 정의된 처리 함수들을 확인할 수 있다.

 

반응형
Posted by J-sean
:

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.