Blutiger Anfänger braucht dringend Hilfe

Hier könnt ihr sowohl zur x86 Architektur als auch zu Win32ASM Fragen stellen.

Moderatoren: crack, Krüsty, Marwin

Blutiger Anfänger braucht dringend Hilfe

Beitragvon AH » Sonntag 29. Oktober 2006, 03:10

Hab erst gestern ASM gelernt und etwas Probleme mit dem unten stehenden Quelltext. ZwOpenKey funzt dort nicht - in anderer Programmiersprache geht's aber. Welche blöden Fehler mache ich da - bin, wie gesagt, allerblutigster Anfänger... :roll:
Der Code ist für 2000/XP.

Code: Alles auswählen
.386
.model flat, stdcall
option casemap:none

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                  I N C L U D E   F I L E S                                       
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


;für Test
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\debug.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\debug.lib

;include \masm32\include\w2k\ntdef.inc
include \masm32\include\w2k\ntstatus.inc
include \masm32\include\w2k\ntdll.inc
includelib \masm32\lib\w2k\ntdll.lib

IFNDEF UNICODE_STRING
   UNICODE_STRING STRUCT
      _Length      WORD   ?      ; len of string in bytes (not chars)
      MaximumLength   WORD   ?      ; len of Buffer in bytes (not chars)
      Buffer         PWSTR   ?      ; pointer to string
   UNICODE_STRING ENDS
   PUNICODE_STRING   typedef   PTR UNICODE_STRING
ENDIF

UNICODE_NULL   equ 0


OBJECT_ATTRIBUTES STRUCT      ; sizeof = 18h
   dwLength               DWORD         ? ; original name Length
   RootDirectory            HANDLE         ?
   ObjectName               PUNICODE_STRING   ?
   Attributes               DWORD         ?
   SecurityDescriptor         PVOID         ? ; Points to type SECURITY_DESCRIPTOR
   SecurityQualityOfService   PVOID         ? ; Points to type SECURITY_QUALITY_OF_SERVICE
OBJECT_ATTRIBUTES ENDS


.data
MsgCaption      db "Iczelion's tutorial no.2",0
MsgBoxText      db "Win32 Assembly is Great!",0

KeyHandle dd 0
Disposition dd 0
LSA_Unicode dw 512,514,0,0
COUNTED_ANSI_STRING dw 0,0,0,0
ANSI db "\Registry\Machine\Software\Mister Root",0
ACCESS_RIGHTS dd 196633
Unicode db 518 dup(?)


.data?
POBJECT_ATTRIBUTES OBJECT_ATTRIBUTES <>

;::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                         C O D E                                                   
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


.code


start:
        invoke RtlInitAnsiString,addr COUNTED_ANSI_STRING,addr ANSI
        PrintDec eax," Rückgabe von RtlInitAnsiString "
        lea ecx,COUNTED_ANSI_STRING       
        mov ax,[ecx+0]
        PrintDec ax," Länge des Strings "
        mov ax,[ecx+2]
        PrintDec ax," Länge des Bereichs "
        mov eax,[ecx+4]
        PrintStringByAddr eax

        lea ecx,LSA_Unicode
        lea eax,Unicode
        mov [ecx+4],eax
        invoke RtlAnsiStringToUnicodeString,addr LSA_Unicode,addr COUNTED_ANSI_STRING,0
        PrintDec eax," Rückgabe von RtlAnsiStringToUnicodeString "
        lea ecx,LSA_Unicode     
        mov ax,[ecx+0]
        PrintDec ax," Länge des Strings "
        mov ax,[ecx+2]
        PrintDec ax," Länge des Bereichs "
        mov eax,[ecx+4]
        PrintDec eax," Adresse des Unicode-Strings "

      mov POBJECT_ATTRIBUTES.dwLength,24
      mov POBJECT_ATTRIBUTES.RootDirectory,NULL
      lea ecx,LSA_Unicode
      mov POBJECT_ATTRIBUTES.ObjectName,ecx
      mov POBJECT_ATTRIBUTES.Attributes,64
      mov POBJECT_ATTRIBUTES.SecurityDescriptor,NULL
      mov POBJECT_ATTRIBUTES.SecurityQualityOfService,NULL
     
        lea  ecx,POBJECT_ATTRIBUTES
        PrintDec ecx," Adresse der Object_Attributes Struktur"
        lea eax,LSA_Unicode     
        PrintDec eax," Adresse der LSA_Unicode Struktur "
        mov [ecx+8],eax

        invoke ZwOpenKey,addr KeyHandle,ACCESS_RIGHTS,addr POBJECT_ATTRIBUTES

        ;invoke ZwCreateKey,addr KeyHandle,ACCESS_RIGHTS,addr POBJECT_ATTRIBUTES,0,0,0,addr Disposition


        PrintDec eax," Rückgabe von ZwOpenKey "
        PrintDec KeyHandle,"Handle des Schlüssels "
        invoke ZwClose,KeyHandle
        PrintDec eax," Rückgabe von ZwClose"

        invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
       
        invoke ExitProcess,0
