Крюк на Google Chrome Pydbg - PullRequest
       5

Крюк на Google Chrome Pydbg

1 голос
/ 09 января 2012

Я учусь использовать pyDbg, и я установил мягкий хук на firefox

Часть кода

dbg = pydbg()
hooks = utils.hook_container()


for (pid,name) in dbg.enumerate_processes():
    if name == "firefox.exe":
        dbg.attach(pid)

hook_address = dbg.func_resolve_debuggee("nspr4.dll","PR_Write")

hooks.add( dbg, hook_address, 2, sniff, None )

dbg.run()

Теперь, как мне установить мягкий хук на Google Chrome?

Извините за плохой английский и спасибо

1 Ответ

0 голосов
/ 08 марта 2012

Вы делаете это точно так же, за исключением того, что имена функций будут отличаться и вы захотите присоединить к процессу, имя которого соответствует вашему экземпляру Chrome.

В качестве альтернативы вы можете использовать функцию load()pydbg, чтобы запустить экземпляр Chrome самостоятельно и отладить его.В этом случае вам также нужно будет обработать LOAD_DLL_DEBUG_EVENT, чтобы можно было установить точку останова после загрузки DLL.См. Ниже.

Суть в том, что вам понадобятся символы отладки (в Windows это файлы .pdb), соответствующие вашей сборке Chrome.Скорее всего, этого не хватает в вашем сценарии.

import sys
try:
    from pydbg import *
    from pydbg.defines import *
    from utils import hooking
except:
    print "ERROR: you need pydbg and utils.hooking from PAIMEI."
    sys.exit(-1)

hooks = None # needed in handler_load_dll()

def entry_SomeChromeFunction(dbg, args):
    """ This is where you end up when the function got called """
    # Do whatever you like in here
    return DBG_CONTINUE

def handler_load_dll(dbg):
    last_dll = dbg.get_system_dll(-1)
    # Wait for the DLL we're looking for ...
    if "some-chrome.dll".lower() == last_dll.name.lower():
        # Now resolve the address of the function (see note: requires debug symbols)
        funcaddr = dbg.func_resolve(last_dll.name,"SomeChromeFunction")
        # Add the hook
        hooks.add(dbg, funcaddr, 2, entry_SomeChromeFunction, None) # <- last one is for breakpoint on exit of the function
    return DBG_CONTINUE

dbg = pydbg()
hooks = utils.hook_container()
dbg.load("chrome.exe"); # assuming that is the name of the binary
# you can also use a full path above and pass the command line as parameter
dbg.set_callback(LOAD_DLL_DEBUG_EVENT, handler_load_dll)
dbg.run()

Примечание: Я думаю, что должна быть возможность назначить адрес функции напрямую, без вызова func_resolve_debuggee().Но мне никогда не нужно было этого делать.

Также обратите внимание: в моем исходном коде была ошибка.dbg.func_resolve_debuggee() не должен использоваться в обработчике LOAD_DLL, теперь это исправлено.

Редактировать: Я вижу, что ваш исходный образец в буквальном смысле является урезанной версией firefox_hook.py из Grey Hat Python .Пример довольно хороший, но он предполагает, что вы знаете , что вы делаете, включая наличие символов отладки на месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...