0

「SOFTWARE\Microsoft \ Windows \ CurrentVersion \ Run」にエントリを追加して、FASMアプリケーションをシステムの起動に追加しようとしています。

次のAPIを使用しています。

RegOpenKeyExA

RegSetValueExA

RegCloseKey

advapi32.dllで

コードを実行すると、エントリが作成されることはありません。これが私のコードです:

format PE GUI 4.0
include "Win32A.Inc"
entry start

section ".idata" import data readable writable

        library  kernel32,      "kernel32.dll",\
                 advapi32,      "advapi32.dll"

        import   kernel32,\
                 lstrlen,       "lstrlenA",\
                 ExitProcess,   "ExitProcess"

        import   advapi32,\
                 RegOpenKeyExA, "RegOpenKeyExA",\
                 RegSetValueEx, "RegSetValueExA",\
                 RegCloseKey,   "RegCloseKey"

section ".data" data readable writeable

sKey            db "SOFTWARE\Microsoft\Windows\CurrentVersion\Run",0
lpData          db "C:\File.txt",0
lpValueName     db "Text File"
phkresult       dd ?


section ".code" code readable executable

start:

        invoke  RegOpenKeyExA, HKEY_CURRENT_USER, sKey, 0, KEY_SET_VALUE, phkresult
        invoke  lstrlen, lpData
        invoke  RegSetValueEx, phkresult, lpValueName, 0, REG_SZ, lpData, eax
        invoke  RegCloseKey, phkresult

exit:

        invoke  ExitProcess, 0   

自分のエントリがレジストリに追加されない理由がわかりません。この問題に関する助けをいただければ幸いです。


OllyDbgを使用して、これを考え出しました。

ここに画像の説明を入力してください

アクセス拒否エラーが発生する理由がわかりません。RegOpenKeyExAはERROR_SUCCESSを返します


スタートアップに自分自身を追加していたことが判明しましたが、RegEditでは表示できず、MSConfig..weird ..?でのみ表示されます。

4

1 に答える 1

1

呼び出すときは、値ではなく、のアドレスRegSetValueExを渡しますphkresult

したがって、次のようなものを試してください。

    invoke  RegOpenKeyExA, HKEY_CURRENT_USER, sKey, 0, KEY_SET_VALUE, phkresult
    invoke  lstrlen, lpData
    invoke  RegSetValueEx, [phkresult], lpValueName, 0, REG_SZ, lpData, eax
    invoke  RegCloseKey, [phkresult]
于 2012-10-14T03:25:52.577 に答える