![]() |
eXeL@B —› Основной форум —› Вопроиск по Dll |
Посл.ответ | Сообщение |
|
Создано: 22 октября 2006 22:46 · Поправил: crash_rider · Личное сообщение · #1 Есть некая Dll (осуществляет упраление Mp3 плеером по USB через драйвер) в ней экспортируемая функция CreateInterface (обозвал ее TCreateInterface) После недельного ковыряния в Иде выяснил, что TCreateInterface содержит [HIGHLIGHT=asm] TCreateInterface dd offset sub_10001090 ; DATA XREF: CreateInterface .rdata:10004070 ; sub_100010B0 .rdata:10004074 dd offset sub_10002B10 .rdata:10004078 dd offset sub_10001110 .rdata:1000407C dd offset sub_10001120 .rdata:10004080 dd offset CloseAllHandle (обозвал по выполняемым функциям) .rdata:10004084 dd offset Func_DeviceIoControl (обозвал по выполняемым функциям) .rdata:10004088 dd offset sub_10001220 .rdata:1000408C dd offset sub_100012F0 .rdata:10004090 dd offset sub_10001210 .rdata:10004094 dd offset sub_10001160 .rdata:10004098 dd offset sub_100011B0 .rdata:1000409C dd offset sub_10001320 .rdata:100040A0 dd offset sub_10001370 .rdata:100040A4 dd offset sub_100013C0 .rdata:100040A8 dd offset sub_10001400 .rdata:100040AC dd offset sub_10001450 .rdata:100040B0 dd offset sub_10001460 .rdata:100040B4 dd offset sub_10001530 .rdata:100040B8 dd offset sub_10001590 .rdata:100040BC dd offset sub_10001600 .rdata:100040C0 dd offset sub_10001450 .rdata:100040C4 dd offset sub_10001640 .rdata:100040C8 dd offset sub_10001750 .rdata:100040CC dd offset sub_10001D20 .rdata:100040D0 dd offset sub_10001D40 .rdata:100040D4 dd offset sub_10001D60 .rdata:100040D8 dd offset WriteCommand (обозвал по выполняемым функциям) .rdata:100040DC dd offset WriteCommand2 (обозвал по выполняемым функциям) .rdata:100040E0 dd offset ReadCommand (обозвал по выполняемым функциям) [/HIGHLIGHT] Это Все понятно, но как узнать какие у этих функций или процедур (не понятно) параметры? В приложении мендежере (весьма корявом) постоянно эксепшены сыплються,в поддержке не отвечают и сайт молчит уже год... его не поддерживает производитель MpMan-F70 (Я уже переехал на Red Hat там более менее стабильный менеджер для MpMan F70, но каждый раз при заливке файла грузить линух не катит...) Написали это все Покемоны из Dynamic Naked Audio Inc, я писал им молчат как партизаны...(как будто еще комуто нужны их Dll кроме владельцев плеера :s10 ![]() Короче труба! че делать не знаю поможите : ![]() Аттач с сабжом ниже... ![]() ![]() |
|
Создано: 22 октября 2006 23:25 · Личное сообщение · #2 |
|
Создано: 22 октября 2006 23:42 · Личное сообщение · #3 |
|
Создано: 23 октября 2006 00:49 · Личное сообщение · #4 |
|
Создано: 23 октября 2006 06:36 · Личное сообщение · #5 |
|
Создано: 23 октября 2006 13:29 · Личное сообщение · #6 Так если это действительно скомпилено VC++, то имена и аргументы в готовом виде тебе не получить. Как написал HoBleen анализируй это всё Идой, проследи что там происходит на стеке и добавляй коментакии и структурные типы. Ну а потом берись за отладчик, пиши test case и добивай. Простого пути нет. Да, ещё посмотри как это всё вызывается из оригинальной проги - там тоже Идой.... ![]() |
|
Создано: 23 октября 2006 15:33 · Личное сообщение · #7 |
|
Создано: 23 октября 2006 16:14 · Личное сообщение · #8 HoBleen пишет: В иде нажми 'изменить тип функции' и enter. В 90% ида нормально определяет тип и количество параметров. При очистке стека материнской функцией думай сам. Если один из параметров - структура, то поможет только детальный разбор работы функций, а иногда и подфункций. В том то и дело, что не правильно ![]() ![]() например [HIGHLIGHT=asm] ; int __cdecl About(HWND hDlg,int,int) -> int,int в помине нет! а About: procedure(hwndParent: HWND); вот в чем косяк ![]() .text:020023F0 About proc near ; DATA XREF: .data:02053008o .text:020023F0 .text:020023F0 hDlg = dword ptr 4 .text:020023F0 arg_4 = dword ptr 8 .text:020023F0 arg_8 = dword ptr 0Ch .text:020023F0 .text:020023F0 mov eax, [esp+hDlg] .text:020023F4 mov ecx, hInstance .text:020023FA push 0 ; dwInitParam .text:020023FC push offset loc_2002410 ; lpDialogFunc .text:02002401 push eax ; hWndParent .text:02002402 push 65h ; lpTemplateName .text:02002404 push ecx ; hInstance .text:02002405 call ds:DialogBoxParamA ; Create a modal dialog box from a .text:02002405 ; dialog box template resource .text:0200240B retn .text:0200240B ; ---------------------------------------------------------------------- ----- [/HIGHLIGHT] ![]() |
|
Создано: 23 октября 2006 16:45 · Поправил: crash_rider · Личное сообщение · #9 хм... в чем прикол! ![]() взял дописал в исходнике эти два значения int int т.е. было [HIGHLIGHT=delphi] About: procedure(hwndParent: HWND); [/HIGHLIGHT] полчучилось [HIGHLIGHT=delphi] About: procedure(hwndParent: HWND;int1,int2:integer); cdecl; // about dialog [/HIGHLIGHT] Скомпилил, А код все равно рабочий ![]() ![]() |
|
Создано: 23 октября 2006 17:49 · Личное сообщение · #10 |
|
Создано: 23 октября 2006 19:01 · Личное сообщение · #11 |
|
Создано: 24 октября 2006 02:37 · Личное сообщение · #12 crash_rider пишет: Скомпилил, А код все равно рабочий !!!!!! Дык если у тебя _cdecl, то функции пофигу на количество параметров если их не использует - очищает же стек материнская функция! Почему ида посчитала 3 аргумента - для меня остается загадкой. Можно предположить, что все _cldecl'ы она анализирует как функции с переменным числом аргументов (как printf). Формально их 3 (3-й переменной длины), может быть поэтому. ![]() |
|
Создано: 24 октября 2006 21:39 · Личное сообщение · #13 HoBleen пишет: Почему ида посчитала 3 аргумента - для меня остается загадкой. Для меня тоже... Вот разобрал бибилотеку от F60 там 64 функции все понятно сдесь же не чего не понять! найти даже не могу вызовы на эту Dll ![]() ![]() ![]() |
|
Создано: 25 октября 2006 09:25 · Личное сообщение · #14 crash_rider пишет: найти даже не могу вызовы на эту Dll из менеджера , а все из-за того, что все эти функции запихали в СreateInterface зы типа спрятали... ну да, так же тяжелее реверсить.... Но, тут ещё аспект вот какой - может быть у них несколько версий интерфейсов: [highlight=c] bool CreateInterface(int version, void **ppinterface); [/highlight] ![]() |
![]() |
eXeL@B —› Основной форум —› Вопроиск по Dll |