гидра, полная функций thunk - PullRequest
       141

гидра, полная функций thunk

1 голос
/ 05 августа 2020

Я пытаюсь сделать кряк в гидре. Я уже смог найти ответ, но я хочу знать, как бы я сделал это «правильно», поскольку я использовал отладчик и смотрел на строки. На изображении ниже вы можете видеть, что очевидно, что есть много функций thunk, но, честно говоря, они просто выглядят как printf. Я не знаю, как исправить это, чтобы получить действительно читаемые имена функций, или если нет способа.

Я предположил, что это могло быть связано с ошибкой, которую я получаю, когда пытаюсь проанализировать файл, в котором я получаю ошибку о файле PDB. Я попытался перекомпилировать msdia140.dll, потому что использую Visual Studio 2019, но при попытке сделать это только что получил ошибки сборки.

TL; DR, как мне сделать так, чтобы изображение ниже не было заполнено thunk и фактически читается так же, как функции printf.

Ghidra Thunks

Что происходит при попытке собрать новый КПК

1 Ответ

3 голосов
/ 11 августа 2020

Я предположил, что это могло иметь какое-то отношение к ошибке, которую я получаю, когда пытаюсь проанализировать файл, в котором я получаю сообщение об ошибке файла PDB

Я предполагаю ошибку сообщение: «Невозможно найти файл PDB« [...] »с соответствующим идентификатором GUID [...]». Если это так, то это связано с тем, что у вас нет файла PDB - файла, содержащего отладочную информацию - программы, которую вы в настоящее время реконструируете. Я бы сказал, что это нормально в случае взлома.

TL; DR, как мне сделать так, чтобы изображение ниже не было полно функций преобразователя и на самом деле его можно было читать так, как они выглядят как функции printf.

ну, это и есть реальная работа, которую вам нужно выполнить в качестве реверс-инженера: начните понимать, что эти функции делают, и устанавливать имена (и типы данных). * За исключением ситуаций вроде MSIL или Java, когда в скомпилированном двоичном файле присутствует много метаданных, у Ghidra нет способа автоматически определять имена функций. Для переменных справедливо несколько худшее утверждение: во многих архитектурах нет даже понятия переменной в машинном коде.

У Ghidra есть некоторые эвристики, которые помогут вам с ручным процессом: когда он ставит префикс thunk_, например , это означает, что рассматриваемая функция оценивается как простая передача управления другой целевой функции. Или вызов функции API system уже был правильно назван.

Хорошая новость в том, что вы уже начали некоторую работу: на основе аргументов функции или на основе вашего динамического c анализа вы уже предположил, что thunk_FUN_00d83950 может быть printf. Итак, щелкните правой кнопкой мыши функцию, которую хотите переименовать, и выберите «Переименовать функцию». Также обратите внимание на горячую клавишу, указанную в меню - она ​​вам понадобится много .

Другие функции потребуют дополнительной работы по анализу: дважды щелкните по ним и попытайтесь выяснить , что они делают. Или - как вы это делали раньше, и это очень мощный метод - объедините ваши усилия по обратному проектированию stati c с динамическим c анализом.

После исправления некоторых функций names вы также можете хочу поменять свои типы . Щелкните его правой кнопкой мыши еще раз, выберите «Изменить подпись функции» и внесите изменения в появившемся окне. В случае printf, который имеет варианты c аргументы , может потребоваться выбрать справа «Varargs».

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