mirror of
https://github.com/hyugogirubato/KeyDive.git
synced 2026-07-15 18:40:02 +02:00
Release v1.0.4
This commit is contained in:
+15
-14
@@ -4,7 +4,6 @@ import subprocess
|
||||
import time
|
||||
|
||||
import coloredlogs
|
||||
from _frida import Process
|
||||
from pathlib import Path
|
||||
|
||||
import extractor
|
||||
@@ -21,29 +20,31 @@ if __name__ == '__main__':
|
||||
# Parse command line arguments for device ID
|
||||
parser = argparse.ArgumentParser(description='Extract Widevine L3 keys from an Android device.')
|
||||
parser.add_argument('-d', '--device', required=False, type=str, help='Target Android device ID.')
|
||||
parser.add_argument('-f', '--functions', required=False, type=Path, help='Ghidra XML functions file.')
|
||||
parser.add_argument('-f', '--functions', required=False, type=Path, help='Path to Ghidra XML functions file.')
|
||||
parser.add_argument('--force', required=False, action='store_true', help='Force using the default vendor (skipping analysis).')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
try:
|
||||
logger.info('Version: %s', extractor.__version__)
|
||||
|
||||
# Start ADB server
|
||||
# Ensure the ADB server is running
|
||||
exitcode, _ = subprocess.getstatusoutput('adb start-server')
|
||||
if exitcode != 0:
|
||||
raise EnvironmentError('ADB is not recognized as an environment variable')
|
||||
raise EnvironmentError('ADB is not recognized as an environment variable, see https://github.com/hyugogirubato/KeyDive/blob/main/docs/PACKAGE.md#adb-android-debug-bridge')
|
||||
|
||||
# Initialize CDM handler with given device
|
||||
cdm = Cdm(device=args.device, functions=args.functions)
|
||||
# Initialize the CDM handler with the specified or default device
|
||||
cdm = Cdm(device=args.device, functions=args.functions, force=args.force)
|
||||
|
||||
# Find Widevine process on the device
|
||||
process: Process = next((p for p in cdm.device.enumerate_processes() if cdm.vendor.process == p.name), None)
|
||||
if not process:
|
||||
raise Exception('Failed to find Widevine process')
|
||||
logger.info('Process: %s (%s)', process.pid, process.name)
|
||||
# Attempt to locate and identify the Widevine process on the target device
|
||||
pid = cdm.enumerate_processes().get(cdm.vendor.process)
|
||||
if not pid:
|
||||
raise EnvironmentError('Widevine process not found on the device')
|
||||
logger.info('Process: %s (%s)', pid, cdm.vendor.process)
|
||||
|
||||
# Hook into the process to extract DRM keys
|
||||
if not cdm.hook_process(process):
|
||||
raise Exception('Failed to hook into the process')
|
||||
# Hook into the identified process for DRM key extraction
|
||||
if not cdm.hook_process(pid=pid):
|
||||
raise Exception('Failed to hook into the Widevine process')
|
||||
logger.info('Successfully hooked. To test, play a DRM-protected video: https://bitmovin.com/demos/drm')
|
||||
|
||||
# Keep script running while extracting keys
|
||||
|
||||
Reference in New Issue
Block a user