2012-10-14 75 views
0

我試圖讓我的FASM的應用程序自身添加到系統啓動時通過添加「SOFTWARE \微軟\的Windows \ CurrentVersion \ Run中」的條目FASM - 添加到啓動HKCU

我使用以下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


原來它本身添加到啓動,但在註冊表編輯器不visable,只有在MSConfig..weird ..?

+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] 
+0

這仍然沒有解決問題,但我很欣賞這種迴應。我正在檢查api調用是否= ERROR_SUCCESS(或0)和RegOpenKeyExA調用,但RegSetValueEx沒有,使用您的代碼以及我以前的代碼。 我不確定如何檢查比其他結果的精確值: CMP EAX,ERROR_CODE_NUMBER 但也有許多不同的錯誤代碼......所以這將需要一段時間。有沒有一種方法可以直接顯示錯誤代碼是什麼? –

+1

最簡單的方法是使用調試器,否則您必須以某種方式編程數值到文本的轉換以及此文本的輸出。 – Serge

+0

等一下,你沒有使用調試器?使用調試器進行調試要容易得多。 –