Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Api entschlüsseln

Diskussion: Api entschlüsseln im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hi Leute :D, Ich bin fast damit fertig, einige Programmfunktionen in ASM zu übersetzen um sie in anderen Programmen ...

Antwort
Alt 28.10.06, 23:10   #1 (permalink)
 
Registriert seit: 10.11.05
sd333221 Leistung: Facit NTK
Likes: 0
Standard Api entschlüsseln

Anzeige

Hi Leute :D,
Ich bin fast damit fertig, einige Programmfunktionen in ASM
zu übersetzen um sie in anderen Programmen einzusetzen.

Leider bin ich auf einen hartnäckigen Fall gestoßen der seine
API obfuscated/verschlüsselt hat
C++:

Code:
	if (lRet != ERROR_SUCCESS)
	{
		return 0;
	}
	else
	{
		ofstream file("C://stext.txt", NULL);
	}
	return 1;
Code:
0040109D   > \6A 01         PUSH 1
0040109F   .  6A 40         PUSH 40
004010A1   .  6A 00         PUSH 0
004010A3   .  68 4C364000   PUSH steam-ch.0040364C                                                                             ;  ASCII "C://stext.txt"
004010A8   .  8D8D 60FFFFFF LEA ECX,DWORD PTR SS:[EBP-A0]
004010AE   .  FF15 80524000 CALL DWORD PTR DS:[<&MSVCP80D.??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PBDHH@Z>]       ;  MSVCP80D.??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PBDHH@Z
004010B4   .  8D8D 60FFFFFF LEA ECX,DWORD PTR SS:[EBP-A0]
004010BA   .  FF15 7C524000 CALL DWORD PTR DS:[<&MSVCP80D.??_D?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXXZ>]           ;  MSVCP80D.??_D?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXXZ
004010C0   >  B8 01000000   MOV EAX,1
004010C5   >  8BE5          MOV ESP,EBP
004010C7   .  5D            POP EBP
004010C8   .  C3            RETN
Nun weiss ich nicht welche API ich aufrufen muss,
sie ist auf jedenfall in der MSVCP80D, aber der Name ist verschlüsselt,
ich möchte es umschreiben als z.B.
Code:
Call ostream
, Olly
biegt mir dann den Jump auf die richtige Adresse um.
Den Umweg über die IAT nehme ich später... (vielen Dank nochmal an CDW für die Erklärung)

Die Frage:
Wie entschlüssele ich das, damit ich es in Olly nehmen kann, und die API identifizieren kann?

Grüße
sd333221 ist offline   Mit Zitat antworten
Alt 28.10.06, 23:46   #2 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Sie ist nicht verschlüsselt - das was Du siehst, hat Olly "selbst" reingeschrieben. Und zwar handelt es sich um Exportnamen der DLL. Schau sie (die DLL) Dir einfach im LordPE an (Directories->ExportTable).Da sind lauter solcher Bezeichnungen. Das ist der Werk des Linkers (afaik hat diese Benennung schon eine Bedeutung und man kann hier irgendwas Genaues über die Argumente und deren Eigenschaften ablesen). Ist auch nicht dazu gedacht, dass der Programmierer diese Funktionen "direkt" aufruft

Code:
 FF15 80524000 CALL DWORD PTR DS:[<&MSVCP80D.??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PBDHH@Z>]
hier steht ja eigentlich "call dword ptr [405280]" (zur Überpfürung: einfach versuchen die Codezeile in Olly zu editieren).
Die Adresse [405280] ist höchstwahrscheinlich ein IAT Eintrag. Olly schaut also nach, wohin der DWORD in 405280 verweist und löst den Verweis auf den DLL Export automatisch auf - setzt also den Namen rein (Olly hat nicht umsonst die Disassemblerfähigkeiten). Wenn es nur um Ollyanzeige geht: ein Enter auf den Call (so dass man im Ziel landet) und per Rechtsklick->"Label" auswählen. Jetzt kann man einen eigenen Namen vergeben. Lässt Du den Code per STRG+A neu analysieren, sollte "call programm.neuername" in Olly zu sehen sein.
Um es selber zu benutzen: am einfachsten wäre es, diese Funktion per OrdinalValue zu importieren, dazu öffnet man die DLL im LordPE und schaut unter Exports nach:
Code:
E2               ??1?$basic_ofstream@DU?$char_traits@D@std@@@std@@UAE@XZ
neben dem String steht der OrdinalValue (mein Beispiel ist aus der msvcp6)
LoadLibrary(DLL)
GetProcAddres(0E2h).
würde dann die Adresse der Funktion liefern.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 29.10.06, 00:24   #3 (permalink)
Themenstarter
 
