eXeL@B —› Софт, инструменты —› Net Debugger для x86 |
Посл.ответ | Сообщение |
|
Создано: 15 января 2013 10:45 · Личное сообщение · #1 Собственно из названия темы видно к чему и откуда я хочу доступ.Однако просто из Net доступа к памяти не получить и поэтому в проекте есть библа написанная на C++ в котором я честно признаюсь ... никак. На данный момент при старте откомпиленного проекта хоть в дебаге хоть напрямую выходит ошибка доступа к памяти. Будьте добры посмотрите что не так и если можно поправьте <-это есть самый цимис!!!! Заранее благодарен.. P.S.На машине win7 SeDebugPrivilege в local policy выставлен правильно P.S.1. Весь код старта проекта в форме GeneralForm (должно по идее остановиться на AtEntryPoint но сц.ка до туда не доходит... что в районе WaitEvent Ссыль хттр://files.mail.ru/333784490B164EE89C378A8DA0394478 |
|
Создано: 15 января 2013 11:23 · Поправил: plutos · Личное сообщение · #2 К сожалению, смотреть ваш проэкт сейчас нет возможности, поэтому выскажу просто пару общих замечаний. Может они окажутся вам полезными. По идее, нельзя добавлять reference to a C++ library в .NET проэкте, поскольку это только для .NET assemblies. Мы обычно используем interop с P/Invoke. Вот ссылка на неплохой туториал: http://msdn.microsoft.com/en-us/library/aa288468(VS.71).aspx Не вдаваясь в подробности: нужно написать method stubs, которые будут вызывать exported functions из вашей dll. Можно пойти другим путем и использовать C++/CLI. Вот ссылка на туториал по C++/CLI: http://www.codeproject.com/Articles/19354/Quick-C-CLI-Learn-C-CLI-in-less-than-10-minutes ----- Give me a HANDLE and I will move the Earth. | Сообщение посчитали полезным: igorca |
|
Создано: 15 января 2013 12:42 · Личное сообщение · #3 |
|
Создано: 25 января 2013 14:45 · Личное сообщение · #4 |
|
Создано: 28 марта 2013 13:02 · Личное сообщение · #5 plutos пишет: По идее, нельзя добавлять reference to a C++ library в .NET проэкте, поскольку это только для .NET assemblies. Нельзя, но Зато можно вызывать вызывать функции дтнамически. Declare Sub FillMemory Lib "kernel32.dll" Alias "RtlFillMemory" (Destination As Any, ByVal Length As Long, ByVal Fill As Byte) FillMemory bytearray(0), 10, 76 Medsft пишет: просто из Net доступа к памяти не получить это не совсем верно. в Нет можно даже ассемблереые вставки делать: Для начала рассмотрим методику вставки. Для вызова ассемблерного кода используется API функция “CallWindowProc”, содержащаяся в библиотеке "user32.dll", которая входит в поставку винды. Она имеет 1 основной и 4 дополнительных параметра. В первый мы будем передавать адрес первой ячейки массива, содержащего массив байт (откомпилированную ассемблерную процедуру), а в остальные – параметры, необходимые для работы ассемблерной функции. Для начала создадим новый проект и объявим эту функцию: Code:
Теперь создадим функцию, которая преобразует HEX строку машинных кодов в байтовый массив и возвратит адрес первой ячейки массива: Code:
Теперь перейдем непосредственно к созданию ассемблерной функции. При создании новой функции будем использовать следующий шаблон: Code:
Комментарий: первый параметр, передаваемый функции всегда находится по адресу ebp+8, остальные в зависимости от их длины расположены дальше ebp+8. Строки передавать в функцию нельзя (так как они в Unicode. И вообще, при работе с ними, все начинает глючить). Также компилятор nasmw не понимает db, посему работать с переменными, созданными в этой функции вам тоже не получится. И самое обидное: API использовать также нельзя. При вызове более 2-х параметров, в конце функции необходимо вместо ret ставить ret 8 при использовании 3-х параметров и ret 8+<длина параметра(чаще всего 4)> при использовании 4-х параметров. Теперь у Вас возникнет вопрос: “Как это все теперь перевести в HEX строку, которую мы будем передавать ранее написанной функции?”. Резонный вопрос. Для начала необходимо перевести этот ассемблерный код в BIN файл, содержащий машинные коды, для чего можно использовать nasmw – компилятор ассемблера (командная строка: nasmw.exe -f bin YouProgram.asm -o YouProgram.bin), а затем написать небольшую программку для перевода BIN файла в HEX строку. Я же рекомендую не геморроиться и использовать написанную мной прогу Asm to VB, которая без проблем переведет код, написанный по вышеприведенному шаблону в BIN файл или HEX строку. В Asm to VB я уже встроил компилятор nasmw, поэтому кроме этой программы для написания ассемблерных функций Вам ничего не потребуется. Добавление ассемблерных процедур в код на Visual Basic 6.0 Мы имеем Hex строку и имеем функцию, передавая в которую Hex строку она создает массив машинных инструкций и возвращает ссылку на первую ячейку массива. Поверьте этого достаточно. Теперь запустим функцию с параметрами (если в функцию передаётся не 4, а меньше параметров, то остальные параметры забиваются нулями, если этого не сделать, функция не будет работать!), предварительно присвоив переменной sHex Hex строку, которую мы получили в предыдущем шаге: Code:
Теперь мы имеем в переменной sRetVal результат работы функции. ----- -=истина где-то рядом=- | Сообщение посчитали полезным: Medsft, plutos |
|
Создано: 19 сентября 2013 18:37 · Поправил: Medsft · Личное сообщение · #6 Встречаем мой мод DILE debugger!!!!! Поскольку над проектом работаю в одном лице и "местные товарищи ))))" помогать отказались-- гарантированы куча ошибок. Так что тестеров милости просим!!!!! Что сделано: - переделан "доделан" движок парсинга assembly. Теперь отладчик кушает большинство протекченных приложений - переделан GUI отображения MSIL-кода (теперь понятно куда и зачем прыгает указатель ;) , Важно: обратить внимание на появившуюся log-строку внизу каждого открытого о отлаживаемого метода ) - по мелочи : работает лучше, правая кнопка мыши (юзайте и поймете) - в сборке обновлена сторонняя dll отвечающая за вывод форм (последняя версия) - И НАКОНЕЦ!!!!! прикручен editor code (работает естественно только в режиме дизассемблера).Editor делает пока только самые основные вещи которые нужны настоящему хакеру )))) (юзните поймете) - И НАКОНЕЦ!!!!! с целью сохранения того что вы понаделали с кодом прикручена библиотека из de4dot (сами понимаете что умеет работать с защищенными файлами). Для сохранения результатов юзать "Make clon"(сами поймете не маленькие ;) ) Ссыль http://www.mediafire.com/download/ukwblv94cdvxq9m/DILE_mod_Medsft_v1(2).zip Тестерам буду благодарен... а если кто хочет помочь тому вдвойне )))))) | Сообщение посчитали полезным: nick8606, Hellspawn, Vnv, 4kusNick, VodoleY |
|
Создано: 19 сентября 2013 18:55 · Личное сообщение · #7 |
|
Создано: 19 сентября 2013 18:59 · Личное сообщение · #8 |
|
Создано: 19 сентября 2013 19:15 · Поправил: Medsft · Личное сообщение · #9 |
|
Создано: 19 сентября 2013 19:23 · Личное сообщение · #10 |
|
Создано: 19 сентября 2013 19:25 · Поправил: Medsft · Личное сообщение · #11 |
|
Создано: 19 сентября 2013 19:42 · Личное сообщение · #12 |
|
Создано: 19 сентября 2013 19:51 · Личное сообщение · #13 |
|
Создано: 19 сентября 2013 20:00 · Поправил: Medsft · Личное сообщение · #14 ЭЭЭЭ Нашел комп в хер поймическом кафе ))) Windows 7 профессиональная 32 разрядная система, скачал, распаковал, запустилась со второго раза))) (видимо в xml.setting он пути старые сохранил поэтому после первого раза и не запустилась )... Братва не отвлекайте меня у нас тут праздник говорюж бухаем ))))) АААА угадал вы время тянете чтоб другие не качали и загадку мою не отгадывали)))) чтоб приватную версию в однёху получить ))))))))))))))) |
|
Создано: 19 сентября 2013 21:58 · Личное сообщение · #15 Хз, у меня ни с 1 ни со 2 раза не запускается. Заканчивается всё этим: FileNotFound! ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. |
|
Создано: 19 сентября 2013 22:19 · Поправил: sendersu · Личное сообщение · #16 |
|
Создано: 19 сентября 2013 22:29 · Личное сообщение · #17 |
|
Создано: 20 сентября 2013 14:33 · Личное сообщение · #18 |
|
Создано: 20 сентября 2013 15:02 · Личное сообщение · #19 |
|
Создано: 20 сентября 2013 15:31 · Личное сообщение · #20 |
|
Создано: 20 сентября 2013 15:32 · Поправил: Medsft · Личное сообщение · #21 |
|
Создано: 20 сентября 2013 15:46 · Личное сообщение · #22 |
|
Создано: 20 сентября 2013 16:46 · Поправил: 4kusNick · Личное сообщение · #23 Во, теперь запускается нормально! Погонял: - Если тыкнуть правой кнопкой не на индекс инструкции (IL_XXX), а на саму инструкцию, и выбрать в меню "Toggle Breakpoint" - ничего не происходит. При клике правой кнопкой по индексу инструкции - работает нормально. - Если тыкнуть правой кнопкой на инструкцию и выбрать там Nop instruction, то вываливается эксепшн: System.ArgumentOutOfRangeException: InvalidArgument=Значение '0' недопустимо для 'index'. Имя параметра: index в System.Windows.Forms.ListView.SelectedListViewItemCollection.get_Item(Int32 index) в Dile.UI.CodeEditorForm.NopInstructionMenuItem_Click(Object sender, EventArgs e) С Remove instruction - аналогично. - Не понятно как запускать дебаггер. Закинул в DILE сборку, поставил бряк на первом опкоде в Entry Point. Но кнопка Run, как и пункт меню Debug->Run debuggee недоступны. - Пришлите все англ строки, что вы добавили в проект в личку - я помогу с переводом, а то иногда совсем трудно читать. --- ADDED: - Если нопить или удалять одну и ту же инструкцию, то комменты к ней дописываются бесконечно. В идеале удалённую инструкцию надо выпиливать из листинга. Или отключать пункты контекстного меню nop и remove для неё. ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. |
|
Создано: 20 сентября 2013 22:35 · Личное сообщение · #24 Medsft немного не воткнул, вот например идут команды: ldarg.0 и ldarg.1 потом дергается функа сравнения, как мне посмотреть что в стеке перед вызовом? в студии, это глянуть можно, ну если, конечно, удачно распотрошить сборку... 4kusNick а как ставить бряк на точке входа? а то я обычно запускают, потом раставляю бряки и потом ещё раз запускаю))) ----- [nice coder and reverser] |
|
Создано: 20 сентября 2013 23:16 · Поправил: 4kusNick · Личное сообщение · #25 Hellspawn В Project explorer'е на сборке кликайте правой кнопкой мыши, там Display Entry method, и в нём уже на первом опкоде бряк можно поставить. А как отладку запускать? =D Я добавил сборку в проект, но кнопки запуска отладки неактивны =\ Вот так: При этом аттач работает. ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. |
|
Создано: 20 сентября 2013 23:47 · Личное сообщение · #26 |
|
Создано: 20 сентября 2013 23:48 · Личное сообщение · #27 4kusNick эм))) file -> new project -> startup setting -> start programm -> executeable_browser -> ok ----- [nice coder and reverser] | Сообщение посчитали полезным: 4kusNick |
|
Создано: 21 сентября 2013 00:38 · Личное сообщение · #28 |
|
Создано: 21 сентября 2013 00:49 · Личное сообщение · #29 ну пару супер хакерских методов вы отгадали ... но не все))) по поводу редактора: нужно понять что диле изначально не мог ничего редактировать и я прикрутил к нему сторонюю библу из дедота но при этом не стал менять ядро отладчика, а просто раралельно гружу ассембли в прострпнство 2 длл при этом когда вы делаете напрмер ноп инструктион приложение приаттаченное и разобранное отладчиком остается неизменным а все изменения происходят в пространстве библы dnlib чтобы отладчик их увидел вы должны сделать клон приложения и погрузить его в основное пространство.. |
|
Создано: 21 сентября 2013 00:50 · Личное сообщение · #30 |
eXeL@B —› Софт, инструменты —› Net Debugger для x86 |