AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi DLL-EntryPoint mit Funktion tauschen?
Thema durchsuchen
Ansicht
Themen-Optionen

DLL-EntryPoint mit Funktion tauschen?

Ein Thema von himitsu · begonnen am 4. Jul 2009 · letzter Beitrag vom 5. Jul 2009
Antwort Antwort
Seite 3 von 3     123   
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: DLL-EntryPoint mit Funktion tauschen?

  Alt 4. Jul 2009, 21:14
Beim Import per Index wird einfach der Index der Funktion in der AddressOfFunctions-Tabelle plus dem Base-Wert (im Directory verzeichnet) angegeben. Es folgt, dass Import per Index extrem schnell ist.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#22

Re: DLL-EntryPoint mit Funktion tauschen?

  Alt 4. Jul 2009, 21:34
Joar, den Index kann man ja immernoch in Delphi nutzen und ich glaub das alte ShareMM von Borland nutze es noch.

Aber ich glaub die PCs sind heute recht schnell, so daß man da auch verständliche Namen nutzen kann und sich nicht in Unmassen Indizes verheddern muß.


Nja, mit dieser kleinen Änderung läuft schonmal der Patcher.
Delphi-Quellcode:
//P: PCardinal;
If InitProcedure >= 0 Then Begin
  i := PWordArray(RVA2RealPointer(LongWord(ExportDirectory.AddressOfNameOrdinals)))[InitProcedure];
  P := @PPointerArray(RVA2RealPointer(LongWord(ExportDirectory.AddressOfFunctions)))[i];
  Temp := P^;
  P^ := NTHeader.OptionalHeader.AddressOfEntryPoint;
  NTHeader.OptionalHeader.AddressOfEntryPoint := Temp;
  WriteLn('OK');
Dann fehlt ja nur noch ein funktionierender Code in DLL und EXE.


Also danke erstmal für den DLL-Patcher.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#23

Re: DLL-EntryPoint mit Funktion tauschen?

  Alt 4. Jul 2009, 23:47
soooooooooo, es läuft nun endlich


Ich weiß zwar immernoch nicht, was mit den MMFs los ist, aber egal erstmal.

Hatte diese nur verwenden wollen, weil ich nicht wußte wie/wann/wo der Speicher für globale Variablen resserviert wird und ich deshalb vorm "vollständigen" Laden der DLL ich keine nutzen wollte.


Also vielen herzlichen Dank nochmals

und nun kann mein himXML endlich in die nächste Phase übergehn.

Reverse-ShareMemoryManagement (tolles Wort niwa?) macht vieles Einfacher.
(also eine statische DLL nutzen den MM der EXE und nicht andersrum, wie man es sonst kennt)
Angehängte Dateien
Dateityp: 7z test_920.7z (44,7 KB, 5x aufgerufen)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#24

Re: DLL-EntryPoint mit Funktion tauschen?

  Alt 5. Jul 2009, 09:40
Och menno, ich war doch nicht der erste Irre, welcher auf so'ne doofe Idee gekommen ist. http://fnse.de/S01/1LK.gif
Antivir
TR/ATRAPS.Gen - Trojan


nur finde ich irgendwie keine richtigen Beschreibungen zu diesem Trojaner

[add]
grad hier in 'nem anderem thread gesehn ... dieses VirusTotal.com-Seitchen ist ja cool
http://www.virustotal.com/de/analisi...77e-1246780177

Code:
Antivirus          Version      letzte Akt.  Ergebnis
a-squared          4.5.0.18      2009.07.05    Trojan-Downloader.Delphi!IK
AntiVir            7.9.0.204     2009.07.03    TR/ATRAPS.Gen
Ikarus             T3.1.1.64.0   2009.07.05    Trojan-Downloader.Delphi
McAfee-GW-Edition  6.8.5         2009.07.05    Heuristic.BehavesLike.Win32.Trojan.L
auch wenn ich nicht weiß, wie man da auf einen Downloader kommen soll, da ist doch nix zum Downloaden drin?
$2B or not $2B
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#25

Re: DLL-EntryPoint mit Funktion tauschen?

  Alt 5. Jul 2009, 15:16
PEid erkennt z.b. den Typ des Programms (delphi, c++) nach den Daten am EntryPoint. Viele Viren neutzen ja eben die Technik Code anzufügen und dann den Entrypoint zu verbiegen um den Virencode vorher aufzurufen und dann im anschluß den originalen Code aufzurufen. Je nachdem wie einfach die Erkennung eingebaut wurde könnten da FalsePositives auftreten (Bevhaves like...).

Jetzt nochmal zum Thema: willst du irgendwann den origianlen EIP wieder aufrufen? wenn nicht schreib an den anfangscode (EIP) einen Jump bzw. patch die initialisierung vom MM manager raus (mussu halt debuggen).

Willst du lediglich Code ausführen bevor die Main-Funktion (DLL/EXE-main) und damit die Inititialisierung des MM Managers aufgerufen wird, trag deien funktion in die TLS-Tabelle ein.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#26

Re: DLL-EntryPoint mit Funktion tauschen?

  Alt 5. Jul 2009, 16:06
Also ich möchte/sollte natürlich die originale Startprozedur irgendwann und rechtzeitig, aber nicht zu früh ausführen, sonst hat Delphi wohl ein paar Probleme, wenn ich ihm die Initialisierung mopse.

Debuggen und Adressen hartcoden geht nicht, da es ja ein Opensourceprojekt für mehrere Delphiversionen ist.

Ja und das Viren, Würmchen und Pferdchen sowas nutzen, war mir schon klar, nur wie die da auf downloadende Tierchen kommen bleibt mir schleierhaft.

