[Delphi] Невидимая автозагрузка программы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by HyperOne, 18 Apr 2013.

  1. HyperOne

    HyperOne New Member

    Joined:
    23 Nov 2010
    Messages:
    44
    Likes Received:
    4
    Reputations:
    3
    Задача следующая:

    Необходимо чтобы программа загружалась при старте Windows, но при этом не отображалась ни в ветке реестра HKEY_USERS\Default\Software\Microsoft\Windows\CurrentVersion\Run ни в msconfig

    Вобщем, для решения этой задачи, было принято решение написать DLL, которая будет загружаться с Windows с единственной функцией - вызов программы. Исходный код получившейся DLL вот:

    Code:
    library Run;
    
    uses
    windows;
    
    procedure RunIt();
    var
    St: TStartupinfo;
    Pr: TProcessInformation;
    
    begin
    ZeroMemory(@St, SizeOf(St));
    St.cb := SizeOf(St);
    St.lpDesktop := PChar('winsta0\default');
    CreateProcess(nil, 'C:\Program Files\EMPMon\ansd.exe', nil, nil, false, 0, nil, nil, St, Pr);
    end;
    
    exports
    RunIt;
    
    begin
    end.
    

    Далее, для записи этой DLL в автозагрузку запускаю Reg файл в кодом:

    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\Run]
    
    "Asynchronous"=dword:00000001
    
    "Impersonate"=dword:00000000
    
    "DllName"=C:\Program Files\EMPMon\TheDLL.dll
    
    "Logon"="RunIt"
    
    

    Но проблема в том, что при загрузке Windows - программа не загружается, я не знаю в чем дело, толи DLL не подгружается, толи процедура вызова в самой DLL неправильная.....
    Вобщем, ребят, если кто-то в курсе - подскажите, где ошибка? Что здесь не так? Буду очень благодарен.. Запарился уже с этой проблемой.

    P.S.
    Тестирую на Windows 7
    P.P.S
    Никакие вирусы, трояны и прочую хрень я не пишу, задачу на работе поручил шеф, для мониторинга интернет-активности сотрудников.
     
  2. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    917
    Likes Received:
    492
    Reputations:
    724
    Следуя логике:
    написать простой DLL для теста, например вывод MessageBox, если сработает - дело в вашей библиотеке, если нет...
     
    _________________________
  3. HyperOne

    HyperOne New Member

    Joined:
    23 Nov 2010
    Messages:
    44
    Likes Received:
    4
    Reputations:
    3

    Для проверки вставил ф-цию showmessage, перезагрузился - ничего не вывело :(
     
  4. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    берешь перехватываешь ZwEnumerateValueKey например.
     
  5. HyperOne

    HyperOne New Member

    Joined:
    23 Nov 2010
    Messages:
    44
    Likes Received:
    4
    Reputations:
    3


    Я так понимаю если перехватывать ZwEnumerateValueKey - можно скрыть значение в реестре, но при просмотре автозагрузки через, например, msconfig - всё будет как на ладони..
     
  6. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    я сказал как пример.каждая программа может использовать другие ф-ции,суть в одном-перехватить то что тебе надо;)
     
  7. HyperOne

    HyperOne New Member

    Joined:
    23 Nov 2010
    Messages:
    44
    Likes Received:
    4
    Reputations:
    3
    Ну перехваты, хуки и тому подобное - это уже дерби, а вот интересно, почему не работает описанный в начале темы метод с DLL? Не думал что будет проблема с этим, по сути всё просто - DLL загружается при старте Windows и запускает нужный EXE... Но почему этого не происходит? Вот что странно. Тестил DLL на вывод сообщения showmessage - результат тот же, ничего не происходит. Вопрос тогда в другом, почему функции в DLL не выполняются в автозапуске....? Что может быть причиной и в какую сторону копать...
     
    #7 HyperOne, 19 Apr 2013
    Last edited: 19 Apr 2013
  8. yuran666666

    yuran666666 Member

    Joined:
    18 Jan 2009
    Messages:
    84
    Likes Received:
    19
    Reputations:
    11
    Копать в сторону различий в разрядности библиотеки и винлогона. Ну или в сторону несоответствия имени экспортируемой функции с тем что тебе там твой паскаль набилдил.
    Ну или, да, перехвати что-нибудь совершенно по*** что и как, главное перехвати это крепко, бро, как тебя уже поучили несколькими постами выше!
    Но, кроме шуток, если совершенно не копать, то все же самым правильным решением для читателей статей эмси рема было бы прочитать вот здесь , все таки уже давно не winХР, да и эмси уже совсем не те что раньше.
     
    #8 yuran666666, 19 Apr 2013
    Last edited: 19 Apr 2013
  9. HyperOne

    HyperOne New Member

    Joined:
    23 Nov 2010
    Messages:
    44
    Likes Received:
    4
    Reputations:
    3
    Неужели никто не в курсе?
     
  10. enzecoder

    enzecoder New Member

    Joined:
    29 Jul 2012
    Messages:
    45
    Likes Received:
    3
    Reputations:
    -1
    Потомучто эта ветка реестра неработает начиная с Висты, грузи dll в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows AppInit_DLLs

    Есть ещё и для ехе места, без отбражения в мсконфиг.
     
    #10 enzecoder, 19 Apr 2013
    Last edited: 19 Apr 2013
  11. HyperOne

    HyperOne New Member

    Joined:
    23 Nov 2010
    Messages:
    44
    Likes Received:
    4
    Reputations:
    3

    а подробнее? :)
     
  12. enzecoder

    enzecoder New Member

    Joined:
    29 Jul 2012
    Messages:
    45
    Likes Received:
    3
    Reputations:
    -1
    А подробней в ЛС, кстатие опиши что получилось с предыдущей веткой.
     
  13. HyperOne

    HyperOne New Member

    Joined:
    23 Nov 2010
    Messages:
    44
    Likes Received:
    4
    Reputations:
    3
    Отписал тебе в ЛС, а на счет AppInit_DLLs - слишком стремный метод, по-моему
     
  14. enzecoder

    enzecoder New Member

    Joined:
    29 Jul 2012
    Messages:
    45
    Likes Received:
    3
    Reputations:
    -1
    В чём стремный то?
     
  15. HyperOne

    HyperOne New Member

    Joined:
    23 Nov 2010
    Messages:
    44
    Likes Received:
    4
    Reputations:
    3
    Оказалось, метод с автозагрузкой DLL исправно работает только на WinXP, но на Windows 7 он не работает.
    Нашел и реализовал более простой способ автозагрузки для Windows7 в обход msconfig.
    Тему можно считать закрытой.