Delphihelper는 Delphi 프로그래밍 언어로 작성된 x86/x86_64 바이너리 분석을 돕는 Python Ida Pro 플러그인입니다.
IDA 플러그인 디렉토리 내부의 DelphiHelper 디렉토리 및 DelphiHelper.py 복사하십시오.
%APPDATA%Hex-RaysIDA Proplugins$HOME/.idapro/plugins/ 아래에 주어진 지침을 따라 IDR 지식 기반 파일을 수동으로 다운로드하거나 스크립트 setup_IDRKB.py 실행하십시오.
참고 : 설정 스크립트를 실행하려면
py7zr설치가 필요합니다 :pip install py7zr
Delphihelper는 IDA 8.4와 나중에 Windows, MacOS 및 GNU/Linux와 호환되어야합니다.
Delphihelper 플러그인을 사용하려면 자원 섹션을 IDA에로드해야합니다. 이는 Box Load Resources를 확인하거나 명령 줄 스위치의 옵션 -R 로 달성 할 수 있습니다.
참고 : 플러그인을 사용하기 전에 IDA 자동 분석을 완료해야합니다.
<Alt-Shift-H> : 인쇄 도움말<Alt-Shift-R> : VMT 파서를 실행하십시오<Alt-Shift-F> : DFM Finder 실행 (Delphi Form Viewer Window 표시)<Alt-Shift-E> : 실행 입력 포인트 기능 찾기<Alt-Shift-S> : SysInit 및 System Unit 용 IDR 지식베이스 로더 실행<Alt-Shift-A> : 선택한 장치 용 IDR 지식베이스 로더 실행 핫키 : <Alt-Shift-R>
VMT (Virtual Method Table) 파서는 VMT 구조의 시작 주소에서 커서와 함께 실행해야합니다. 이 구조는 CreateForm , CreateObject 등이라는 기능을 검색하여 찾을 수 있습니다. 함수가 발견되면 마지막 인수는 VMT 구조 여야합니다.
대부분의 경우 두 가지 지침이 있습니다.
mov <register>, <VMTStructureOffset>
call CreateForm
예를 들어:
구조에 일단 vmtstructureOffset 예 <Enter> 들어 off_664A8C ).
Hotkey <Alt-Shift-R> 을 누릅니다. 결과는 다음과 같습니다.
VMT 구조에는 다양한 RTTI 테이블에 저장된 많은 유용한 정보가 포함되어 있습니다. 가장 흥미로운 것은 다음과 같습니다.
VMT 파서는 해당 테이블에서 데이터를 자동으로 추출하여 IDA 열거 및 구조에 저장합니다.
필드 테이블은 발표 된 각 필드의 이름, 유형 및 오프셋을 저장합니다. VMT 파서는 각 VMT 구조에 대한 이러한 모든 항목을 IDA 열거로 추출하고 저장합니다.
VMT 파서 에 의해 생성 된 열거에는 다음과 같은 형식이 있습니다. %ObjectName%_Fields . 열거 항목의 이름은이 형식을 갖습니다. %ObjectName%_%FieldType%_%FieldName% :
VMT 파서가 만든 열거의 항목은 기본 상징적 상수에 사용되는 내장 IDA 바로 가기 <M> 누르면 이름을 지정할 수 있습니다.
전에
후에
가상 방법 테이블은 클래스 및 기본 클래스에 대해 선언 된 모든 가상 방법에 포인터를 저장합니다.
VMT 파서는 VMT에서 포인터를 추출하여 구문 분석 VMT 구조에 의해 명명 된 IDA 구조로 저장합니다. 구조 항목의 이름은 다음 형식을 갖습니다. %MethodName%_%MethodOffset% :
그런 다음 VMT 파서가 만든 구조의 항목은 이름 지정 구조 오프셋에 사용되는 내장 IDA 바로 가기 <T> 눌러 이름을 지정할 수 있습니다.
전에
후에
이 방법 테이블은 출판 된 방법의 이름과 포인터를 저장합니다. 이 메소드 테이블에는 델파이 폼 뷰어 에서 찾아서 액세스 할 수있는 델파이 이벤트 핸들러의 포인터도 포함되어 있습니다 (자세한 내용은 DFM Finder 참조)
핫키 : <Alt-Shift-F
DFM 파인더는 분석 된 델파이 바이너리의 리소스 섹션에 저장된 모든 DFM을 찾으려고 시도한 후 발견 된 DMF와 관련된 모든 VMT 구조에서 VMT 파서를 실행합니다. 모든 VMT 구조가 처리되면 새로운 대화식 IDA 하위 뷰 ( Delphi Form Viewer )가 표시됩니다. 하위 뷰는 DFM에서 추출한 델파이 형태의 설명의 트리 뷰를 보여줍니다.
굵은 노드는 일부 델파이 이벤트가 정의 된 구성 요소를 나타냅니다. Blue Colored Delphi 이벤트를 찾을 수있는 Bold Properties Node를 발견 할 때까지 이러한 대담한 노드를 하위 트리에서 더 깊게 따르십시오. 이벤트 항목을 클릭하면 IDA 분해 창에서 해당 이벤트 핸들러로 이동합니다.
녹색 노드는 이진 파일이 포함 된 구성 요소를 나타냅니다. 녹색 Properties 노드를 발견 할 때까지 그린 노드를 서브 트리에서 더 깊이 팔로우하십시오. 여기서 녹색 품목을 찾을 수 있습니다. 항목은 DFM Finder 에 의해 삭제 된 임베디드 바이너리 파일의 파일 경로를 보여줍니다. 추출 된 파일의 대상 서브 디렉토리는 현재 IDA 작업 디렉토리에 있으며 다음 형식 %IDAWorkingDirectory%_extracted_%BinaryFileName% 가지고 있습니다.
Delphi Form Viewer Window에서 루트 (Form 's) 노드를 클릭하면 IDA 분해 창의 양식의 VMT 구조로 이동합니다.
핫키 : <Alt-Shift-E>
Entry Point 기능 Finder는 CreateFrom , InitExe 및 InitLib 호출에 대한 참조를 검색하여 가능한 진입 점 함수를 찾으려고합니다. 결과는 IDA의 출력 창에 표시됩니다.
핫키 : <Alt-Shift-S> 및 <Alt-Shift-A>
IDR Knowledge Base Loader는 KB 파일에서 IDR KB 서명을로드합니다. 플러그인에는 KB 파일이 다음 위치에 저장 될 것으로 예상됩니다.
Windows : %APPDATA%Hex-RaysIDA PropluginsDelphiHelperIDR_KB
MACOS/LINUX : $HOME/.idapro/plugins/DelphiHelper/IDR_KB/
<Alt-Shift-S> SysInit 및 System 에 대한 기능 서명을로드합니다.
<Alt-Shift-A> 가져온 단위 목록에서 선택한 모든 장치에 대한 기능 서명을로드하려고합니다.
참고 : KB 파일은 IDR 프로젝트에서 다운로드됩니다.
https://github.com/crypto2011/idr
https://github.com/crypto2011/idr64
IDR 프로젝트는 MIT 라이센스에 따라 라이센스가 부여됩니다.
MIT License
Copyright (c) 2006-2018 crypto
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
KB 파일을 따라 DelphiHelperIDR_KBIDR64 DIRECTORY로 다음 KB 파일을 다운로드하여 복사하십시오.
https://github.com/crypto2011/idr64/blob/master/syskb2012.bin
https://github.com/crypto2011/idr64/blob/master/syskb2013.bin
https://github.com/crypto2011/idr64/blob/master/syskb2014.bin
kb 파일을 DelphiHelperIDR_KBIDR directory로 다운로드하고 추출합니다 .
https://github.com/crypto2011/idr/blob/master/kb2005.7z
https://github.com/crypto2011/idr/blob/master/kb2006.7z
https://github.com/crypto2011/idr/blob/master/kb2007.7z
https://github.com/crypto2011/idr/blob/master/kb2009.7z
https://github.com/crypto2011/idr/blob/master/kb2010.7z
https://github.com/crypto2011/idr/blob/master/kb2011.7z
https://github.com/crypto2011/idr/blob/master/kb2012.7z
https://github.com/crypto2011/idr/blob/master/kb2013.7z
https://github.com/crypto2011/idr/blob/master/kb2014.7z