Прежде всего нужно отметить тот факт, что есть средства работать с той же IDA, это и скриптовый язык IDC и плагины которые можно писать на чем угодно. Однако, IDC хоть и удобен в каких-то мелких задачах, но тем не менее его возможности довольно ограничены.
Что же касается плагинов, то их возможности почти безграничны, но есть один недостаток и он довольно серьезен ( по крайней мере для меня ): невозможность без перезагрузки IDA поменять что-то в плагине, и если проект большой - эта мелочь настолько тормозит разработку, что возникают мысли заменить это на чтото иное. И после непродолжительных поисков и тестов, лучшим выбором оказался Python встроенный в IDA.
Страничка проекта idapython: http://code.google.com/p/idapython/
С Python'ом до этого я не встречался, но основы языка учаться сверх быстро.
В итоге профит - написание графа code flow ( то есть то, что показывает нам WinGraph32 в IDA ) на питоне занимает вечер, скорость разработки очень радует, по сравнению с плагинами.
Да и понаписано довольно много на питоне, включая такие интересные штуки как, например, PaiMei - целый фреймворк для реверсера, включающий в себя кучу компонентов для статического и динамического анализа.
Теперь что касается WinDbg, у него тоже есть скриптовый язык и плагины, до плагинов у меня руки не дошли( но думается, что проблемы там могут возникнуть теже, что и с плагинами IDA ), а вот скриптовый язык... О нем без мата я говорить не могу, код такого типа приходится писать:
.for (r $t4 = poi(@$t3); (@$t4 != 0) & (@$t4 != @$t3); r $t4 = poi(@$t4))
{
r? $t5 = #CONTAINING_RECORD(@$t4, nt!_ETHREAD, ThreadListEntry)
r? $t6 = @$t5->Cid
r? $t6 = (nt!_CLIENT_ID *)&@$t6
r $t6 = @@c++(@$t6->UniqueThread)
r? $t7 = (nt!_KTHREAD *)@$t5
r $t8 = @@c++(@$t7->Alertable)
Вобщем юзать _это_ просто противно, однако и тут нам
Добрые люди интегрировали его и в WinDbg: http://pykd.codeplex.com/
И теперь скрипты на том же питоне пишуться уже с превеликим удовольствием.
Комментариев нет:
Отправить комментарий