
기존 프로그램의 동작을 변경하기위한 어셈블리 코드 패치는 맬웨어 분석, 소프트웨어 리버스 엔지니어링 및 광범위한 보안 연구 영역에서 드문 일이 아닙니다. 이 프로젝트는 인기있는 IDA Pro Disassembler를 확장하여 빠른 반복을 위해 설계된보다 강력한 대화식 바이너리 패치 워크 플로를 만듭니다.
이 프로젝트는 현재 X86/X64 및 ARM/ARM64 패치를 지원하는 유비쿼터스 키스톤 엔진의 사소한 포크로 구동되어 나머지 키스톤 아키텍처를 향후 릴리스에 가능합니다.
이 플러그인의 개발을 지원해 주신 Hex-Ray에 특별한 감사를드립니다.
이 플러그인에는 IDA 7.6 및 Python 3이 필요합니다. Windows, Linux 및 MacOS를 지원합니다.
이전 버전의 IDA (8.2 이하)는 Python 3.11 이상과 호환되지 않습니다.
플러그인을 자동으로 설치하려면 IDA 콘솔에서 다음 줄을 실행하십시오.
import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' ). read ()) import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' , cafile = '/etc/ssl/cert.pem' ). read ())또는 릴리스 페이지에서 해당 플랫폼 용 배포 가능한 플러그인 패키지를 다운로드하여 플러그인 폴더로 삭제하여 플러그인을 수동으로 설치할 수 있습니다.
이 플러그인을 IDA의 사용자 플러그인 디렉토리에 설치하는 것이 좋습니다 .
import ida_diskio , os ; print ( os . path . join ( ida_diskio . get_user_idadir (), "plugins" ))패치 플러그인은 지원되는 아키텍처 (x86/x64/arm/arm64)에 대해 자동으로로드되고 IDA 분해보기의 오른쪽 클릭 컨텍스트 메뉴에 관련 패치 작업을 주입합니다.

상황에 맞는 패치 조치의 전체 목록은 다음 섹션에 설명되어 있습니다.
메인 패치 대화 상자는 오른쪽 클릭 컨텍스트 메뉴에서 조립 작업을 통해 시작할 수 있습니다. 기본 IDA 분해보기를 시뮬레이션하여 하나 이상의 지침을 빠른 연속으로 편집하는 데 사용할 수 있습니다.

어셈블리 라인은 지침을 실시간으로 수정하는 데 사용할 수있는 편집 가능한 필드입니다. Enter를 누르면 입력 된 명령을 데이터베이스에 커밋 (패치)합니다.
현재 위치 (일명 커서)는 항상 녹색으로 강조 표시됩니다. 패치 / 편집의 결과로 막히는 지침은 패치를 커밋하기 전에 빨간색으로 강조 표시됩니다.

마지막으로, UP 및 DOWN 화살표 키는 여전히 편집 가능한 어셈블리 텍스트 필드에 중점을두고 마우스를 사용하지 않고 분해 뷰를 빠르게 움직일 수 있습니다.
가장 일반적인 패치 조치는 하나 이상의 지침을 제거하는 것입니다. 이러한 이유로, NOP 작업은 항상 오른쪽 클릭 메뉴에서 볼 수 있습니다. 빠른 액세스.

선택된 범위의 지침뿐만 아니라 개별 지침을 사용할 수 있습니다.
항상 '좋은'경로를 실행하기 위해 조건부 점프를 강요하는 것은 또 다른 일반적인 패치 동작입니다. 플러그인은 조건부 점프 명령을 마우스 오른쪽 버튼으로 클릭 할 때만이 작업을 표시합니다.

조건부 점프를 원하지 않으면 대신 NOP를 사용할 수 있습니다!
패치는 언제든지 패치 하위 메뉴를 통해 선택된 실행 파일에 저장 (적용) 할 수 있습니다. Quick-Apply 동작을 사용하면 동일한 설정을 사용하여 후속 패치를 저장하는 것이 더 빠릅니다.

플러그인은 또한 각 저장 중에 현재 데이터베이스 패치 세트를 '깨끗하게 적용'하는 데 사용하는 원래 실행 파일의 백업 ( .bak )을 유지하기 위해 적극적으로 노력할 것입니다.
마지막으로, 패치에 불만이 없다면 패치 (노란색) 지침 블록을 마우스 오른쪽 버튼으로 클릭하여 원래 값으로 되돌릴 수 있습니다.

바이트를 원래의 값으로 되돌리는 것은 '쉽다'는 것이지만, 이전 상태로 분석을 복원하는 것은 '어려운'일 수 있습니다. 패치를 되돌리려면 때때로 추가 인간 고정 장치가 필요할 수 있습니다.
시간과 동기 부여 허용, 향후 작업은 다음을 포함 할 수 있습니다.
xor eax, eax; ret; ) Pretty: mov [rsp+48h+dwCreationDisposition], 3
Raw: mov [rsp+20h], 3
외부 기여, 문제 및 기능 요청을 환영합니다. 향후 릴리스를 위해 고려되기를 원한다면이 저장소의 develop 지점에 풀 요청을하십시오.