Ret-Sync는 역 엔지니어링 도구 동기화를 나타냅니다. 디버깅 세션 (WINDBG/GDB/LLDB/OLLYDBG/OLLYDBG2/X64DBG)을 분리기 (IDA/GHIDRA/BAINER NINJA)와 동기화하는 데 도움이되는 플러그인 세트입니다. 근본적인 아이디어는 간단합니다. 두 세계에서 최선을 다하십시오 (정적 및 동적 분석).
디버거 및 동적 분석은 다음을 제공합니다.
!peb ,! !drvobj ,! !address 등 )분해 및 정적 분석은 다음을 제공합니다.
주요 기능 :
Ret-Sync 는 QB-Sync의 포크로 Quarkslab에 머무는 동안 개발하고 유지 관리했습니다.
디버거 플러그인 :
ext_windbg/sync : WindBG Extension 소스 파일, 일단 빌드 : sync.dllext_gdb/sync.py : GDB 플러그인ext_lldb/sync.py : lldb 플러그인ext_olly1 : ollydbg 1.10 플러그인ext_olly2 : ollydbg v2 플러그인ext_x64dbg : x64dbg 플러그인Disassembler 플러그인 :
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip : ghidra 플러그인ext_bn/retsync : 이진 닌자 플러그인및 라이브러리 플러그인 :
ext_lib/sync.py : 독립형 파이썬 라이브러리IDA 및 GDB 플러그인에는 유효한 파이썬 설정이 필요합니다. Python 2 (> = 2.7) 및 Python 3이 지원됩니다.
WINDBG/OLLYDBG/OLLYDBG2/X64DBG 디버거에 대한 사전 제작 된 이진화는 Azure DevOps 파이프 라인을 통해 제안됩니다.
마지막 빌드를 선택하고 Related 섹션 ( 6 published 에서 아티팩트를 확인하십시오.

GHIDRA 플러그인의 사전 구축 된 플러그인 아카이브는 ext_ghidra/dist 에 제공됩니다.
Ret-Sync는 동일한 호스트, 모듈 이름 일치하는 동일한 호스트의 디버거 및 디스 어셈블러와 같은 일반적인 설정을 가진 대부분의 사용자를 위해 상자 밖으로 작동해야합니다.
그럼에도 불구하고 일부 시나리오에서는 특정 구성이 사용될 수 있습니다. 이를 위해 확장자 및 플러그인은 사용자의 홈 디렉토리에서 .sync 라는 선택적 글로벌 구성 파일을 점검하십시오. 유효한 .INI 파일이어야합니다.
또한 IDA 및 GHIDRA 플러그인은 IDB 또는 프로젝트 디렉토리 ( <project>.rep )의 구성 파일을 먼저 찾아 로컬, IDB/프로젝트 설정을 허용합니다. 로컬 구성 파일이 있으면 전역 구성 파일이 무시됩니다.
이 구성 파일에서 선언 된 값은 기본값을 무시합니다. .sync 파일은 기본적으로 생성되지 않습니다 .
아래에서는 구성 파일이 유용하거나 필요한 세 가지 일반적인 시나리오에 대해 자세히 설명합니다.
[INTERFACE] 섹션은 네트워크 관련 설정을 사용자 정의하는 데 사용됩니다. 가상 머신 (또는 단순히 다른 호스트), 일반적인 원격 커널 디버깅 시나리오 내에서 Debugger와 IDA를 동기화하려고한다고 가정 해 봅시다.
두 개의 .sync 파일을 만듭니다.
[INTERFACE]
host=192.168.128.1
port=9234
Ret-Sync IDA 플러그인은 포트 9234 와 함께 인터페이스 192.168.128.1 에서 듣도록 지시합니다. 이 인터페이스는 원격 호스트 또는 가상 머신에서 도달 할 수 있어야한다는 것은 말할 나위도 없습니다.
[INTERFACE]
host=192.168.128.1
port=9234
Ret-Sync Debugger 플러그인에게 이전 에이 인터페이스에서 청취하도록 구성된 RET-SYNC IDA 플러그인에 연결하도록 지시합니다.
참고 : 여기에서 실제 IP를 지정해야하며 0.0.0.0 사용하지 않아야합니다. 이는 변수가 바인딩 및 연결에 여러 소스에서 사용되므로 0.0.0.0 사용하면 이상한 오류가 발생하기 때문입니다.
[ALIASES]
ntoskrnl_vuln.exe=ntkrnlmp.exe
[ALIASES] 섹션은 Disassembler (IDA/GHIDRA)가 사용하는 이름을 디스패처/프로그램 관리자에게 등록하기 위해 사용하는 이름을 사용자 정의하는 데 사용됩니다.
기본적으로 disassembler 플러그인은 입력 파일의 이름을 사용합니다. 그러나 파일의 이름을 사전에 이름을 바꾸었을 수도 있으며 디버거가 표시 한대로 실제 프로세스 또는로드 된 모듈의 이름과 더 이상 일치하지 않습니다.
여기서 우리는 단순히 ntkrnlmp.exe (IDB 이름) 대신 ntoskrnl_vuln.exe (실제 이름)라는 이름과 일치하도록 파견관에게 알려줍니다.
QT Creator 디버깅 프론트 엔드는 GDB 명령 출력을 기록하는 방식을 변경합니다. 이는 동기화를 방해하므로 임시 파일 대신 동기화를 위해 원시 GDB 출력을 사용하는 옵션이 존재합니다. .sync 구성 파일 사용에서
[GENERAL]
use_tmp_logging_file=false
대상에 QT 디버깅 프론트 엔드를 사용하려면
/proc/<pid>/maps QEMU의 직렬 펌웨어 또는 원시 펌웨어를 통한 임베디드 장치 디버깅과 같은 일부 시나리오에서 GDB는 PID를 알지 못하며 /proc/<pid>/maps 액세스 할 수 없습니다.
이 경우 [INIT] 섹션은 사용자 정의 컨텍스트를 플러그인으로 전달하는 데 사용됩니다. PID 및 메모리 매핑과 같은 일부 필드를 무시할 수 있습니다.
.sync 컨텐츠 추출 :
[INIT]
context = {
"pid": 200,
"mappings": [ [0x400000, 0x7A81158, 0x7681158, "asav941-200.qcow2|lina"] ]
}
매핑의 각 항목은 mem_base , mem_end , mem_size , mem_name 입니다.
내장 장치 디버깅 또는 미니멀리스트 디버그 인터페이스에 연결하는 것과 같은 일부 시나리오에서는 Disassembler 플러그인에 구현 된 자동 주소 리바싱 기능을 우회하는 것이 더 편리 할 수 있습니다.
use_raw_addr 옵션은 현재 GHIDRA에 대해서만 지원됩니다. .sync 구성 파일 사용에서 :
[GENERAL]
use_raw_addr=true
IDA 7.x 브랜치가 필요합니다. 이전 버전 (6.9x)의 경우 보관 된 릴리스 ida6.9x 참조하십시오.
IDA 설치의 경우 ext_ida 에서 IDA 플러그인 디렉토리에서 Syncplugin.py 및 retsync 폴더를 복사하십시오.
C:Program FilesIDA Pro 7.4plugins%APPDATA%Hex-RaysIDA Proplugins~/.idapro/pluginsAlt-Shift-S ) 또는 Edit -> Plugins -> ret-sync 로 실행하십시오. [sync] default idb name: ld.exe
[sync] sync enabled
[sync] cmdline: "C:Program FilesPython38python.exe" -u "C:UsersuserAppDataRoamingHex-RaysIDA Propluginsretsyncbroker.py" --idb "target.exe"
[sync] module base 0x100400000
[sync] hexrays #7.3.0.190614 found
[sync] broker started
[sync] plugin loaded
[sync] << broker << dispatcher not found, trying to run it
[sync] << broker << dispatcher now runs with pid: 6544
[sync] << broker << connected to dispatcher
[sync] << broker << listening on port 63107
IDA 확장자 문제를 해결하려면 retsync/rsconfig.py 파일에서 두 가지 옵션을 사용할 수 있습니다.
LOG_LEVEL = logging.INFO
LOG_TO_FILE_ENABLE = False
LOG_LEVEL 값을 logging.DEBUG 에 설정합니다 .debug는 플러그인을 더욱 장점으로 만듭니다.
LOG_TO_FILE_ENABLE 값 설정 True 로 설정하면 broker.py 및 dispatcher.py 의 예외 정보 로깅이 전용 파일로 표시됩니다. 로그 파일은 이름 패턴 retsync.%s.err 의 %TMP% 폴더에서 생성됩니다.
ext_ghidra/dist 폴더에서 사전 구축 된 버전을 사용하거나 명령을 따라 구축하십시오. 각 확장 빌드는 플러그인 파일 이름에 지정된 GHIDRA 버전 만 지원합니다. EG ghidra_9.1_PUBLIC_20191104_retsync.zip 는 GHIDRA 9.1 PUBLIC 용입니다.
apt install gradle$GHIDRA_DIR 교체). cd ext_ghidra
gradle -PGHIDRA_INSTALL_DIR= $GHIDRA_DIRFile -> Install Extensions... , + 부호를 클릭하고 ext_ghidra/dist/ghidra_*_retsync.zip 선택하고 확인을 클릭하십시오. 이것은 zip에서 $GHIDRA_DIR/Extensions/Ghidra/ 로 retsync 폴더를 효과적으로 추출합니다. [*] retsync init
[>] programOpened: tm.sys
imageBase: 0x1c0000000
Alt+s )/disable ( Alt+Shift+s )/다시 시작 ( Alt+r ) 동기화. 상태 창도 Windows > RetSyncPlugin 에서도 사용할 수 있습니다. 일반적으로 Ghidra Environment Windows와 통합하기 위해 측면에 떨어 뜨리고 싶습니다.
이진 닌자 지원은 실험적이며 분석 데이터베이스를 백업하십시오.
Ret-Sync는 Python 3뿐만 아니라 최소한의 이진 닌자 버전 2.2가 필요합니다 (Python 2는 지원되지 않음).
Ret-Sync는 아직 바이너리 닌자 플러그인 관리자를 통해 배포되지 않았습니다. 수동 설치가 필요합니다. ext_bn 폴더의 해당 내용을 바이너리 닌자 플러그인 폴더에 복사하기 만하면됩니다.
%APPDATA%Binary Ninjaplugins
이진 닌자를 다시 시작한 후에는 다음 출력이 콘솔 창에 있어야합니다.
[sync] commands added
Loaded python3 plugin 'retsync'
사전 제작 된 바이너리를 사용하거나 ext_windbg 에 제공된 Visual Studio 2017 솔루션을 사용하십시오 (필요한 경우 https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes 참조).
x64releasesync.dll 파일이 작성됩니다.
결과 sync.dll 파일을 적절한 WindBG 확장 경로에 복사해야합니다.
이전 버전의 WindBG의 경우 이것은 다음과 같습니다 (예를 들어 x86 / x64 풍미에주의하십시오).
C:Program Files (x86)Windows Kits10Debuggersx64winextsync.dll
Extension을 저장하기위한 폴더는 경로를 기반으로하는 것처럼 보이므로 쿼리 된 위치 중 하나를 넣어야합니다.
한 가지 예는 여기에 넣는 것입니다.
C:UsersuserAppDataLocalMicrosoftWindowsAppssync.dll
.load 명령) 0:000> .load sync
[sync.dll] DebugExtensionInitialize, ExtensionApis loaded
0:000> !sync
[sync] No argument found, using default host (127.0.0.1:9100)
[sync] sync success, sock 0x5a8
[sync] probing sync
[sync] sync is now enabled with host 127.0.0.1
예 : IDA의 출력 창에서
[*] << broker << dispatcher msg: add new client (listening on port 63898), nb client(s): 1
[*] << broker << dispatcher msg: new debugger client: dbg connect - HostMachineHostUser
[sync] set debugger dialect to windbg, enabling hotkeys
WINDBG의 현재 모듈이 IDA 파일 이름과 일치하는 경우
[sync] idb is enabled with the idb client matching the module name.
참고 : 다음 오류가 발생하면 위의 단계에서 파일을 오른쪽 폴더에 복사하지 않았기 때문입니다.
0: kd> .load sync
The call to LoadLibrary(sync) failed, Win32 error 0n2
"The system cannot find the file specified."
Please check your debugger configuration and/or network access.
아래 오류는 일반적으로 WindBG가 x86 sync.dll 대신에 확장의 잘못된 향미 x64 로드하려고 시도했음을 의미합니다.
0:000> .load sync
The call to LoadLibrary(sync) failed, Win32 error 0n193
"%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.
WINDBG 미리보기가 같은 디렉토리에서 플러그인 ( x86 및 x64 )을 모두로드함에 따라 x86 파일 sync32.dll 이름을 바꿀 수 있습니다.
0:000> .load sync32
ext_gdb/sync.py 선택한 디렉토리에 복사하십시오 gdb> source sync.py
[sync] configuration file loaded 192.168.52.1:9100
[sync] commands added
그러나 LLDB 지원은 실험적입니다.
~/.lldbinit 에도 추가 할 수 있음) lldb> command script import sync
그러나 OLLYDBG 1.10 지원은 실험적입니다.
그러나 OllyDBG2 지원은 실험적입니다.
testplugin, https://github.com/x64dbg/testplugin을 기반으로합니다. 그러나 x64dbg 지원은 실험적입니다.
pluginsdk "디렉토리를 " ext_x64dbgx64dbg_sync "에 붙여 넣으십시오..d32 또는 .dp64 )을 복사하십시오.명령 줄 지향 디버거 (주로 WINDBG 및 GDB)의 경우 리버스 엔지니어링 작업을 지원하기 위해 RET-SYNC 에 의해 일련의 명령이 노출됩니다.
아래 명령은 일반 (WINDBG 및 GDB)입니다 ! Prefix는 WindBG에서 필요합니다 (예 : GDB의 sync , !sync ).
| 디버거 명령 | 설명 |
|---|---|
synchelp | 간단한 설명으로 사용 가능한 명령 목록을 표시하십시오 |
sync | 동기화를 시작하십시오 |
syncoff | 동기화를 중지하십시오 |
cmt [-a address] <string> | Disassembler에서 현재 IP에 주석을 추가하십시오 |
rcmt [-a address] | Disassembler에서 현재 IP에서 주석을 재설정하십시오 |
fcmt [-a address] <string> | 현재 IP가있는 함수에 대한 함수 주석 추가 |
raddr <expression> | 표현식에서 평가 된 재조정 주소와 함께 주석을 추가하십시오 |
rln <expression> | 주어진 주소에 대해 Disassembler에서 기호를 받으십시오 |
lbl [-a address] <string> | disassembler에서 현재 IP에 레이블 이름을 추가하십시오 |
cmd <string> | Debugger에서 명령을 실행하고 Disassembler의 현재 IP에서 댓글로 출력을 추가하십시오. |
bc <||on|off|set 0xBBGGRR> | 분해기에서 경로 채색을 활성화/비활성화합니다 |
idblist | 디스패처에 연결된 모든 IDB 클라이언트 목록 가져 오기 |
syncmodauto <on|off> | 모듈 이름을 기반으로 Disassembler 자동 스위치를 활성화/비활성화합니다 |
idbn <n> | 활성 IDB를 NTH 클라이언트로 설정하십시오 |
jmpto <expression> | |
jmpraw <expression> | IDB가 활성화되면 Disassembler의보기가 결과 주소와 동기화됩니다. |
translate <base> <addr> <mod> | 모듈의 이름 및 오프셋과 관련하여 주소를 다시 비이스 |
WindBG 특정 명령 :
| 디버거 명령 | 설명 |
|---|---|
curmod | 현재 명령어 오프셋에 대한 디스플레이 모듈 정보 (문제 해결 용) |
modlist | DML (Debugger Markup Language) 향상된 모듈 목록이 부드러운 활성 IDB 스위칭을위한 목록 |
idb <module name> | 주어진 모듈을 활성 IDB로 설정합니다 ( modlist Enhanced 버전의 lm 참조) |
modmap <base> <size> <name> | 합성 ( "가짜") 모듈 (기본 주소 및 크기를 사용하여 정의 됨)이 디버거 내부 목록에 추가됩니다. |
modunmap <base> | 기본 주소에서 이전에 맵핑 된 합성 모듈을 제거하십시오 |
modcheck <||md5> | 현재 모듈이 실제로 IDB 파일과 일치하는지 확인하는 데 사용합니다 (예 : 모듈이 업데이트 됨) |
bpcmds <||save|load|> | BPCMDS 래퍼, 저장 및 다시로드 .BPCMDS (BreakPoints 명령 목록) 출력 현재 IDB |
ks | DML (Debugger Markup Language) KV 명령의 향상된 출력 |
GDB 특정 명령 :
| 디버거 명령 | 설명 |
|---|---|
bbt | 아름다운 배경. GDB의 BT 와 유사하지만 Disassembler의 기호를 요청합니다. |
patch | 라이브 컨텍스트를 기반으로 분리기의 패치 바이트 |
bx | GDB X 와 유사하지만 기호를 사용합니다. 기호는 분리기에 의해 해결됩니다 |
cc | Disassembler에서 계속 커서를 계속하십시오 |
Overwrite idb name 입력 필드는 기본 IDB 이름을 변경하기위한 것입니다. 플러그인에서 디스패처에 등록하는 데 사용되는 이름입니다. IDB 자동 스위치는 모듈 이름 일치를 기반으로합니다. 이름이 상충되는 경우 ( foo.exe 및 foo.dll 과 같은), 이것은 일치하는 데 사용될 수 있습니다. 동기화가 활성화되는 동안 입력 필드를 수정하면 디스패처로 다시 등록해야합니다. " Restart "버튼을 사용하여 간단히 수행 할 수 있습니다.
알림으로 .sync 구성 파일을 사용하여 기본적으로 별칭을 할 수 있습니다.
Ret-Sync는 IDA에서 이러한 글로벌 단축키를 정의합니다.
Alt-Shift-S Ret-Sync 플러그인을 실행하십시오Ctrl-Shift-S 글로벌 동기화 토글Ctrl-H 토글 육각형 동기화디버그 도구 모음에서는 글로벌 및 16 진전 동기화를 전환하기 위해 두 개의 버튼을 사용할 수 있습니다.
Syncplugin.py 또한 디버거 명령 래퍼 핫키를 등록합니다.
F2 커서 주소에서 중단 점을 설정하십시오F3 커서 주소에서 원샷 중단 점을 설정하십시오Ctrl-F2 커서 주소에서 하드웨어 브레이크 포인트를 설정하십시오Ctrl-F3 커서 주소에서 원샷 하드웨어 브레이크 포인트를 설정하십시오Alt-F2 번역 (디버거의 Rebase) 현재 커서 주소Alt-F5 가Ctrl-Alt-F5 실행 (GDB 만 해당)F10 단일 단계F11 단일 트레이스이 명령은 현재 IDB가 활성화 된 경우에만 사용할 수 있습니다. 가능하면 다른 사람들을 위해 구현되었습니다.
retsyncplugin이 열리면 Simple Drag'n'drop을 통해 CodeBrowser 창에 추가 할 수 있습니다.

