Was ist Falsch am C++ Code ??

09/24/2011 19:31 Atzenkeeper#1
Also ich habe eine .DLL geschrieben mit ein bisschen Hilfe so.
Nun weiß ich aber leider nimmer weiter und auch der Kollege konnte ned Helfen finde einfach den Fehler ned.

PHP Code:
#include "stdafx.h"
#include "NosTale Send.h"
using namespace std;

DWORD Send 0x001111;

void JoinMini(LPSTR packet)
{
    
__asm
    
{
          
MOV EDX,packet
          MOV EAX
,DWORD PTR DS:[0x011111]
          
MOV EAX,DWORD PTR DS:[EAX]
          
CALL Send
    
}
}
 
     
 
BOOL WINAPI DllMain(HINSTANCE hinstDll,DWORD Reason,LPVOID Reserved){


    switch(
Reason){

    case 
DLL_PROCESS_ATTACH:
        
JoinMini("HIER STEHT DAS PACKET");
        break;
      
    case 
DLL_PROCESS_DETACH:
        break;

    }


return 
TRUE;

Die Adressen sind gechanged aber sonst ist alles so.

Bekomme immer diesen Error:

[Only registered and activated users can see links. Click Here To Register...]

Und ja ist für NosTale wie man sehen kann :D
09/24/2011 19:46 SmackJew#2
[Only registered and activated users can see links. Click Here To Register...]

Davon abgesehen:
Send hat keine Parameter und ist __stdcall?
09/24/2011 19:50 ms​#3
Sieht für mich so aus, als ob der OP eine C++/CLI- anstatt einer Win32-Anwendung compilet hat.
09/24/2011 20:10 Atzenkeeper#4
Jo danke das war schonmal das Problem lag wohl darann das ich unter Win32 keinen direkten Hinweis auf eine .DLL Datei gefunden hab. :P

Ich hab aber immernoch das Problem das ich nicht genau weiß in welcher Art von String ich das Packet übergeben muss.

So sieht der ASM Code in Olly aus:

Code:
MOV EDX,DWORD PTR SS:[EBP-C]
MOV EAX,DWORD PTR DS:[6309EC]
MOV EAX,DWORD PTR DS:[EAX]
CALL nostalex.005C4648

Das hier noch als Zusatzinfo:

Code:
Stack SS:[0012FCA0]=08EB43F8, (ASCII "Char_NEW kghkj 0 1 0 9")
EDX=0012FCFC

Im ersten Post die Werte waren noch Modifiziert also hatte schon die richtigen drinn
09/24/2011 20:40 SmackJew#5
Quote:
Originally Posted by Atzenkeeper View Post
Jo danke das war schonmal das Problem lag wohl darann das ich unter Win32 keinen direkten Hinweis auf eine .DLL Datei gefunden hab. :P

Ich hab aber immernoch das Problem das ich nicht genau weiß in welcher Art von String ich das Packet übergeben muss.

So sieht der ASM Code in Olly aus:

Code:
MOV EDX,DWORD PTR SS:[EBP-C]
MOV EAX,DWORD PTR DS:[6309EC]
MOV EAX,DWORD PTR DS:[EAX]
CALL nostalex.005C4648

Das hier noch als Zusatzinfo:

Code:
Stack SS:[0012FCA0]=08EB43F8, (ASCII "Char_NEW kghkj 0 1 0 9")
EDX=0012FCFC

Im ersten Post die Werte waren noch Modifiziert also hatte schon die richtigen drinn
Die CPU kennt keine "Arten von Strings". String ist String, eine nullterminierte Zeichenkette. 0x005C4648 scheint ja __fastcall zu sein, oder was soll der Spaß mit EDX?
09/24/2011 20:43 Atzenkeeper#6
Ich muss ja irgendwie den Packet String übergeben.
Und Kollege meinte der hätte das auch so geregelt ...

Wie gesgat bin eigendlich ein VB.net Coder
09/24/2011 20:46 SmackJew#7
Quote:
Originally Posted by Atzenkeeper View Post
Ich muss ja irgendwie den Packet String übergeben.
Und Kollege meinte der hätte das auch so geregelt ...
Deswegen frag ich dich ja, ob sie __fastcall ist.


Quote:
Originally Posted by Atzenkeeper View Post
Wie gesgat bin eigendlich ein VB.net Coder
Bleib dabei.
09/24/2011 21:24 Atzenkeeper#8
Naja aber um das mit ASM zu realisieren muss ich halt kurz mal auf c++ ausweichen :P
09/24/2011 21:56 SmackJew#9
Quote:
Originally Posted by Atzenkeeper View Post
Naja aber um das mit ASM zu realisieren muss ich halt kurz mal auf c++ ausweichen :P
1. Unwahr. Kannst die Funktion auch Byte für Byte schreiben und Hooks setzten, bzw. von außen callen.

2. Du kannst nicht auf etwas ausweichen, das du nicht beherrschst.
09/24/2011 22:50 Atzenkeeper#10
Quote:
Originally Posted by SmackJew View Post
1. Unwahr. Kannst die Funktion auch Byte für Byte schreiben und Hooks setzten, bzw. von außen callen.

2. Du kannst nicht auf etwas ausweichen, das du nicht beherrschst.
Hmm bist der erste der sagt das das auch i-wie in VB.net zu Realisieren ist ô.o
Aber ich hab da auch keine Ahnung wie ich das dort Realisiere.

Ich hatte jetzt auch überlegt die Funktionen dann mit ner Externen VB.Net App zu Steuern. Hatte da auch was gefunden.

Also mein ganzer Source in C++ ist noch überarbeitungswürdig aber ich hab auch niemandem mal der mir da mal bisschen was beibringen würde hab in Skype vll 3 Leute an die ich mich mal wenden kann.

C++ Source:
PHP Code:
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"


DWORD Send 0x00615753;

extern "C" double SendPacket(LPSTR packet)
{
   {
    
__asm
    
{
          
MOV EDX,packet
          MOV EAX
,DWORD PTR DS:[0x6309EC]
          
MOV EAX,DWORD PTR DS:[EAX]
          
CALL Send
    
}
}
}



 


BOOL APIENTRY DllMainHMODULE hModule,
                       
DWORD  ul_reason_for_call,
                       
LPVOID lpReserved
                     
)
{
    switch (
ul_reason_for_call)
    {
    case 
DLL_PROCESS_ATTACH:
    case 
DLL_THREAD_ATTACH:
    case 
DLL_THREAD_DETACH:
    case 
DLL_PROCESS_DETACH:
        break;
    }
    return 
TRUE;

VB.Net Source:
PHP Code:
Public Class Form1



    
Public Declare Function _SendPacket Lib "NosTale Send DLL.dll" Alias "SendPacket" (ByVal packet As String) As String




    
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.ObjectByVal e As System.EventArgsHandles CheckBox1.CheckedChanged
        
If CheckBox1.Checked True Then
            Me
.TopMost True
        
Else
            
Me.TopMost False
        End 
If


    
End Sub

    
Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button1.Click
        _SendPacket
(TextBox1.Text)
    
End Sub
End 
Class 
Olly Screen:
[Only registered and activated users can see links. Click Here To Register...]
09/25/2011 05:54 link#11
Du könntest halt den Asm-Code z.B. mit OllyDbg assemblieren, in ein Array schreiben und dann via API-Funktionen wie WriteProcessMemory und CreateRemoteThread in den Prozess injizieren und ausführen. Sowas funktioniert auch mit VB.Net, ist halt nur mühseliger, den Asm-Code zu warten.

Die Dll muss in den Target-Prozess injiziert werden, um die Funktionen des Targets aufzurufen. Wenn du in deiner VB.Net Anwendung die Dll importierst und aufrufst, befindet sie sich im Speicher der VB.Net Anwendung. Wie soll dort die Funktion des Targets gecallt werden?

Und sollte DWORD Send = 0x00615753; nicht eher gleich DWORD Send = 0x005C4648; sein? Anscheinend callst du den Funktions-Call.

Hier das sieht auch nicht ganz richtig aus, auch wenn es eher unerheblich ist:
extern "C" double SendPacket(LPSTR packet)
"SendPacket" (ByVal packet As String) As String
09/27/2011 10:35 Atzenkeeper#12
Jo das mit dem VB.Net ist mir mitlerweile relativ egal.
Habs geschafft der DLL ne Api zu verpassen nur mit dem ASM Code stimmt immernoch etwas nicht o.o

Und ja hatte da den Call gecallt ist aber mitlerweile auch schon behoben.
Bei mir spackt nurnoch der ASM Code rum aber ist für mich auch schon nachvollziehbar das mir hier keiner dabei helfen kann da ihr ja nicht selber Steppen könnt unso und wie würde das aussehen wenn ich von jedem Step ein Screen machen würde ? Albern genau.

Ichguck einfach weiter wie Finde ich die Richtige Funktion tuts auch wenn das hier nicht ganz so einfach wie in MT2 ist :P