Registriert seit: 10.11.05
sd333221 Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von CDW
Sie ist nicht verschlüsselt - das was Du siehst, hat Olly "selbst" reingeschrieben. Und zwar handelt es sich um Exportnamen der DLL. Schau sie (die DLL) Dir einfach im LordPE an (Directories->ExportTable).Da sind lauter solcher Bezeichnungen. Das ist der Werk des Linkers (afaik hat diese Benennung schon eine Bedeutung und man kann hier irgendwas Genaues über die Argumente und deren Eigenschaften ablesen). Ist auch nicht dazu gedacht, dass der Programmierer diese Funktionen "direkt" aufruft

Code:
 FF15 80524000 CALL DWORD PTR DS:[<&MSVCP80D.??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PBDHH@Z>]
hier steht ja eigentlich "call dword ptr [405280]" (zur Überpfürung: einfach versuchen die Codezeile in Olly zu editieren).
Die Adresse [405280] ist höchstwahrscheinlich ein IAT Eintrag. Olly schaut also nach, wohin der DWORD in 405280 verweist und löst den Verweis auf den DLL Export automatisch auf - setzt also den Namen rein (Olly hat nicht umsonst die Disassemblerfähigkeiten). Wenn es nur um Ollyanzeige geht: ein Enter auf den Call (so dass man im Ziel landet) und per Rechtsklick->"Label" auswählen. Jetzt kann man einen eigenen Namen vergeben. Lässt Du den Code per STRG+A neu analysieren, sollte "call programm.neuername" in Olly zu sehen sein.
Um es selber zu benutzen: am einfachsten wäre es, diese Funktion per OrdinalValue zu importieren, dazu öffnet man die DLL im LordPE und schaut unter Exports nach:
Code:
E2               ??1?$basic_ofstream@DU?$char_traits@D@std@@@std@@UAE@XZ
neben dem String steht der OrdinalValue (mein Beispiel ist aus der msvcp6)
LoadLibrary(DLL)
GetProcAddres(0E2h).
würde dann die Adresse der Funktion liefern.
Hmm danke schonmal,
aber wie mache ich das mit dem LoadLibary und GetProcAdress in ASM?
Was sind das für APIs?
Muss ich die DLL als string übergeben !?
sd333221 ist offline   Mit Zitat antworten
Alt 29.10.06, 00:33   #4 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

erstmal: was genau willst Du denn überhaupt machen?
Zitat:
Was sind das für APIs?
diese sind in der Kernel32 DLL angesiedelt und werden häufig benutzt, um DLL-Funktionen zu laden - siehe einfachere Packer wie MEW,UPX usw.
Wenn Du sie in ASM nutzen willst - es hängt stark vom verwendetem Assembler ab, normalwerweise gibt es eine Include/lib datei, in der diese (und viele Funktionen mehr) schon deklariert sind und man sie benutzen kann - in MASM z.B
Code:
incude windows.inc
include kernel32.inc
includelib kernel32.dll

...
.data
library db "irgendeinedll",0
funktionsname db "funktionsname",0
.code
invoke LoadLibrary,offset library     ;in EAX kommt das Handle zur DLL zurück, die DLL wird gleichzeitig in den Speicher geladen (falls sie nocht schon vorhanden ist)
invoke GetProcAddress,eax,123 ;<- Ordinalnummer oder wenn man per String die Funktion importieren mag
invoke GetProcAddress,eax,offset funktionsname
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 29.10.06, 00:44   #5 (permalink)
Themenstarter
 
Registriert seit: 10.11.05
sd333221 Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von CDW
erstmal: was genau willst Du denn überhaupt machen?
Zitat:
Was sind das für APIs?
diese sind in der Kernel32 DLL angesiedelt und werden häufig benutzt, um DLL-Funktionen zu laden - siehe einfachere Packer wie MEW,UPX usw.
Wenn Du sie in ASM nutzen willst - es hängt stark vom verwendetem Assembler ab, normalwerweise gibt es eine Include/lib datei, in der diese (und viele Funktionen mehr) schon deklariert sind und man sie benutzen kann - in MASM z.B
Code:
incude windows.inc
include kernel32.inc
includelib kernel32.dll

...
.data
library db "irgendeinedll",0
funktionsname db "funktionsname",0
.code
invoke LoadLibrary,offset library     ;in EAX kommt das Handle zur DLL zurück, die DLL wird gleichzeitig in den Speicher geladen (falls sie nocht schon vorhanden ist)
invoke GetProcAddress,eax,123 ;<- Ordinalnummer oder wenn man per String die Funktion importieren mag
invoke GetProcAddress,eax,offset funktionsname
zurzeit verwende ich als assembler olly...
Ich möchte ja die Funktionen nachher in ein fremdes Programm einfügen,
das meinte ich damit

das ist dann ja noch nen level "tiefer" als MASM
sd333221 ist offline   Mit Zitat antworten
Alt 29.10.06, 00:58   #6 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Zitat:
Ich möchte ja die Funktionen nachher in ein fremdes Programm einfügen,
dann gibts zwei Wege: per IID King/LordPE/Hexeditor direkt diese Funktion zum Programm hinzufügen (zur ImportTable) oder per IID King /LordPE/Hexeditor dafür sorgen, dass LoadLibrary/GetProcAddress im Programm sind. (LordPE: unter Directories->Imports->Rechtsklick).
Und dann eben der Code-Injection gefummel - am besten eine neue Section hinzufügen, die nötigen Strings reinscheriben und den Code reintippen
benutze aber immer den IAT-Umweg. Wenn Du nämlich in Olly "call offstream" oder ähnliches schreibst, dann macht Olly da eine Direktadresse hin - es führt dann dazu, dass es dann nicht auf anderen Systemen läuft.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 29.10.06, 02:17   #7 (permalink)
Themenstarter
 
Registriert seit: 10.11.05
sd333221 Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von CDW
Zitat:
Ich möchte ja die Funktionen nachher in ein fremdes Programm einfügen,
dann gibts zwei Wege: per IID King/LordPE/Hexeditor direkt diese Funktion zum Programm hinzufügen (zur ImportTable) oder per IID King /LordPE/Hexeditor dafür sorgen, dass LoadLibrary/GetProcAddress im Programm sind. (LordPE: unter Directories->Imports->Rechtsklick).
Und dann eben der Code-Injection gefummel - am besten eine neue Section hinzufügen, die nötigen Strings reinscheriben und den Code reintippen
benutze aber immer den IAT-Umweg. Wenn Du nämlich in Olly "call offstream" oder ähnliches schreibst, dann macht Olly da eine Direktadresse hin - es führt dann dazu, dass es dann nicht auf anderen Systemen läuft.
Ok vielen Dank bin nah dran :-)
Leider kann ich den gecrypteten Call nicht mit LordPE in die IAT einfügen, weil er sacht, dass der Name ungültig ist. Und IID King crasht dabei sowieso.
sd333221 ist offline   Mit Zitat antworten
Alt 29.10.06, 16:37   #8 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Naja, dann eben per LoadLibrary und GetProcAddress (Notfalls diese über IIDKing oder LordPE hinzufügen) importieren. Aber: wozu sich überhaupt mit der msvcp.dll abzugeben? Der User müsste diese nämlich auch haben und letzendlich geht alles genauso in WinAPI: CreateFile und WriteFile/ReadFile.

Naja, das ganze ist ganz normales Codeinjecting - umständlich aber machbar.Eventuell sollte man nur kleiner anfangen und ein bisschen Erfahrung darin sammeln.

Allerdings habe ich ehrlich gesagt gar keine Lust, dir bei deinem Projekt zu helfen. Halte weder von Trojas noch vom "Steamaccountabziehen" etwas
http://www.underground.ag/showthread.php?t=21062
Zitat:
Also: TESTER FÜR STEAM-FINDER in Bifrost-Server gesucht
(Textdatei stext.txt wird auf Laufwerk C erstellt wenn Steam installiert ist!)
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 29.10.06, 16:47   #9 (permalink)
Themenstarter
 
Registriert seit: 10.11.05
sd333221 Leistung: Facit NTK
Likes: 0
Standard

Naja habs auch so geschafft danke trozdem,
ich habe ja weniger selber Interesse an der Sache,
deshalb frage ich ja andere danach was sie suchen,
es ist ja nur zu lernzwecken
sd333221 ist offline   Mit Zitat antworten
Alt 29.10.06, 18:57   #10 (permalink)
Senior Member
 
Registriert seit: 03.09.05
Lesco Leistung: Facit NTK
Likes: 0
Standard

Nur mal nebenbei: Wenn du so viel Code in eine fremde Datei einfügen willst, solltest du den Code in eine Dll packen und dann nur den Code zum laden/aufrufen der Dll einpatchen, dass erspart dir eine Menge Arbeit.
Das "Projekt" selbst finde ich dumm, da du damit lediglich Skript-Kiddies hilfst(schon allein das Forum auf dem du da postest). Dieses Kiddie-Forum ist u.a. der Grund, warum der Begriff "Hacker" in der Öffentlichkeit so in ein falsches Licht gerückt wird. Es gibt genug sinnvollere Anwendungsmöglichkeiten für solche Dinge allerdings nicht auf einer solchen "virtuellen Müllkippe" wie dieses verachtenswerte Forum, zu dem CDW einen Link postete.
Lesco ist offline   Mit Zitat antworten
Alt 29.10.06, 20:03   #11 (permalink)
Themenstarter
 
Registriert seit: 10.11.05
sd333221 Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von Lesco
Nur mal nebenbei: Wenn du so viel Code in eine fremde Datei einfügen willst, solltest du den Code in eine Dll packen und dann nur den Code zum laden/aufrufen der Dll einpatchen, dass erspart dir eine Menge Arbeit.
Das "Projekt" selbst finde ich dumm, da du damit lediglich Skript-Kiddies hilfst(schon allein das Forum auf dem du da postest). Dieses Kiddie-Forum ist u.a. der Grund, warum der Begriff "Hacker" in der Öffentlichkeit so in ein falsches Licht gerückt wird. Es gibt genug sinnvollere Anwendungsmöglichkeiten für solche Dinge allerdings nicht auf einer solchen "virtuellen Müllkippe" wie dieses verachtenswerte Forum, zu dem CDW einen Link postete.
Wenn du ne Community kennst, wo solche Sachen gebraucht werden kannst du mir ja mal ne PN schreiben. Es hat sich dort eben angeboten weil besonders in diesem Bereich und gerade weil es Script-Kiddies sind noch viele Programm-Modifikationen gebraucht werden, und ich so viel ausprobieren kann.
Hab ja bis jetzt viel gelernt davon, ich lerne am besten "by doing" weil dann sitzt es eben richtig.
sd333221 ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Api entschlüsseln
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP entschlüsseln... maniman2 Cryptography & Encryption 10 25.10.08 21:43
Entschlüsseln, wie? adler05 Cryptography & Encryption 4 07.07.08 13:30
inx entschlüsseln NaTaZ Cryptography & Encryption 0 24.10.06 19:04
DES Entschlüsseln? Grayson Cryptography & Encryption 1 04.06.05 15:17
jpg entschlüsseln Sino Windows 6 30.12.04 16:14


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61