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 回答