end start

Gruß

AH
AH
Newbie
 
Beiträge: 2
Registriert: Sonntag 29. Oktober 2006, 02:49
Wohnort: Melle

Beitragvon AH » Montag 30. Oktober 2006, 22:28

OK, so scheints zu gehen. Warum antwortet eigentlich hier keiner???
Code: Alles auswählen
.386
.model flat, stdcall
option casemap:none
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                 I N C L U D E F I L E S
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
include \masm32\include\w2k\ntstatus.inc
include \masm32\include\w2k\ntdll.inc
includelib \masm32\lib\w2k\ntdll.lib

;für Test
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\debug.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\debug.lib

.data
Object_Attrib dd 24,0,0,64,0,0
COUNTED_ANSI_STRING dw 0,0,0,0
ANSI db "\Registry\Machine\Software\Mister Root",0
LSA_Unicode dw 0,518,0,0
ACCESS_RIGHTS dd 1
KeyHandle dd 0


.data?
Unicode db 518 dup(?)

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                    C O D E
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
.code
start:
invoke RtlInitAnsiString,addr COUNTED_ANSI_STRING,addr ANSI
PrintDec eax," Rückgabe von RtlInitAnsiString "
lea ebx,COUNTED_ANSI_STRING
mov ax,[ebx+0]
PrintDec ax," Länge des Strings "
mov ax,[ebx+2]
PrintDec ax," Länge des Bereichs "
mov eax,[ebx+4]
PrintStringByAddr eax
lea ebx,LSA_Unicode
mov ax,518
mov [ebx+2],ax
lea eax,Unicode
mov [ebx+4],eax
invoke RtlAnsiStringToUnicodeString,addr LSA_Unicode,addr COUNTED_ANSI_STRING,0
PrintDec eax," Rückgabe von RtlAnsiStringToUnicodeString "
lea ebx,LSA_Unicode
mov ax,[ebx+0]
PrintDec ax," Länge des Strings "
mov ax,[ebx+2]
PrintDec ax," Länge des Bereichs "
lea ebx,Object_Attrib
PrintDec ebx," Adresse der Object_Attributes Struktur"
lea eax,LSA_Unicode
PrintDec eax," Adresse der LSA_Unicode Struktur "

PrintDec ebx," Vor Änderung"

add ebx,8

PrintDec ebx," Nach Änderung"

mov [ebx],eax

invoke ZwOpenKey,addr KeyHandle,ACCESS_RIGHTS,addr Object_Attrib
PrintDec eax," Rückgabe von ZwOpenKey "
PrintDec KeyHandle,"Handle des Schlüssels "
invoke ZwClose,KeyHandle
PrintDec eax," Rückgabe von ZwClose"
invoke ExitProcess,0
end start
Gruß

AH
AH
Newbie
 
Beiträge: 2
Registriert: Sonntag 29. Oktober 2006, 02:49
Wohnort: Melle

Beitragvon CDW » Dienstag 31. Oktober 2006, 00:39

Warum antwortet eigentlich hier keiner???

weil
ZwOpenKey funzt dort nicht

die meisten keine Kristallkugel besitzen ;)

Sprich: "mein rotes Auto fährt nicht, warum ?"
Du erwähnst weder die Fehlermeldung noch paar Details noch was da sonst nicht läuft - und Lust, sich win2k Libs zusammenzusuchen und in MASM einzurichten, nur um den Fehler nachbauen zu können, hat wohl nicht jeder. Da warst Du am Zug.
CDW
Alter Hase
 
Beiträge: 62
Registriert: Donnerstag 2. Oktober 2003, 17:17

Beitragvon crack » Freitag 10. November 2006, 21:14

AH hat geschrieben:OK, so scheints zu gehen. Warum antwortet eigentlich hier keiner???


Sorry, hab gerade ne Menge Sachen zu erledigen ... :roll:
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf


Zurück zu Assembler

 


  • { RELATED_TOPICS }
    Antworten
    Zugriffe
    Letzter Beitrag

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron