Pull to refresh
1
0
Send message

Уже есть версия 108, для нее патч v2

для клавиши SCROLL lock 4883B998000000000F85B9000000488B4730488B8010010000488338000F85 48C7C191000000FF154250EE0DA80166B8E803750466B8004066894710EB04

т.е. поменялся только вызов GetKeyState

Написал скрипт для автоматизации вычислений call

from pathlib import Path
import subprocess
from struct import pack, pack_into
from itertools import batched
import lief

d_path = r"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.43.34808\bin\Hostx64\x64\dumpbin.exe"
patch_pattern = bytes(int(''.join(i), 16) for i in batched('4883B998000000000F85B9000000488B4730488B8010010000488338000F85', 2))
# scrol lock
# replace_pattern = bytearray(int(''.join(i), 16) for i in batched('48C7C191000000FF155262EE0DA80166B8E803750466B8004066894710EB04', 2))

# numlock
replace_pattern = bytearray(int(''.join(i), 16) for i in batched('48C7C190000000FF155262EE0DA80166B8E803750466B8004066894710EB04', 2))

result = subprocess.check_output(f'"{d_path}" /IMPORTS chrome.dll').splitlines()
r = [i for i in result if i.find(b'GetKeyState') != -1]

assert len(r) == 1

func_addr = int(r[0].split()[0], 16)
data = Path('chrome.dll').read_bytes()
pattern = pack('<Q', func_addr)
func_offset = data.find(pattern)
patch_offset = data.find(patch_pattern)

pe = lief.PE.parse('chrome.dll')
rva_patch = pe.offset_to_virtual_address(patch_offset)
rva_func = pe.offset_to_virtual_address(func_offset)

val  = rva_func - rva_patch - 13
pack_into('<I', replace_pattern, 9, val)

print(hex(func_addr), hex(func_offset), hex(patch_offset), hex(val))

print(''.join(f'{i:02X}' for i in patch_pattern), ''.join(f'{i:02X}' for i in replace_pattern))

не все автоматизирует, и надо путь к dumpbin прописать, но выдает правильно. lief нужен для преобразования адресов, но импорт все равно dumpbin пришлось получать, lief почему то импорта USER32 вообще не видит.

еще pattern на numlock добавил, мне так удобнее чем scrolllock

в новой версии хром сработало

Information

Rating
Does not participate
Registered
Activity

Specialization

Инженер электронных устройств
Python