여러 모듈을 보려면 동일한 CodeBrowser 뷰어에서 파일을 열어야합니다. CodeBrowser 창의 추가 제품을 드래그하여 위와 같이 결과를 얻으십시오.
Ret-Sync는 Ghidra에서 이러한 글로벌 단축키를 정의합니다.
Alt-S 활성화 동기화Alt-Shift-S 비활성화 동기화Alt-R 다시 시작 동기화Alt-Shift-R 다시로드 구성디버거 명령에 대한 바인딩도 구현됩니다. 그것들은 IDA의 확장자와 비슷합니다 ( "go"명령 제외).
F2 커서 주소에서 중단 점을 설정하십시오Ctrl-F2 커서 주소에서 하드웨어 브레이크 포인트를 설정하십시오Alt-F3 커서 주소에서 원샷 중단 점을 설정하십시오Ctrl-F3 커서 주소에서 원샷 하드웨어 브레이크 포인트를 설정하십시오Alt-F2 번역 (디버거의 Rebase) 현재 커서 주소F5 가Alt-F5 -Run (GDB 만 해당)F10 단일 단계F11 단일 트레이스 ret-sync는 바이너리 닌자에서 이러한 글로벌 단축키를 정의합니다.
Alt-S 활성화 동기화Alt-Shift-S 비활성화 동기화디버거 명령에 대한 바인딩도 구현됩니다. 그것들은 Ida의 확장에서 나온 것과 비슷합니다.
F2 커서 주소에서 중단 점을 설정하십시오Ctrl-F2 커서 주소에서 하드웨어 브레이크 포인트를 설정하십시오Alt-F3 커서 주소에서 원샷 중단 점을 설정하십시오Ctrl-F3 커서 주소에서 원샷 하드웨어 브레이크 포인트를 설정하십시오Alt-F2 번역 (디버거의 Rebase) 현재 커서 주소Alt-F5 가F10 단일 단계F11 단일 트레이스 [WinDbg]
0:000:x86> pr
eax=00000032 ebx=00000032 ecx=00000032 edx=0028eebc esi=00000032 edi=00000064
eip=00430db1 esp=0028ed94 ebp=00000000 iopl=0 nv up ei pl nz na po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000202
image00000000_00400000+0x30db1:
00430db1 57 push edi
0:000:x86> dd esp 8
0028ed94 00000000 00433845 0028eebc 00000032
0028eda4 0028f88c 00000064 002b049e 00000110
0:000:x86> !cmt 0028ed94 00000000 00433845 0028eebc 00000032
[sync.dll] !cmt called
[IDA]
.text:00430DB1 push edi ; 0028ed94 00000000 00433845 0028eebc 00000032
[WinDbg]
0:000:x86> !rcmt
[sync] !rcmt called
[IDA]
.text:00430DB1 push edi
[WinDbg]
0:000:x86> !fcmt decodes buffer with key
[sync] !fcmt called
[IDA]
.text:004012E0 ; decodes buffer with key
.text:004012E0 public decrypt_func
.text:004012E0 decrypt_func proc near
.text:004012E0 push ebp
참고 : 인수 없이이 명령을 호출합니다.
[WinDbg]
0:000:x86> !lbl meaningful_label
[sync] !lbl called
[IDA]
.text:000000000040271E meaningful_label:
.text:000000000040271E mov rdx, rsp
[WinDbg]
0:000:x86> pr
eax=00000032 ebx=00000032 ecx=00000032 edx=0028eebc esi=00000032 edi=00000064
eip=00430db1 esp=0028ed94 ebp=00000000 iopl=0 nv up ei pl nz na po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000202
image00000000_00400000+0x30db1:
00430db1 57 push edi
[sync.dll] !cmd r edi
[IDA]
.text:00430DB1 push edi ; edi=00000064
[WinDbg]
0:000> !idblist
> currently connected idb(s):
[0] target.exe
[WinDbg]
0:000> !syncmodauto off
[IDA]
[*] << broker << dispatcher msg: sync mode auto set to off
[WinDbg]
0:000:> !idbn 0
> current idb set to 0
이 예에서는 현재 활성 IDB 클라이언트가 다음으로 설정되었습니다.
[0] target.exe.
Alt-F2 바로 가기)에서 사용하기를 의미하고 모듈의 이름 및 오프셋과 관련하여 주소를 다시 비제합니다. ! -a --address 주소는 16 진수 값으로 전달되어야합니다. 명령 구문 분석은 Python의 argparse 모듈을 기반으로합니다. 라인 구문 분석 사용을 중단하려면 -- .
[WinDbg]
0:000:x86> !cmt -a 0x430DB2 comment
주소는 유효한 지침의 주소 여야합니다.
호스트와 동기화 :
gdb> sync
[sync] sync is now enabled with host 192.168.52.1
<not running>
gdb> r
Starting program: /bin/ls
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
"!"없이 명령을 사용하십시오. 접두사
(gdb) cmd x/i $pc
[sync] command output: => 0x8049ca3: push edi
(gdb) synchelp
[sync] extension commands help:
> sync <host>
> syncoff
> cmt [-a address] <string>
> rcmt [-a address] <string>
> fcmt [-a address] <string>
> cmd <string>
> bc <on|off|>
> rln <address>
> bbt <symbol>
> patch <addr> <count> <size>
> bx /i <symbol>
> cc
> translate <base> <addr> <mod>
(gdb) bt
#0 0x0000000000a91a73 in ?? ()
#1 0x0000000000a6d994 in ?? ()
#2 0x0000000000a89125 in ?? ()
#3 0x0000000000a8a574 in ?? ()
#4 0x000000000044f83b in ?? ()
#5 0x0000000000000000 in ?? ()
(gdb) bbt
#0 0x0000000000a91a73 in IKE_GetAssembledPkt ()
#1 0x0000000000a6d994 in catcher ()
#2 0x0000000000a89125 in IKEProcessMsg ()
#3 0x0000000000a8a574 in IkeDaemon ()
#4 0x000000000044f83b in sub_44F7D0 ()
#5 0x0000000000000000 in ()
F3 사용하여 원샷 중단 점을 설정하고 F5 계속 설정하는 대안입니다. 이것은 GDB에서 그것을 선호하는 경우 유용합니다. (gdb) b* 0xA91A73
Breakpoint 1 at 0xa91a73
(gdb) c
Continuing.
Breakpoint 1, 0x0000000000a91a73 in ?? ()
(gdb) cc
[sync] current cursor: 0xa91a7f
[sync] reached successfully
(gdb)
lldb> process launch -s
lldb> sync
[sync] connecting to localhost
[sync] sync is now enabled with host localhost
[sync] event handler started
lldb> synchelp
[sync] extension commands help:
> sync <host> = synchronize with <host> or the default value
> syncoff = stop synchronization
> cmt <string> = add comment at current eip in IDA
> rcmt <string> = reset comments at current eip in IDA
> fcmt <string> = add a function comment for 'f = get_func(eip)' in IDA
> cmd <string> = execute command <string> and add its output as comment at current eip in IDA
> bc <on|off|> = enable/disable path coloring in IDA
color a single instruction at current eip if called without argument
lldb> cmt mooo
Alt+s )/Disable ( Alt+u ) 동기화를 사용하십시오. Ctrl+s Ctrl+u ) 동기화를 활성화하십시오.OLLYDBG2 API의 베타 상태로 인해 다음과 같은 기능 만 구현되었습니다.
F7 사용; 스테핑을위한 F8 ]CTRL+; ]]CTRL+: ] 플러그인 메뉴 또는 명령 Enable ( " !sync" ) 또는 비활성화 ( " !syncoff ") 동기화를 사용하십시오.
명령을 사용하십시오
[sync] synchelp command!
[sync] extension commands help:
> !sync = synchronize with <host from conf> or the default value
> !syncoff = stop synchronization
> !syncmodauto <on | off> = enable / disable idb auto switch based on module name
> !synchelp = display this help
> !cmt <string> = add comment at current eip in IDA
> !rcmt <string> = reset comments at current eip in IDA
> !idblist = display list of all IDB clients connected to the dispatcher
> !idb <module name> = set given module as the active idb (see !idblist)
> !idbn <n> = set active idb to the n_th client. n should be a valid decimal value
> !translate <base> <addr> <mod> = rebase an address with respect to local module's base
참고 : Disassembler (Ida/Ghidra, Alt-F2 바로 가기)에서 ! Translate 명령을 사용하면 Disassembler 창이 특정 주소로 "점프"됩니다 (x64dbg 명령 줄에서 Disasm 실행과 동일).
완전한 디버깅 환경을 사용할 수 없거나 사용자 정의 도구와 함께 사용하더라도 RET-SYNC CORE 기능 (Disassembler, Symbol Resolution과 동기화)을 사용할 수 있습니다. 이를 위해 미니멀리스트 파이썬 라이브러리가 추출되었습니다.
아래의 예는 이벤트 기반 로깅/추적 도구의 출력을 통과하는 스크립트가있는 Python 라이브러리의 사용법을 보여줍니다.
from sync import *
HOST = '127.0.0.1'
MAPPINGS = [
[ 0x555555400000 , 0x555555402000 , 0x2000 , " /bin/tempfile" ],
[ 0x7ffff7dd3000 , 0x7ffff7dfc000 , 0x29000 , " /lib/x86_64-linux-gnu/ld-2.27.so" ],
[ 0x7ffff7ff7000 , 0x7ffff7ffb000 , 0x4000 , " [vvar]" ],
[ 0x7ffff7ffb000 , 0x7ffff7ffc000 , 0x1000 , " [vdso]" ],
[ 0x7ffffffde000 , 0x7ffffffff000 , 0x21000 , " [stack]" ],
]
EVENTS = [
[ 0x0000555555400e74 , "malloc" ],
[ 0x0000555555400eb3 , "open" ],
[ 0x0000555555400ee8 , "exit" ]
]
synctool = Sync ( HOST , MAPPINGS )
for e in EVENTS :
offset , name = e
synctool . invoke ( offset )
print ( " 0x%08x - %s" % ( offset , name ))
print ( "[>] press enter for next event" )
input ()처음에는 동적 분석 (디버거)에 중점을 두었지만 플러그인 세트를 확장하고 다른 도구와 통합 할 수 있습니다.
기타 리소스 :
GDB와 함께 :
Windbg와 함께 :
g ') 알림을받습니다. 이러한 이벤트가 너무 많으면 큰 속도가 저하 될 수 있습니다. 제한된 수정이 구현되었으며 최상의 솔루션은 여전히 일시적으로 동기화하는 것입니다.Ghidra와 함께 :
Ida와 함께 :
갈등 :
.sync 구성 파일을 사용하는 것입니다. [INTERFACE]
host=127.0.0.1
port=9234
Ret-Sync 는 무료 소프트웨어입니다. Free Software Foundation, 라이센스의 버전 3 또는 이후 버전에서 게시 한 GNU 일반 공개 라이센스의 조건에 따라 재분배 및/또는 수정할 수 있습니다.
이 프로그램은 유용 할 것이지만 보증이 없다는 희망으로 배포됩니다. 상업성 또는 특정 목적에 대한 적합성에 대한 묵시적 보증조차 없습니다. 자세한 내용은 GNU 일반 공개 라이센스를 참조하십시오.
이 프로그램과 함께 GNU 일반 공개 라이센스 사본을 받았어야합니다. 그렇지 않은 경우 http://www.gnu.org/licenses/를 참조하십시오.
바이너리 닌자 플러그인은 MIT 라이센스에 따라 릴리스됩니다.
Bruce Dang, Stalkr, @Ivanlef0U, Damien Aumaître, Sébastien Renaud 및 Kévin Szkudlapski, @ m00dy , @saidelike, Xavier Mehrenberger, Ben64, Raphaël Rigo, 친절, 도움, 피드백 및 생각에 대한 Jiss. Ilfak Guilfanov, Igor Skochinsky 및 Arnaud Diederen은 Ida의 내부 및 뛰어난 지원에 도움을주었습니다. Jordan Wiens와 Vector 35에게 감사합니다. 마지막으로 모든 기고자와 문제/버그를보고 한 모든 분들께 감사드립니다.