Сейчас на форуме: Magister Yoda, site-pro, Rio, johnniewalker (+5 невидимых)

 eXeL@B —› Крэки, обсуждения —› проект по написанию отладчика
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 .
Посл.ответ Сообщение


Ранг: 120.6 (ветеран)
Активность: 0.090
Статус: Участник
rootkit developer

Создано: 24 ноября 2006 08:47 · Поправил: Модератор
· Личное сообщение · #1

Наверное все вы хотели бы иметь отладчик максимально приспособленый для борьбы с антиотладкой, а также умеющий отлаживать драйвера (включая ring0 защиты), и имеющий при этом удобный GUI интерфейс. К сожалению, сейчас достойных отладчиков практически нет. Из юзермодных конечно рулит оля, но по части скрытности с ней все очень плохо, баги не фиксятся, проект мертв (2я версия если и выйдет, то очень нескоро). В рядах ядерных отладчиков все еще хуже. Soft-Ice умер. windbg - гавно (хотя кому-то и нравиться, не буду спорить), Syser имеет красивый интерфейс, но весьма слаб в остальном. Ну и про отладку ring0 защит существующими отладчиками, даже говорить нечего.
В связи с этим у меня давно назревает идея написания универсального и мощьного отладчика, для отладки как юзермода, так и ядра. При этом хочеться получить развивающийся и поддерживаемый проект.

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

Есть три варианта развития проекта:
1 - Фриварная программа.
Вариант этот хорош для пользователей, но я сомневаюсь, что разработка в этом случае зайдет дальше 1й версии. Такой проект неизбежно обязан быть заброшен, потому что авторам быстро это дело надоест. Сделать из проекта платную программу в этом случае будет тоже нельзя (особенно при большом количестве авторов), так как врядли все на это согласяться.
2 - Мы собираем команду, делаем программу, после чего я обеспечиваю ее раскрутку и продвижение. С доходов каждый получает свой процент.
Этот вариант плох тем, что у авторов может не хватит терпения дождаться хороших доходов, и проект может быть заброшен.
3 - Я собираю команду и финансирую написание отладчика. После чего я имею полные права на код, и продаю его по своему усмотрению.
Этот вариант плох тем, что трудно найти людей которые будут на таких условиях хорошо писать код. Скорее всего все захотят просто срубить бабла, напишут глючную первую версию, и исчезнут после получения оплаты, а я останусь с неподдерживаемым и кривым кодом, что тоже сулит проекту недолгую жизнь.

Сам я склоняюсь к 2му варианту, но хотел бы узнать ваше мнение, а также найти желающих заняться этим делом.

З.Ы. отладочное ядро для юзермодного кода я уже написал, так что приступать к написанию отладчика желающие могут хоть завтра.

-----
Скажем дружно - нафиг нужно.




Ранг: 72.1 (постоянный), 30thx
Активность: 0.050
Статус: Участник

Создано: 02 июня 2012 11:17 · Поправил: yagello
· Личное сообщение · #2

Promix_17 пишет:
Вылетает при открытии любого приложения, работающего с сетью

Импорт по ординалам из винсок32 криво обрабатывается?

Это я еще даже в код не заглядывал, страшно!



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 02 июня 2012 13:07
· Личное сообщение · #3

yagello
Да, снова косяк в трейсере, его нужно переписывать чуть менее чем полностью.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 03 июня 2012 16:27
· Личное сообщение · #4

Ну на счет полностью не согласен, но изменять там много чего. Вы просто документацию по архитектуре не видели, там все как надо.

За июнь по идее бету сделать успеем.

| Сообщение посчитали полезным: hlmadip

Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 03 июня 2012 17:40
· Личное сообщение · #5

int пишет:
Ну на счет полностью не согласен

Чес. слово не хотел людей пугать.
Люди не все там так страшно, просто нужен рефакторинг... исправился.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 04 июня 2012 11:07
· Личное сообщение · #6

yagello пишет:
Импорт по ординалам из винсок32 криво обрабатывается?

Нет никакой обработки импорта. Анализатор еще не подцеплен.

Promix_17 пишет:
Вылетает при открытии любого приложения, работающего с сетью