Aber zum Glück ist das ja nur für ein krankes "Zusatzmodul" meines himXML, wo man die Klassen aus einer DLL aufrufen kann und ganz eherlich, es gibt notfalls auch noch andere Wege, wo allerdings überall der MM der DLL genutzt wird oder wo man die DLL dynamisch laden muß und grad diese beiden Dinge möcht ich halt nicht.
Ja und ich bin halt verspielt (so würd ich es mal sagen) und wollt es jetzt einfach mal so versuchen

Und im Prinzip geht es ja nun (abgesehn von 2-3 Virenscannern, aber was soll's).


Nja, wenn ich mal ganz verspielt bin und viel Zeit hab, dann könnte ich bestimmt die Sektion vergrößern, die ganzen Realocations und sonstwas ändern, vor dem EntryCode einen Jump einfügen und zu meinem Code hopsen, den Rest also verschieben und dann bei meiner späteren Initialisierung hinter dem Jump reinspringen

Ja, ich hatte gestern schon die kranke Idee mal einige fremde Codes (falls es z.B. dich nicht gestört hätte) und auch meine neuen eigenen Cödechen zu nehmen und alles in einer Klasse zum Auslesen-/Bearbeiten von Executables zu kapseln (aber ob ich dafür so schnell auch noch Zeit finde)


Aber eine Frage hab ich noch ... kann es sein, daß die EIP eine Funktion ist? (seitdem ich Result := 1) stehen hab, gibt es keine Exceptions mehr, davor gab es noch ein paar.
$2B or not $2B
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#27

Re: DLL-EntryPoint mit Funktion tauschen?

  Alt 5. Jul 2009, 16:55
also der EIP zeigt einfach auf eine Funktion vom typ

Code:
BOOL WINAPI
DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
{
    switch (dwReason)
    {
        case DLL_PROCESS_ATTACH:
            // Code to run when the DLL is loaded
            break;

        case DLL_PROCESS_DETACH:
            // Code to run when the DLL is freed
            break;

        case DLL_THREAD_ATTACH:
            // Code to run when a thread is created during the DLL's lifetime
            break;

        case DLL_THREAD_DETACH:
            // Code to run when a thread ends normally.
            break;
    }
    return TRUE;
}
in c++ wird halt direkt diese aufgerufen, in delphi wird eine automatisch erzeugt und die initalisierungen vorgenommen. dann wird das begin end. von Delphi aufgerufen.

Delphi-Quellcode:
var
DLLProcNext: procedure(Reason: Integer); stdcall = nil;
procedure DLLMain(Reason: Integer); stdcall;
begin
case Reason of
DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hInstance);
DLL_THREAD_ATTACH:
;
DLL_THREAD_DETACH:
;
DLL_PROCESS_DETACH:
;
end;
if Assigned(DLLProcNext) then DLLProcNext(Reason);
end;
begin
DLLProcNext := Pointer(InterlockedExchange(Integer(DLLProc), Integer(@DLLMain)));
DLLMain(DLL_PROCESS_ATTACH);
end.
D.h. deine Exportfunktion (die du statt EIP einträgst) sollte auch den obigen aufbau (mit den drei parameter von c++) haben.

Eine TLS Funktion wird zumindest immer beim laden und entladen der dll/exe aufgerufen. D.h. da wurde die originale dllmain noch nicht aufgerufen (und kein mm installiert). Wenn du eh irgendwann die dllmain aufrufst, dann kannst du den code der vor der initialsierung durch delphi aufgerufen werden soll eben als TLS eintragen. So wie ich es bsiher mitbekommen habe ist es genau das was du wünscht.

Eine funktion die in der TLS steht wird vor der initialisierung von Delphi code (initialization) aufgerufen.

http://uall.cheat-project.com/uallpdf/asquared.pdf
#bypass3
die funktion SearchLoadCode wird vor dem initalisieren des mm usw. aufgerufen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#28

Re: DLL-EntryPoint mit Funktion tauschen?

  Alt 5. Jul 2009, 17:16
Ja, ein Code vor der Inititailisierung von Delphi (der DLL) bringt mir nicht viel, da ich in meinem Fall den Code doch nach der Initialisierung der EXE benötige (ich benötige ja Infos, welche die Initialisierung der EXE erst noch bereitstellen muß), also selbst wenn ich was in TLS eintrage und es noch vor dem DelphiCode startet, dann wird die Delphi-Initialisierung der statischen DLL dennoch vor der der EXE ausgeführt.


OK, entweder hatte ich das BOOL WINAPI übersehn, oder die DllMain, welche ich nach kurzem Suchen in Google fand, war falsch

na Gut, dann werd' ich mal Integer durch LongBool ersetzen
$2B or not $2B
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#29

Re: DLL-EntryPoint mit Funktion tauschen?

  Alt 5. Jul 2009, 18:49
Sorry ich versteh immer noch nicht was du genau haben willst
Kannst du mal aufschreiben wie das jetzt aufgerufen wird und wie du das haben wilslt also z.b.

exe-main
loadlibrary
dll-main
meincode <---
initcode
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#30

Re: DLL-EntryPoint mit Funktion tauschen?

  Alt 5. Jul 2009, 19:29
im prinzip so:
exe-main > mein-dll-code > dll-main > ...

aber bei einer statisch geladenen DLL ist es ja so
dll-main > exe-main > ...

allerdings will ich die EXE nicht direkt manipulieren und mein Init-Code soll dort einfach nur via .PAS eingebunden werden können

ist halt etwas blöd, was die Speicherinitialisierung in der DLL betrifft, würde das für eine dynamische Bindung sprechen, aber die Verlinkung meiner Klassen mit der DLL ist statisch
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:40 Uhr.
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