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

 eXeL@B —› Софт, инструменты —› Net Debugger для x86
Посл.ответ Сообщение

Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 15 января 2013 10:45
· Личное сообщение · #1

Собственно из названия темы видно к чему и откуда я хочу доступ.Однако просто из Net доступа к памяти не получить и поэтому в проекте есть библа написанная на C++ в котором я честно признаюсь ... никак.
На данный момент при старте откомпиленного проекта хоть в дебаге хоть напрямую выходит ошибка доступа к памяти.
Будьте добры посмотрите что не так и если можно поправьте <-это есть самый цимис!!!!
Заранее благодарен..
P.S.На машине win7 SeDebugPrivilege в local policy выставлен правильно
P.S.1. Весь код старта проекта в форме GeneralForm (должно по идее остановиться на AtEntryPoint но сц.ка до туда не доходит... что в районе WaitEvent
Ссыль хттр://files.mail.ru/333784490B164EE89C378A8DA0394478




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 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

Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 15 января 2013 12:42
· Личное сообщение · #3

Medsft пишет:
Однако просто из Net доступа к памяти не получить и поэтому в проекте есть библа написанная на C++ в котором я честно признаюсь ... никак
- НИКАК!!!!
С++ часть уже реализована в проекте просто не работает почему-то)))) !!! - а поскольку я в ней не силен поэтому и прошу помощи



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 25 января 2013 14:45
· Личное сообщение · #4

Ну что...народ неужели никто не поможет? Выходные на носу - время как раз для добрых дел)))))




Ранг: 469.0 (мудрец), 100thx
Активность: 0.250
Статус: Участник
[www.AHTeam.org]

Создано: 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:
  1. Private Declare Sub CallWindowProc Lib "user32" Alias "CallWindowProcA" _ 
  2.  (ByVal ptrMC As Long, ByRef P1 As Long, ByVal P2 As Long, ByVal P3 As Long, ByVal P4 As Long)


Теперь создадим функцию, которая преобразует HEX строку машинных кодов в байтовый массив и возвратит адрес первой ячейки массива:

Code:
  1. Private Bytes() As Byte 
  2.  Private Function LoadAsmFunction(CodeString As String) As Long 
  3.      Dim i As Long 
  4.      If Len(CodeString) = 0 Then Exit Sub 
  5.      ReDim Bytes(Len(CodeString) \ 2 - 1) 
  6.      For i = 0 To Len(CodeString) \ 2 - 1 
  7.          Bytes(i) = CByte("&H" & Mid(CodeString, i * 2 + 1, 2)) 
  8.      Next i 
  9.      LoadAsmFunction = VarPtr(Bytes(0)) 
  10.  End Function


Теперь перейдем непосредственно к созданию ассемблерной функции.
При создании новой функции будем использовать следующий шаблон:

Code:
  1. [BITS 32] ;Делаем процедуру 32 битной
  2.  ; Считываем данные из стека
  3.  push ebp 
  4.  mov  ebp, esp 
  5.  push ebx 
  6.  push esi 
  7.  push edi 
  8.  ; Код нашей процедуры
  9.  ; Если в процедуру передавалось два параметра
  10.  mov  eax, [ebp+8]  ; Считываем первый
  11.  mov  ebx, [ebp+12] ; Считываем второй
  12.  xor  eax, ebx      ; Производим операцию над параметрами
  13.  ; Регистр EAX всегда должен содержать то, что возвращает функция
  14.  ; Записываем данные в стек
  15.  pop edi 
  16.  pop esi 
  17.  pop ebx 
  18.  mov esp,ebp 
  19.  pop ebp 
  20.  ret


Комментарий: первый параметр, передаваемый функции всегда находится по адресу 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:
  1. sRetVal = CallWindowProc(LoadAsmFunction(sHex),0,0,0,0)


Теперь мы имеем в переменной sRetVal результат работы функции.

-----
-=истина где-то рядом=-


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

Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 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

Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 19 сентября 2013 18:55
· Личное сообщение · #7

кто расскажет мне какие хакерские основные приемы уже реализованы получит приватную версию отладчика с возможность добавлять свои методы в тело приложения))))). Впрочем если отгадавших будет много приват станет пабликом




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 19 сентября 2013 18:59
· Личное сообщение · #8

Medsft это шикарно) дома юзну, проверю. У меня к DILE была одна огромная претензия,
нельзя нормально посмотреть локальные переменные это как-то можно поравить?
в студии все видно, но в студию не все ехе можно загнать для отладки.

-----
[nice coder and reverser]




Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 19 сентября 2013 19:15 · Поправил: Medsft
· Личное сообщение · #9

Hell.. да я сам хренею от того как реализованы просмотр переменных.. выделяешь строку в окошке лок переменные а дальше курсор мыши на первую колонку и тап
Извиняюсь в watch окне... и вообще пишу стелефона и пьян порядком)))




Ранг: 307.9 (мудрец), 196thx
Активность: 0.180
Статус: Участник

Создано: 19 сентября 2013 19:23
· Личное сообщение · #10

XP SP 2 даже не запустилось, в отличии от оригинала v0.2.12.3333 ;)

-----
Don_t hate the cracker - hate the code.




Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 19 сентября 2013 19:25 · Поправил: Medsft
· Личное сообщение · #11