Не "любое". Нормально открыл миранду, приведите пример неработающего приложения.

Исправлено несколько багов, постараюсь разобраться с остальными и закомичу.



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 04 июня 2012 12:46
· Личное сообщение · #7

int пишет:
Нет никакой обработки импорта

Падает не из за импорта, а если я правильно понял, из за обработки исключений.
Смотри атач.


24da_04.06.2012_EXELAB.rU.tgz - GetIp.rar



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 04 июня 2012 14:15
· Личное сообщение · #8

Периодически приходит отладочное сообщение, что в программе сработал останов по адресу 0x778b0fab. Если туда глянуть, то там действительно 0xCC и это ntdll.dll. Вопрос только почему. Если исключение отдать жертве, проглатывает.

Еще поймал проблему отключеня/включения бряков, правда не факт, что баг присутствует в версии на SVN. Поскольку эта функция (enable(), включающая бряк) стояла в конструкторах, из-за наследования бряк врубало два раза, перезаписывая m_orig_value.

Сейчас пытаюсь победить баг с тем, что временные бряки не удаляются после перезапуска:

void BreakpointsManager::clearTempBreakpoints()
{
std::remove_if(
breakpoints.begin(),
breakpoints.end(),
boost::bind(&Breakpoint::get_type, _1) == brk_temp // не удаляетя :\
);
}




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 04 июня 2012 16:35 · Поправил: ClockMan
· Личное сообщение · #9

int
нету вызова VirtualProtect перед записью в OEP СС, дебуг апи за вас это делать небудет
Code:
  1. /*40E1B1*/  MOV BYTE PTR [ESP+23],0CC
  2. /*40E1B6*/  CALL dbgapi.?dbg_write_memory@@YGHPAX00KPAK@Z
  3. /*40E1BC*/  TEST EAX,EAX
  4. /*40E1BE*/  JNZ SHORT 0040E1DF

ну и спецефичный файло прилогаю


a902_04.06.2012_EXELAB.rU.tgz - Genrandom.exe

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 33.4 (посетитель), 24thx
Активность: 0.020
Статус: Участник

Создано: 05 июня 2012 12:20
· Личное сообщение · #10

int

если не удаляются из breakpoints

void BreakpointsManager::clearTempBreakpoints()
{
iterator it = // iterator - тип итератора контейнера breakpoints
std::remove_if(
breakpoints.begin(),
breakpoints.end(),
boost::bind(&Breakpoint::get_type, _1) == brk_temp // не удаляетя :\
);

breakpoints.erase(it, breakpoints.end());
}

может быть так попробывать?

| Сообщение посчитали полезным: r_e

Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 05 июня 2012 12:51
· Личное сообщение · #11

Ну можно просто пройтись итератором и удалить все с типом brk_temp. Вопрос, собственно, в другом. Почему интересно remove_if не отработал.



Ранг: 33.4 (посетитель), 24thx
Активность: 0.020
Статус: Участник

Создано: 05 июня 2012 12:56
· Личное сообщение · #12

int
он отработал
___http://alenacpp.blogspot.com/2005/10/stdremove-stdremoveif.html




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 05 июня 2012 13:21 · Поправил: neomant
· Личное сообщение · #13

bind возвращает функциональный объект. То есть как-то так:
Code:
  1. boost::bind(&Breakpoint::get_type)() ==  brk_temp

Ерунду написал. В remove_if передаётся предикат, который применяется ко всему множеству элементов.

-----
Следуй за белым кроликом




Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 05 июня 2012 14:35
· Личное сообщение · #14

int
redlord правильно написал. remove операции на контейнерах не удаляют элементы, они их переносят в конец и возвращают итератор, указывающий на начало удаленных элементов.
Соответственно, после того как ты сделал remove*, нужно почистить контейнер через erase.

-----
старый пень




Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 05 июня 2012 15:05
· Личное сообщение · #15

Правильнее так.
Sample.erase( std::remove_if( Object.begin(), Object.end(), Boost::bind(&Foo::condition, _1)) , Object.end());


<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 .
 eXeL@B —› Крэки, обсуждения —› проект по написанию отладчика
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати