отслеживать каждый вызов системы и внешней библиотеки в приложении OS X

Я хочу изучить каждый системный и внешний библиотечный вызов данного приложения вместе со структурами данных, которые передаются. (Рассматриваемое приложение представляет собой некое упакованное программное обеспечение, основанное на OpenSSL и OS X. keychain, и я хочу посмотреть, смогу ли я получить закрытый ключ, который помечен как не извлекается в Keychain Access.)

Как я мог сделать это на OS X?

Я думаю, что DTrace приходит на ум, но я не смог найти ни одного примера трюков, чтобы сделать вышеперечисленное.


person cnst    schedule 01.08.2014    source источник
comment
Обратите внимание, что я также объявил награду за применение этого вопроса: security.stackexchange.com/questions/64323/   -  person cnst    schedule 02.08.2014
comment
Есть еще одна награда за другое применение этого вопроса: x" title="может ли dtrace найти неизвлекаемый закрытый ключ из цепочки для ключей на os x"> stackoverflow.com/questions/25044418/   -  person cnst    schedule 02.08.2014


Ответы (1)


Чтобы проверить каждый системный вызов и вызов внешней библиотеки, сценарий DTrace выглядит следующим образом:

#!/usr/sbin/dtrace -s

syscall:::entry
/ pid == $1 /
{
}

pid$1:lib*::entry
{
}

Использование похоже на: ./check.d pid (идентификатор процесса). Для входных параметров вы можете использовать arg0...argN (тип uint64_t), чтобы ссылаться на них.

Но я думаю, что вы должны сначала найти соответствующие системные вызовы и библиотечные функции, иначе вывод будет очень большим и сложным для отладки.

Надеюсь, это может помочь!

person Nan Xiao    schedule 04.08.2014
comment
Спасибо! Кажется, это работает, но вообще не печатает фактические структуры данных. Например. Я вижу что-то вроде `2 112007 COpenSSLCertUtils::GetOpenSSLCertFromDER(unsigned int, unsigned char const*, COpenSSLCertificate*&):entry`, что звучит потенциально интересно (я пытаюсь найти закрытый ключ для своего сертификата из цепочки для ключей), но каковы фактические параметры, которые передаются? Кроме того, могу ли я заинтересовать вас в stackoverflow.com/questions/25044418/ bounty? - person cnst; 06.08.2014
comment
@cnst: Поскольку я не знаком с вашим проектом, я не могу сказать вам, как распечатать ключ напрямую. Я думаю, вы можете использовать print/copyinstr для печати ключа. - person Nan Xiao; 11.08.2014
comment
не могли бы вы предоставить короткий фрагмент для этого? - person cnst; 11.08.2014
comment