我试图让我的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并提出这个:
不知道为什么我会获得访问被拒绝错误。 RegOpenKeyExA返回ERROR_SUCCESS
原来它正在为启动添加自己,但在RegEdit中无法看到,仅在MSConfig中有可见...很奇怪??
答案 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]