DLL прячет точки входа и название функций експорта

Тема в разделе "WASM.RESEARCH", создана пользователем misyachniy, 14 мар 2008.

  1. misyachniy

    misyachniy New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2003
    Сообщения:
    19
    Адрес:
    Ukraine
    Нужно отследить работу программы с LPT.
    Программа работает через DLL.
    Раньше я использовал WDASM и исследовал с помощью подставной DLL.
    Функция экспорта в данной DLL одна.

    Код (Text):
    1. Exported fn(): SMG_GetInterface - Ord:0001h
    2. :10005110 8B442404                mov eax, dword ptr [esp+04]
    3.  
    4. * Possible StringData Ref from Data Obj ->"P"
    5.                                   |
    6. :10005114 C70080050110            mov dword ptr [eax], 10010580
    7. :1000511A 33C0                    xor eax, eax
    8. :1000511C C3                      ret
    Судя по всему возвращается указатель по которому и можно получить искомые адреса и другие данные.

    Попробовал натравить распаковщики и дамперы, которые скачал с этого сайта.
    Но они ничего дополнительно не показвают. То ли я неумею ими пользоватся :-(

    Есть какой-то иной путь исследований, кроме как пошоговая отладка и разбор механизма получения адресов функций?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Где модуль ?
     
  3. misyachniy

    misyachniy New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2003
    Сообщения:
    19
    Адрес:
    Ukraine
     
  4. misyachniy

    misyachniy New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2003
    Сообщения:
    19
    Адрес:
    Ukraine
    ZIP не цепляется :-(
     
  5. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Ну ссылку кинь. Залить некуда?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Фигня, зря стараешься!
     
  7. misyachniy

    misyachniy New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2003
    Сообщения:
    19
    Адрес:
    Ukraine
    Выложил здесь
    http://njnmnp.narod.ru/sdcfg_usb.zip
     
  8. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Код (Text):
    1. struct test_interface
    2. {
    3.   int cbSize; //0x6C
    4.   int dw_1;   //2
    5.   int dw_2;   //2
    6.   int dw_3;   //0
    7.   int dw_4;   //0
    8.   char *description; //"Spectrum Digital Test Interface"
    9.   int dw_6;   //0
    10.   void *function_7;
    11.   void *function_8;
    12.   void *function_9;
    13.   void *function_10;
    14.   void *function_11;
    15.   void *function_12;
    16.   void *function_13;
    17.   void *function_14;
    18.   void *function_15;
    19.   void *function_16;
    20.   void *function_17;
    21.   void *function_18;
    22.   void *function_19;
    23.   void *function_20;
    24.   void *function_21;
    25.   void *function_22;
    26.   void *function_23;
    27.   void *function_24;
    28.   void *function_25;
    29.   void *function_26;
    30. }
    31.  
    32. int __cdecl TEST_GetInterface(test_interface **ptr);
    Перед возвратом в программу подмени указатели на функции своими.
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    misyachniy
    Объем кода там - 64 кило, остальное тексты всякие... Судя по импорту там внутри просто
    интерфейсы к стандартным функциям для работы с драйвером USB(?).
    Просто натравливаешь IDA или напрямую в отладчике смотришь.
    Прочти по работе с USB - может это вообще стандарт работы такой с ним, хотя там
    чего-то копрайтов не видать.
     
  10. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    reverser
    Опередил. Я тоже в ИДА получил.

    misyachniy
    1) Твой адрес
    10580 не совпадает с тем, который в "прицепе"( 1E120).
    2) А по адресу ххх120 лежит структура с адресами функций.
    Работа напрямую с LPT портами внутри проги есть - ИДА их обнаруживает.
     
  11. misyachniy

    misyachniy New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2003
    Сообщения:
    19
    Адрес:
    Ukraine
    reverser а как получилась такая "причесаная" структура?
    Вручную или каким-то другим интрументом?

    У меня

    Я нашел защиту от отладчика с помощью URSoft W32DASM и IDA.
    IDA показал как параметры передаются и анализируются в Entry Point DLL, а W32DASM корректно дизассемблировал вызов.

    Сам W32DASM и IDA не могли отслеживать загрузку DLL, которую производило ядро ОС.
    При отладке, на сколько я понял, переполнялся стек

    Вот W32DASM отследил адресс вызоваемой функции при подсоединении второго процесса:

    Код (Text):
    1. :10013EF2 57                      push edi
    2. :10013EF3 56                      push esi
    3. :10013EF4 53                      push ebx
    4. :10013EF5 E888410000              call 10018082
    5.  
    6. * Referenced by a CALL at Address:
    7. |:10013EF5  
    8. |
    9. :10018082 6A01                   push 00000001
    10. :10018084 58                      pop eax
    11. :10018085 C20C00               ret 000C
    IDA показала только ссылку на ячеку памяти

     
  12. misyachniy

    misyachniy New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2003
    Сообщения:
    19
    Адрес:
    Ukraine
    Основная программа очевидно вызывает, через дополнительную DLL разблокировку прямого доступа к портам.

    Код (Text):
    1.    void Ke386SetIoAccessMap(int, IOPM *);
    2.    void Ke386QueryIoAccessMap(int, IOPM *);
    3.    void Ke386IoSetAccessProcess(PEPROCESS, int);
    При отладке под W32DASM останов по загрузке DLL работает, но имя DLL пустое.

    Я разбираю программу тестирования эмулятора http://emulators.spectrumdigital.com/c5000/
    Товарищ, платку аналог собрал, а не работает.
    Нужно отследить, что считывается с EEPROM и с чем сравнивается.

    Теперь когда у меня есть формат, структуры хранящей указатели на функции дело пойдет веселей. :)
    Название DLL sdcfg_usb к USB никакого отношения не имеет.
    Наверное, чтобы сбить с толку вероятного противника. :derisive: