2012-10-14 3 views
0

Je suis en train de faire ma demande FASM lui-même ajouter au démarrage du système en ajoutant une entrée dans « SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run »FASM - Ajout de Démarrage HKCU

J'utilise les éléments suivants API:

RegOpenKeyExA

RegSetValueExA

RegCloseKey

Dans advapi32.dll

Lorsque mon code est exécuté, l'entrée n'est jamais créée. Voici mon code:

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 

Je ne comprends pas pourquoi mon entrée n'est pas ajoutée dans le registre. Toute aide sur cette question serait grandement appréciée.


essayé d'utiliser OllyDbg et à venir avec ceci:

enter image description here

ne sais pas pourquoi je recevrais erreur d'accès refusé. RegOpenKeyExA retourne ERROR_SUCCESS


se avère qu'il a été lui-même en ajoutant au démarrage, mais pas visable regedit, seulement dans MSConfig..weird ..?

+1

Essayez de vérifier les codes d'erreur. –

Répondre

1

Lorsque vous appelez RegSetValueEx vous passez l » adresse phkresult, pas sa valeur

, essayez quelque chose comme ceci:

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

Cela n'a toujours pas résolu le problème, j'apprécie cependant la réponse. Je vérifie si l'api appelle = ERROR_SUCCESS (ou 0) et l'appel de RegOpenKeyExA, mais pas RegSetValueEx, en utilisant votre code et mon code précédent. Je ne suis pas sûr quant à la façon de vérifier la valeur exacte du résultat autre que son utilisation: cmp eax, ERROR_CODE_NUMBER Mais il y a beaucoup de différents codes d'erreur ... de sorte que prendrait un certain temps. Existe-t-il un moyen que je peux afficher directement ce que le code d'erreur est? –

+1

La manière la plus simple est d'utiliser le débogueur, sinon vous devez programmer la conversion numérique en texte d'une manière ou d'une autre et la sortie de ce texte. – Serge

+0

Attendez, vous n'utilisez pas un débogueur? Le débogage est beaucoup plus facile avec un débogueur. –

Questions connexes