![]() |
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) |
Re: Adresse von GetProcAddress OHNE GetProcAddress ermitteln
Bzgl GetProcAddress hatte Hagen
![]()
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; |
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 ;) |
Re: Adresse von GetProcAddress OHNE GetProcAddress ermitteln
Zitat:
|
Re: Adresse von GetProcAddress OHNE GetProcAddress ermitteln
Fehlen aber noch Forwarded Functions und Ordinals
--> ![]() 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 17:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz