IdtDump.exe для Four-F перестала работать

Тема в разделе "WASM.WIN32", создана пользователем EvilsInterrupt, 8 апр 2006.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Хай



    Качнул из KmdKit утром прога работала на УРА! А минут пять назад решил ее глянуть под олли, ну интересно мне стало как ты вызывашь DeviceIoControl. Ну так вот после она персатала запскаться и выдает сообещение "Can`t register driver" Я опять за Олли, и в месте:
    Код (Text):
    1. 0040158D  |. 50             PUSH EAX                                   ; |BinaryPathName
    2. 0040158E  |. 6A 00          PUSH 0                                     ; |ErrorControl = SERVICE_ERROR_IGNORE
    3. 00401590  |. 6A 03          PUSH 3                                     ; |StartType = SERVICE_DEMAND_START
    4. 00401592  |. 6A 01          PUSH 1                                     ; |ServiceType = SERVICE_KERNEL_DRIVER
    5. 00401594  |. 68 30000100    PUSH 10030                                 ; |DesiredAccess = SERVICE_START|SERVICE_STOP|10000
    6. 00401599  |. 68 9C204000    PUSH IdtDump.0040209C                      ; |DisplayName = "Interrupt Descriptor Table Dumper"
    7. 0040159E  |. 68 80274000    PUSH IdtDump.00402780                      ; |ServiceName = "IdtDump"
    8. 004015A3  |. FF75 F8        PUSH DWORD PTR SS:[EBP-8]                  ; |hManager
    9. 004015A6  |. E8 2B020000    CALL <JMP.&advapi32.CreateServiceA>        ; \CreateServiceA
    10. 004015AB  |. 0BC0           OR EAX,EAX


    Она ,АПИшка, стала давать в eax Нуль, а вот LastErr показывает что все это ERROR_SERVICE_EXISTS (00000431)



    Я как понял, у меня прога в первый раз когда я хотел глянуть на DeviceIoControl, неправильно сработала под Олли и не правильно выгрузила драйвер, в результате ЭТО, но что щас то делать? :)))
     
  2. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    уффф, решил, autruns от Systeminternals помог! :)))
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Правильнее всего подрихтовать исходник екзешника, чтобы он при старте проверял, а не запущен/зарегистрирован ли уже драйвер. Например, как в KmdKit\examples\advanced\KbdSpy\exe сделано.



    Или в KmdManager кинуть и жать Stop и Unregister.



    PS: А зачем Олли то? Исходники же есть.
     
  4. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    EvilsInterrupt



    это решается так:


    Код (Text):
    1.     invoke  CreateService,  hManager, addr szServiceName, addr szDisplayName,
    2.                             SERVICE_START or SERVICE_STOP, SERVICE_KERNEL_DRIVER, SERVICE_AUTO_START,    ; or DELETE
    3.                             SERVICE_ERROR_IGNORE, addr szDriverPath, NULL, NULL, NULL, NULL, NULL
    4.     mov     hService, eax
    5.     .if     (!eax)
    6.         invoke  GetLastError
    7.         .if     (eax==ERROR_SERVICE_EXISTS || eax==ERROR_DUPLICATE_SERVICE_NAME)
    8.             invoke  OpenService, hManager, addr szServiceName, SERVICE_ALL_ACCESS
    9.             mov     hService, eax
    10.         .endif
    11.     .endif
     
  5. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Four-F

    >PS: А зачем Олли то? Исходники же есть.

    Ну потом сообразил, да исходник реальную инфу не паказывает, а у тебя он не запакован и в на асме писан! был бы на си не стал бы, глазеть, хрен в коде разберешься