Нужно отследить работу программы с LPT. Программа работает через DLL. Раньше я использовал WDASM и исследовал с помощью подставной DLL. Функция экспорта в данной DLL одна. Код (Text): Exported fn(): SMG_GetInterface - Ord:0001h :10005110 8B442404 mov eax, dword ptr [esp+04] * Possible StringData Ref from Data Obj ->"P" | :10005114 C70080050110 mov dword ptr [eax], 10010580 :1000511A 33C0 xor eax, eax :1000511C C3 ret Судя по всему возвращается указатель по которому и можно получить искомые адреса и другие данные. Попробовал натравить распаковщики и дамперы, которые скачал с этого сайта. Но они ничего дополнительно не показвают. То ли я неумею ими пользоватся :-( Есть какой-то иной путь исследований, кроме как пошоговая отладка и разбор механизма получения адресов функций?
Код (Text): struct test_interface { int cbSize; //0x6C int dw_1; //2 int dw_2; //2 int dw_3; //0 int dw_4; //0 char *description; //"Spectrum Digital Test Interface" int dw_6; //0 void *function_7; void *function_8; void *function_9; void *function_10; void *function_11; void *function_12; void *function_13; void *function_14; void *function_15; void *function_16; void *function_17; void *function_18; void *function_19; void *function_20; void *function_21; void *function_22; void *function_23; void *function_24; void *function_25; void *function_26; } int __cdecl TEST_GetInterface(test_interface **ptr); Перед возвратом в программу подмени указатели на функции своими.
misyachniy Объем кода там - 64 кило, остальное тексты всякие... Судя по импорту там внутри просто интерфейсы к стандартным функциям для работы с драйвером USB(?). Просто натравливаешь IDA или напрямую в отладчике смотришь. Прочти по работе с USB - может это вообще стандарт работы такой с ним, хотя там чего-то копрайтов не видать.
reverser Опередил. Я тоже в ИДА получил. misyachniy 1) Твой адрес 10580 не совпадает с тем, который в "прицепе"( 1E120). 2) А по адресу ххх120 лежит структура с адресами функций. Работа напрямую с LPT портами внутри проги есть - ИДА их обнаруживает.
reverser а как получилась такая "причесаная" структура? Вручную или каким-то другим интрументом? У меня Я нашел защиту от отладчика с помощью URSoft W32DASM и IDA. IDA показал как параметры передаются и анализируются в Entry Point DLL, а W32DASM корректно дизассемблировал вызов. Сам W32DASM и IDA не могли отслеживать загрузку DLL, которую производило ядро ОС. При отладке, на сколько я понял, переполнялся стек Вот W32DASM отследил адресс вызоваемой функции при подсоединении второго процесса: Код (Text): :10013EF2 57 push edi :10013EF3 56 push esi :10013EF4 53 push ebx :10013EF5 E888410000 call 10018082 * Referenced by a CALL at Address: |:10013EF5 | :10018082 6A01 push 00000001 :10018084 58 pop eax :10018085 C20C00 ret 000C IDA показала только ссылку на ячеку памяти
Основная программа очевидно вызывает, через дополнительную DLL разблокировку прямого доступа к портам. Код (Text): void Ke386SetIoAccessMap(int, IOPM *); void Ke386QueryIoAccessMap(int, IOPM *); void Ke386IoSetAccessProcess(PEPROCESS, int); При отладке под W32DASM останов по загрузке DLL работает, но имя DLL пустое. Я разбираю программу тестирования эмулятора http://emulators.spectrumdigital.com/c5000/ Товарищ, платку аналог собрал, а не работает. Нужно отследить, что считывается с EEPROM и с чем сравнивается. Теперь когда у меня есть формат, структуры хранящей указатели на функции дело пойдет веселей. Название DLL sdcfg_usb к USB никакого отношения не имеет. Наверное, чтобы сбить с толку вероятного противника.