xAnalyzer는 @mrexodia의 x86/x64 x64dbg 디버거용 플러그인입니다. 이 플러그인은 @mrfearless의 APIInfo 플러그인을 기반으로 하지만 일부 개선 및 추가가 이루어졌습니다. xAnalyzer는 디버깅된 애플리케이션의 정적 코드에 대해 다양한 유형의 분석을 수행하여 사용자에게 더 많은 추가 정보를 제공할 수 있습니다. 이 플러그인은 함수 정의, 인수, 데이터 유형은 물론 OllyDbg 분석 엔진에서 얻을 수 있는 것과 유사한 기타 보완 정보를 추가하기 위해 광범위한 API 함수 호출 감지를 수행하여 사용자가 더욱 쉽게 이해할 수 있도록 할 것입니다. 디버깅 작업을 시작하기 직전에 사용자.
주요 기능 및 개선 사항은 다음과 같습니다.
확장된 함수 호출 분석(약 200개 DLL의 13,000개 이상의 API 정의)
정의된 일반 함수, 인수, 데이터 유형 및 추가 디버깅 정보 인식.
자동 루프 감지.
사용자가 유지 관리하는 정의 파일
xAnalyzer 이전
xAnalyzer 이후
여기에서 최신 바이너리 릴리스를 다운로드하세요.
최신 버전의 x64dbg를 다운로드하세요.
apis_def.zip 추출
xAnalyzer.dp32/xAnalyzer.dp64 및 apis_def 폴더를 x64dbg의 해당 플러그인 디렉터리에 복사합니다.
기본 x64dbg 창의 " 플러그인 " 메뉴나 Disasm 창의 보조 메뉴에서도 " xAnalyzer " 항목을 확인하세요.
xAnalyzer에는 경험을 더욱 개인화하고 필요할 때 원하는 방식으로 사용하기 위해 선택할 수 있는 몇 가지 옵션이 있습니다. 플러그인 옵션은 다음과 같습니다.
자동 분석 : 이 옵션이 켜져 있으면 플러그인은 디버거에서 로드할 때 진입점에 도달할 때마다 실행 코드에 대해 완전 자동 분석을 시작합니다. 이 옵션을 사용하면 x64dbg에서 OllyDbg 초기 분석 동작에 더 가까워집니다.
확장 분석 : 이 옵션은 xAnalyzer가 디버그된 실행 파일의 전체 코드 섹션에 대해 확장 분석을 수행하도록 합니다. 경고!!! 이 옵션을 활성화하면 분석 프로세스를 완료하는 데 훨씬 더 많은 시간과 리소스가 필요할 수 있으며, 섹션 크기와 디버깅된 실행 가능 정적 디스어셈블리에 추가된 추가 데이터의 양에 따라 x64dbg에서 대량의 RAM 메모리를 사용할 수도 있습니다.
정의되지 않은 함수 분석 : 이 옵션을 선택하면 xAnalyzer는 API 정의 파일에 정의되지 않은 모든 API 호출/함수 및 다음과 같은 호출에 대해 일반 분석 및 인수 유형을 사용합니다.
CALL {REGISTER}
CALL {REGISTER + DISPLACEMENT}
CALL {DYNAMIC_POINTER}
xAnalyzer에는 실행 파일 작업 시 선택할 수 있는 몇 가지 명령과 메뉴 옵션이 있습니다.
x64dbg의 디스어셈블리 창에서 여러 명령을 선택하고 이 메뉴를 선택하면 선택한 라인에 대해 빠른 분석이 이루어집니다. 이 옵션을 시작하기 위해 xanal Selection 명령을 사용하거나 x64dbg GUI에서 이에 대한 자체 단축키를 설정할 수도 있습니다.
일부 기능을 수행 중인 경우 이 메뉴 항목을 사용하여 해당 기능 전체를 분석하고 해당 기능만 분석할 수 있습니다. 선택한 단일 명령을 참조로 사용하면 xAnalyzer는 코드 블록 내부의 모든 라인을 처리합니다. 이러한 유형의 분석을 시작하기 위해 xanal 함수 명령을 사용하거나 x64dbg GUI에서 이에 대한 자체 단축키를 설정할 수도 있습니다.
이 명령은 전체 모듈에 대한 전체 분석을 시작합니다. 이 기능은 사용할 분석 깊이에 대해 확장 분석 옵션을 고려합니다. xanal 모듈 명령을 사용하여 실행하거나 x64dbg GUI에서 고유한 단축키를 설정할 수도 있습니다.
이 경우 이러한 모든 메뉴는 이전 명령의 기능과 반대가 됩니다. 원하는 경우 코드의 일부 부분이나 전체 실행 파일에서 분석 추가 정보를 제거하려는 경우. xanalremove Selection/function/module 명령을 사용할 수도 있습니다.
xAnalyzer에는 확장 가능한 API 정의 파일 시스템이 있습니다. 이러한 파일은 "api_def" 및 "api_def/headers" 폴더에 있습니다. 여기에는 .ini 구조와 다음 표준을 가진 모든 파일이 포함되어야 합니다.
" filename ": API 함수가 위치한 모듈의 이름입니다.
" filename.h ": 유형 데이터(플래그 및 열거형) 관련 정보를 포함하는 헤더입니다.
" .api " 확장자: 정의 파일임을 지정하며 다른 확장자는 인식되지 않습니다(kernel32.api, shell32.api 등).
이러한 모든 ini 파일에는 함수 프로토타입, 인수 유형 등과 같은 플러그인에 대한 중요한 정보가 포함되어 있습니다. 이 모든 정보는 정적 코드에 대한 추가 정보를 설정하기 위해 xAnalyzer에서 사용됩니다. 이러한 파일의 단일 항목은 다음과 같습니다.
파일 user32.api
[MessageBox]
1=HANDLE hWnd
2=LPCTSTR lpText
3=LPCTSTR lpCaption
4=[MessageBoxType] uType
ParamCount=4
Header=shell.h.api;
@=MessageBox
파일 shell.h.api
[MessageBoxType]
TypeDisplay=UINT
Base=UINT
Type=Flag
Const1=MB_ABORTRETRYIGNORE
Value1=0x00000002
Const2=MB_CANCELTRYCONTINUE
Value2=0x00000006
Const3=MB_HELP
Value3=0x00004000
Const4=MB_OK
Value4=0x00000000
Const5=MB_OKCANCEL
...
대괄호 사이의 모든 인수는 이것이 특정 데이터 유형(열거형 또는 바이너리 플래그)이고 키 " Header "에 지정된 적절한 .h 헤더 파일에 정의된다는 것을 의미합니다.
헤더 파일의 경우 구성표는 " TypeDisplay "와 같은 몇 개의 키만 있으면 거의 동일합니다. 이는 dbg 주석에 표시할 적절한 데이터 유형을 지정하고 " Base "로 표시되며 기본 항목에서 사용되는 기본 데이터 유형을 가리킵니다. 연결된 데이터 유형이 있는 경우 이는 다음과 같이 괄호 안에 있을 수 있습니다. 잘. " Type " 키는 데이터 구조의 유형이며 "Flag" 또는 "Enum"일 수 있습니다. 마지막으로 모든 변수 이름과 값이 표시됩니다.
특정 API 호출 정의가 xAnalyzer에 의해 감지되지 않거나 올바르게 감지되지 않는 경우 해당 정의 파일에 없거나 잘못 정의되었음을 의미할 수 있으므로 이 경우 다음을 포함하도록 추가 또는 수정이 이루어질 수 있습니다. 동일한 구조를 따르는 한 누락된 함수나 인수는 100% 사용자 정의가 가능합니다.
함수 프롤로그 명령을 불법적으로 사용하지 않고는 얼마나 많은 인수를 사용할지 알 수 있는 방법이 없기 때문에 함수에서 일반 인수를 사용하는 정의되지 않은 첫 번째 호출은 점프가 선행되지 않는 한 처리되지 않습니다. 문서화된 호출만 함수 시작 시 또는 점프가 주도하는 정의되지 않은 함수에서 처리됩니다.
일부 "일반적이지 않은" 함수에는 점프 사이에 인수가 있으므로 플러그인의 실제 설계에 따라(함수 인수 사이에 점프 없음) 이러한 호출은 처리되지 않습니다. 점프가 발견될 때마다 스택의 명령이 정리되기 때문입니다.
중첩된 호출은 다음과 같은 경우에만 올바르게 작동합니다.
1-) 내부 호출이 정의됩니다.
2-) 내부 정의되지 않은 호출이 외부 호출에 필요한 인수보다 더 많은 스택 인수를 취하지 않는 경우
함수 내부의 루프(함수 경계 프롤로그/RET)만 감지합니다. 함수의 코드 중간에 RET가 포함되어 있으면 함수 끝으로 감지되고 루프 스택이 지워집니다.
디버깅 중인 실행 파일의 이름에 점이 여러 개 있으면 분석이 실패할 수 있습니다.
내부에 비조건부 점프가 있는 섹션에 대한 잘못된 루프 감지(#7 참조)
중첩된 인수 줄(xAnalyzer는 중첩된 인수를 지원하지만 현재 x64dbg는 지원하지 않음)
엔트로피 분석 추가
선형 대신 흐름 분석 스캐닝(추적 에뮬레이션)
케이스 스위치 감지
엑스분석기 2.5.4
- 프로젝트를 VS2017로 업데이트했습니다.
- 스택 포인터(x64 버전)와 관련된 인수 명령을 처리할 때 발생하는 문제가 해결되었습니다.
- 스택 포인터(x64 버전)와 관련된 잘못된 인수 순서를 수정했습니다.
- 레지스터를 다른 인수로 복제하는 정의되지 않은 함수의 인수 인식 버그 수정(x64 버전)
- 정의되지 않은 호출 인수 인식이 변경되었습니다. 기본적으로 정의되지 않은 인수는 최대 4개까지만 예측됩니다(x86 버전).
- 일부 코드 리팩토링
xAnalyzer 2.5.3
- 최신 버전의 x64dbg에서 함수 이름 감지 문제 수정
엑스분석기 2.5.2
- 모듈 분석을 위해 cip 대신 현재 선택된 disasm 라인을 사용했습니다.
-플러그인 항목의 일부 입력을 수정했습니다.
-일부 코드 리팩토링
- "xanal/xanalremove exe" 명령을 "xanal/xanalremove 모듈"로 수정했습니다.
엑스분석기 2.5.1
-mov 명령어 변형 시 충돌 수정
xAnalyzer 2.5.0
-가능한 함수 호출자 인수로 [EBP+/-] 명령을 제거했습니다.
-16진수가 추론되므로 모든 함수 인수 값의 접두사 "0x"를 제거했습니다.
-포인터 변수가 포인터로 올바르게 표시되지 않고 대신 기본 데이터 유형으로 표시되는 고정 인수
-함수 호출에 대한 가능한 인수로 스택 포인터 사용(ESP) 인식을 추가했습니다(x86).
-일반/기본 데이터 유형 이름 대신 인수에 정확한 데이터 유형 이름 사용을 추가했습니다.
- 함수 스마트 추적 기능 추가(CALL {REGISTER}, CALL {POINTER}와 같은 간접 함수 호출의 스마트 예측 및 인식)
-함수 포인터의 이름을 매개변수로 추가했습니다. (감지되면 주소 대신 전체 함수 이름이 사용됩니다.)
엑스분석기 2.4.3
- x86에서 MOV 명령어 인식 기능이 추가되었습니다.
- "Stub" 접미사가 있는 기능 인식 추가
- "자동 분석" 버그 수정(EP 확인 조건 추가)
- 이제 자동 댓글/자동 라벨 옵션 지우기가 기본적으로 선택되어 있습니다.
엑스분석기 2.4.2
- 인수 플래그 주석이 MAX_COMMENT_SIZE를 초과할 때 BoF를 수정했습니다.
- 정의가 두 번째 .api 파일에 있을 때 함수 이름 검색 버그가 수정되었습니다.
엑스분석기 2.4.1
- 새로운 단축키 구성표를 추가했습니다.
- 이전 분석 데이터를 지워야 하는지 제어하는 새로운 옵션이 추가되었습니다. (이것은 SwissArmyKnife 등과 같은 맵 로더 플러그인과 원활하게 작동할 수 있는 가능성을 제공합니다).
- 새 명령 추가(이전 명령은 더 이상 사용되지 않음)
xanal Selection : 선택 분석을 수행합니다.
xanal function : 함수 분석을 수행합니다.
xanal exe : 전체 실행 파일 분석을 수행합니다.
xanalremove Selection : 이전 선택 분석을 제거합니다.
xanalremove 함수 : 이전 함수 분석을 제거합니다.
xanalremove exe : 이전 전체 실행 가능 분석을 제거합니다.
xanal help : 로그 창에 도움말 텍스트를 표시합니다.
- 시작 시 자동 분석이 시작되지 않는 문제 수정(#18 닫기)
- 다양한 API 정의 파일 수정(Closes #17 )
엑스분석기 2.4
- 약간 수정된 구성표(거의 200개 DLL에서 13,000개 API)가 포함된 새롭고 향상된 API 정의 파일
- 사용된 각 API 정의 인수에 대한 기호 인식 시스템(1000개 이상의 열거형 데이터 유형 및 800개 이상의 플래그)
- params 데이터 유형 인식(BOOL, NUMERIC, NON-NUMERIC)
- VB "DllFunctionCall" 스텁 감지
- 인수로 전달된 문자열이 이제 더 깔끔해졌습니다. (디버거 주석에는 이제 주소 부분이 제거되었습니다.)
- 로그 창에 실행 요약 추가
- x64dbg와의 일부 충돌로 인해 단축키 기능이 제거되었습니다(향후 개정판에 통합될 예정).
- 다양한 버그 수정
엑스분석기 2.3.1
- 한 줄을 선택한 상태에서 "선택 분석" 메뉴를 시작할 때 갑작스러운 dbg 예외가 발생하는 버그를 수정했습니다(@blaquee에게 감사드립니다).
- 플러그인을 로드하기 전에 정의 파일 폴더 "apis_def"와 정의 파일이 그 안에 있는지 확인하세요.
- 단축키를 Ctrl+Shift+X로 선택하고 기능을 Ctrl+X로 변경했습니다.
엑스분석기 2.3
- "정의되지 않은 함수 분석" 옵션이 추가되었습니다. (기본적으로 OFF, 정의 파일에 없는 내용은 분석되지 않습니다)
- "자동 분석" 옵션 추가(기본적으로 꺼짐, 디버그된 실행 파일의 EP 실행 시 분석 수행)
- "선택 분석" 기능 추가(선택한 지침 분석, 선택한 여러 호출 지원)
- "기능 분석" 기능 추가(선택한 주소에서 현재 기능을 자동으로 검색 및 분석)
- 선택/함수/실행 파일에 "분석 제거" 기능 추가
- 명령 단축키가 추가되었습니다.
- 새로운 아이콘이 추가되었습니다.
- .ini 파일에 저장 구성 추가
- 16진수 인수 값의 대문자 표시가 추가되었습니다.
- 재구성된 기능 "실행 파일 분석"(현재 실행 파일을 전체 분석합니다)
- 재구성된 메뉴
- 이제 새로운 정보 대화 상자에 업데이트를 추적할 수 있는 버전 번호가 표시됩니다.
- 일부 작은 버그 수정
- 일부 API 정의 파일 수정 및 병합
- 속도 및 안정성 개선
엑스분석기 2.2
- 분석 진행률 표시기 추가
- 새로운 분석 깊이 모드 추가
-이제 백업 데이터베이스가 없는 경우에만 자동 분석이 실행됩니다.
- 버그 수정
엑스분석기 2.1
- 정의되지 않은 함수 및 내부 하위 항목에 대한 일반 인수
- 스마트 함수 주석 및 인수(스택에 인수가 있는 함수만 처리됩니다.) 이를 통해 xAnalyzer는 실제 인수를 사용하여 해당 함수를 처리하고 주석을 달기만 하면 코드를 더 명확하게 볼 수 있습니다.
- CALL -> DYNAMIC_MEMORY -> API 체계를 사용한 간접 함수 호출 감지
- CALL -> REGISTER/REGISTER + DISPLACEMENT -> API 체계를 사용한 간접 함수 호출 감지
- CALL -> JMP -> JMP -> API 체계를 사용한 간접 함수 호출 감지
- 자동 루프 감지
- 사소한 버그 수정
- 코드 재배치
엑스분석기 2.0
- x64비트 지원
- x64비트에서 API 호출 인수 순서 변경 지원
- API 호출에서 PDB 파일 추가 정보 지원
- 직접/간접 API 호출 지원
- 메인 모듈 코드에 대한 정적 API 함수 호출 지원
- 정의 파일의 여러 잘못된 API 호출 인수 순서를 수정했습니다. 이제 더 많은 통화를 감지하고 적절하게 댓글을 달 수 있습니다.
- 일부 개선 및 더 나은 작성된 코드
- 다양한 버그 해결
엑스분석기 1.2
- API 정의 파일을 업데이트했습니다.
- vc6+ 실행 파일에 대한 지원이 추가되었습니다.
엑스분석기 1.1
- 루프에서 BASIC_INSTRUCTION_INFO 구조를 사용하기 전/후에 제대로 정리하지 않아 VC++ 실행 파일에 API 정보가 표시되지 않는 문제가 해결되었습니다.
- API 정의 파일 추가/업데이트
- 버그 수정
엑스분석기 1.0
- 최초 출시
PR뿐만 아니라 버그 보고, 문서화 등 모든 종류의 기여를 환영합니다.
다음 사항에 유의하시기 바랍니다.
xAnalyzer 플러그인을 사용해 주셔서 감사합니다. 그리고 모두에게 즐거운 반전을 선사하세요!