четверг, 2 декабря 2010 г.

Python и реверсинг

Казалось бы - какая связь? А она есть =]



Прежде всего нужно отметить тот факт, что есть средства работать с той же 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)

Вобщем юзать _это_ просто противно, однако и тут нам чип и дейл Python спешит на помощь.

Добрые люди интегрировали его и в WinDbg: http://pykd.codeplex.com/

И теперь скрипты на том же питоне пишуться уже с превеликим удовольствием.

Комментариев нет:

Отправить комментарий