хз на семерке запускается... эт наверно я скомпилир так под х86 перекомпилю завтра

Кстати а как я это сделаю на своей 32 машине??? Мозг уже в ауте))))
Тестите пока.. на 32 семерке точно запускается сам проверял




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 19 сентября 2013 19:42
· Личное сообщение · #12

Win8 x64 - не запускается. При запуске процесс тихо завершается. Админские права и режим совместимости с 7кой не помогают.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




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

Создано: 19 сентября 2013 19:51
· Личное сообщение · #13

Win7x64-запустилась



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 19 сентября 2013 20:00 · Поправил: Medsft
· Личное сообщение · #14

ЭЭЭЭ Нашел комп в хер поймическом кафе )))

Windows 7 профессиональная 32 разрядная система, скачал, распаковал, запустилась со второго раза))) (видимо в xml.setting он пути старые сохранил поэтому после первого раза и не запустилась )... Братва не отвлекайте меня у нас тут праздник говорюж бухаем )))))

АААА угадал вы время тянете чтоб другие не качали и загадку мою не отгадывали)))) чтоб приватную версию в однёху получить )))))))))))))))




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 19 сентября 2013 21:58
· Личное сообщение · #15

Хз, у меня ни с 1 ни со 2 раза не запускается.
Заканчивается всё этим:
http://i.imgur.com/PnWaHH0.png

FileNotFound!

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




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

Создано: 19 сентября 2013 22:19 · Поправил: sendersu
· Личное сообщение · #16

Medsft
норма, пасиб (win xp sp3 eng prof x32)

по дабаклику на дереве падает
http://prntscr.com/1s8fnh



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 19 сентября 2013 22:29
· Личное сообщение · #17

sendersu поправлю.

задачку мою кто нибудь решил? Подсказка есть в тексте сообщения о релизе.... Вспоминайте главные приемы начинающих хакеров)))



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 20 сентября 2013 14:33
· Личное сообщение · #18

Файло по ссылке обновлено ))) спасибо тестерам..
- sendersu - починено
- не устанавливались брейкпоинты - допилено
- не запускалось (тут хз. проект перекомпилен в release mode)
- работает правильно еще один мега хакерский метод ))))




Ранг: 307.9 (мудрец), 196thx
Активность: 0.180
Статус: Участник

Создано: 20 сентября 2013 15:02
· Личное сообщение · #19

Medsft
Похмелье - линк не менялся ;)
Если заменить Dile.Debug.dll на "оригинальный" - запускается.

-----
Don_t hate the cracker - hate the code.




Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 20 сентября 2013 15:31
· Личное сообщение · #20

Вово )))) линк поменял )))))



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 20 сентября 2013 15:32 · Поправил: Medsft
· Личное сообщение · #21

Да и эту библу-DILE.debug.dll можно взять от оригинальной версии работать будет.



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 20 сентября 2013 15:46
· Личное сообщение · #22

Ушел на второй круг ))))) На связи с телефона




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 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 на закуску.





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 20 сентября 2013 22:35
· Личное сообщение · #24

Medsft
немного не воткнул, вот например идут команды: ldarg.0 и ldarg.1 потом дергается функа сравнения,
как мне посмотреть что в стеке перед вызовом? в студии, это глянуть можно, ну если, конечно, удачно распотрошить сборку...

4kusNick
а как ставить бряк на точке входа? а то я обычно запускают, потом раставляю бряки и потом ещё раз запускаю)))

-----
[nice coder and reverser]





Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 20 сентября 2013 23:16 · Поправил: 4kusNick
· Личное сообщение · #25

Hellspawn
В Project explorer'е на сборке кликайте правой кнопкой мыши, там Display Entry method, и в нём уже на первом опкоде бряк можно поставить.

А как отладку запускать? =D
Я добавил сборку в проект, но кнопки запуска отладки неактивны =\
Вот так: http://i.imgur.com/BMqN1AE.png
При этом аттач работает.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




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

Создано: 20 сентября 2013 23:47
· Личное сообщение · #26

На exe в дереве правой кнопкой -> Set as startup assembly

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


Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 20 сентября 2013 23:48
· Личное сообщение · #27

4kusNick
эм))) file -> new project -> startup setting -> start programm -> executeable_browser -> ok

-----
[nice coder and reverser]


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


Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 21 сентября 2013 00:38
· Личное сообщение · #28

nick8606
Hellspawn
Спасибо ребят, а я-то думал, что это за startup assembly (facepalm)

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 21 сентября 2013 00:49
· Личное сообщение · #29

ну пару супер хакерских методов вы отгадали ... но не все)))
по поводу редактора: нужно понять что диле изначально не мог ничего редактировать и я прикрутил к нему сторонюю библу из дедота но при этом не стал менять ядро отладчика, а просто раралельно гружу ассембли в прострпнство 2 длл при этом когда вы делаете напрмер ноп инструктион приложение приаттаченное и разобранное отладчиком остается неизменным а все изменения происходят в пространстве библы dnlib чтобы отладчик их увидел вы должны сделать клон приложения и погрузить его в основное пространство..



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 21 сентября 2013 00:50
· Личное сообщение · #30

как вам вообще стало понятней куда прыгает указатель?


 eXeL@B —› Софт, инструменты —› Net Debugger для x86
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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