Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi Adresse von GetProcAddress OHNE GetProcAddress ermitteln ;) (https://www.delphipraxis.net/138858-adresse-von-getprocaddress-ohne-getprocaddress-ermitteln-%3B.html)

himitsu 19. Aug 2009 09:21

Re: Adresse von GetProcAddress OHNE GetProcAddress ermitteln
 
ich vermute mal, daß er es so meint, daß es über diese Funktionen schwerer sein wird, einfach irgendwelche Funktionen zu hocken und auf diese Weise z.B. etwas freizuschalten.

allerdings vermute ich mal, daß die entsprechenden APIs es auch nicht sehr viel anders machen.

PS: ist wem schon aufgefallen, daß _GetModuleAddress im Grunde dem GetModuleHandle gleicht?
(unter WinNT entspricht ja zufällig das Handle der Adresse)

sirius 19. Aug 2009 09:48

Re: Adresse von GetProcAddress OHNE GetProcAddress ermitteln
 
Bzgl GetProcAddress hatte Hagen hier folgendes publiziert:
Delphi-Quellcode:
function GetProcAddr(Module: hModule; Name: PChar): Pointer;
asm
        XOR  ECX,ECX                // except frame
        PUSH OFFSET @@6 
        PUSH DWord Ptr FS:[ECX]
        MOV  FS:[ECX],ESP
        PUSH EBP
        PUSH EBX
        MOV  EBP,EDX
        AND  EAX,not 3 
        PUSH EDI
        MOV  EDX,[EAX + 03Ch]
        PUSH ESI
        TEST EBP,EBP
        JZ   @@5 
        CMP  Word Ptr [EAX + EDX],'EP'
        MOV  EDX,[EAX + EDX + 078h]
        JNZ  @@5 
        ADD  EDX,EAX
        TEST EBP,0FFFF0000h
        MOV  EBX,EAX
        JZ   @@3                         // import by ordinal ?? 
        MOV  EAX,[EDX + 018h]
        MOV  ECX,[EDX + 020h]
        NOT  EAX
@@1:   INC  EAX
        MOV  ESI,EBP
        JZ   @@4 
        MOV  EDI,[EBX + ECX]
        ADD  ECX,4 
        ADD  EDI,EBX
@@2:   CMPSB
        JNE  @@1 
        CMP  Byte Ptr [ESI - 1],0 
        JNE  @@2 
        ADD  EAX,[EDX + 018h]
        MOV  ECX,[EDX + 024h]
        ADD  ECX,EBX
        MOVZX EBP,Word Ptr [ECX + EAX * 2]
        INC  EBP
@@3:   MOV  ECX,[EDX + 01Ch]
        DEC  EBP
        ADD  ECX,EBX
        MOV  EAX,[ECX + EBP * 4]
        ADD  EAX,EBX
@@4:   POP  ESI
        POP  EDI
        POP  EBX
        POP  EBP
        POP  DWord Ptr FS:[0]
        POP  ECX
        RET
@@5:   XOR  EAX,EAX
        JMP  @@4 
@@6:   MOV  EAX,[ESP + 00Ch]                // except handler
        PUSH OFFSET @@5 
        POP  DWord Ptr [EAX + 0B8h]
        SUB  EAX,EAX
end;

OldGrumpy 19. Aug 2009 09:56

Re: Adresse von GetProcAddress OHNE GetProcAddress ermitteln
 
Wie himitsu schon ganz richtig vermutete ist das halt ein Weg an OS-Funktionen zu kommen ohne die ganz offensichtlich statisch oder "konventionell dynamisch" zu linken. Insbesondere bei Shareware die für einen bestimmten Zeitraum voll funktionsfähig ist und sich dann totschaltet, ist es ja essentiell, ein halbwegs verlässliches Datum zu bekommen. Das kann man sich mit obiger Funktion holen ohne dass es auf den ersten Blick zu sehen ist. Stichwort Obfuskierung. Dass das keine wirkliche Hürde ist, sollte aber auch jedem klar sein, deswegen schrieb ich "etwas" und den :mrgreen: ;)

//Edit: In Zeiten des überall verfügbaren Internets hat die Bedeutung natürlich allgemein abgenommen, und die Bedeutung serverbasierter Authentifizierung stark zugenommen. Brauchemergarneddrübberredde ;)

Aphton 19. Aug 2009 15:29

Re: Adresse von GetProcAddress OHNE GetProcAddress ermitteln
 
Zitat:

Zitat von himitsu
PS: ist wem schon aufgefallen, daß _GetModuleAddress im Grunde dem GetModuleHandle gleicht?
(unter WinNT entspricht ja zufällig das Handle der Adresse)

Ja klar :)

brechi 19. Aug 2009 17:33

Re: Adresse von GetProcAddress OHNE GetProcAddress ermitteln
 
Fehlen aber noch Forwarded Functions und Ordinals
--> http://uall.cheat-project.com/uallCollection/ -> uallKernel

Und wenn du (laut Titel) nur GetProcAddress haben willst reicht das Handle des Kernel32.dll:

Delphi-Quellcode:
function GetKernelHandle: DWord; stdcall;
asm
  MOV    EAX, DWORD PTR FS:[030H]
  TEST   EAX, EAX
  JS     @@W9X
@@WNT:
  MOV    EAX, DWORD PTR [EAX+00CH]
  MOV    ESI, DWORD PTR [EAX+01CH]
  LODSD
  MOV    EAX, DWORD PTR [EAX+008H]
  JMP    @@K32
@@W9X:
  MOV    EAX, DWORD PTR [EAX+034H]
  LEA    EAX, DWORD PTR [EAX+07CH]
  MOV    EAX, DWORD PTR [EAX+03CH]
@@K32:
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz