CRC32 API Search

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
myself
Beiträge: 67
Registriert: 18.03.2006 12:48

CRC32 API Search

Beitrag von myself »

Ich habe hier mal die CRC32 Methode zum suchen von API adressen zur laufzeit versucht in PB zu coden. Anstatt den namen der API die man aufrufen will in die exe zu speichern wird einfach der CRC32 Fingerprint gespeichert und zur laufzeit durch Vergleich die adresse gesucht!

Code: Alles auswählen

Procedure GetAdressCRC32(library.s,crc32.l)
  If OpenLibrary(0,library.s) ; Library öffnen
    ExamineLibraryFunctions(0) 
    While(NextLibraryFunction()) ; Funktionen auflisten
      tmp$ = LibraryFunctionName() 
      crcapi = CRC32Fingerprint(@tmp$,Len(tmp$)) ; Den CRC32 Fingerprint des API Namens berechnen
      If crcapi = crc32 ; Mit dem Gesuchten vergleichen
        CloseLibrary(0)
        ProcedureReturn LibraryFunctionAddress() ; Wenn gefunden -> adresse zurückliefern und methode beenden.
      EndIf
    Wend
    CloseLibrary(0)
  EndIf
EndProcedure


;CRC32 von string "MessageBoxA" -> 1462590862
;Einfach zu bekommen durch diesen Code
;
;function2get$ = "MessageBoxA"
;Debug CRC32Fingerprint(@function2get$, Len(function2get$)) 
;

CallFunctionFast(GetAdressCRC32("user32.dll",1462590862),0,"hello world!","Found Messagebox",0)
Vorteile:
Funktionen werden nicht im IAT (Import Adress Table) aufgeführt was es
zum ersten crackern schwerer macht bestimmte codeteile zu finden und ausserdem bleibt durch den kleinen IAT auch die exedatei auf dauer echt klein! Achtung: Durch die ständige suche ist diese Methode nicht für Projekte oder Codeteile geeignet bei denen es auf Geschwindigkeit ankommt!

mfg My-Self
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Die Funktion bringt so nicht den gewuenschten Erfolg. Den
Einstiegspunkt kann ich sehr leicht mit z.b. ollydbg auslesen.
stack hat geschrieben: EAX 77E5D8DE user32.MessageBoxA
Ausserdem ist die Procedure fehlerhaft da du die DLL schliesst, das geht
frueher oder spaeter in die Hose, spaetestens bei einer eigenen Dll die
Windows nicht automatisch geladen hat.
myself
Beiträge: 67
Registriert: 18.03.2006 12:48

Beitrag von myself »

kann man ja umschreiben so das man als 1. parameter nicht den namen sondern das handle einer dll hat :)
Antworten