FASM - 添加启动HKCU

时间:2012-10-14 02:59:34

标签: api registry startup fasm advapi32

我试图让我的FASM应用程序通过在“SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run”中添加一个条目来启动系统启动

我正在使用以下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并提出这个:

enter image description here

不知道为什么我会获得访问被拒绝错误。 RegOpenKeyExA返回ERROR_SUCCESS


原来它正在为启动添加自己,但在RegEdit中无法看到,仅在MSConfig中有可见...很奇怪??

1 个答案:

答案 0 :(得分: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]