Send Funktion Thread Sleepen.

09/03/2012 01:16 Crack-wtf#1
Hey ich hab mal eine Frage.

Ich habe die Send Funktion gehookt, und einen Sleep eingebaut bis ein bestimmter wert eins ist.

Diese Dll wird in ein Programm Injected, dass eine swf einbettet.

Wenn der Sleep einsetzt wird das Komplette Programm gesleept.
Wie kriege ich es hin, dass nur der Thread Sleept, und einfach kein Packet geschickt wird bis der wert 1 ist?

Hier mein Hook.



PHP Code:
__declspec(nakedvoid SendHook(void)
{
    
_asm
    
{
        
mov eax,[esp+0x08]
        
mov Buffereax
        mov eax
, [esp+0x0C]
        
mov [len], eax

        mov edi
,edi
        push ebp
        mov ebp
,esp
        sub esp
0x10
        pushad
    
}

    
memcpy(&PacketBufferSpace, (void*)Bufferlen);
    
WaitForSend true;

    while(
WaitForSend)
        
Sleep(10);
    

    
memcpy((void*)Buffer, &PacketBufferSpacelen);

    
_asm
    
{
        
popad
        jmp SendRetn
    
}

09/03/2012 02:58 bloodx#2
Du musst die Sleep Funktion selbstverständlich in einem eigenen Thread ausführen, weil so sleepst du ja den Momentanen dadurch bleibt auch dein Programm hängen solange.
09/03/2012 03:15 Crack-wtf#3
Habe ich schon probiert.
Nur dann ist das Problem, dass dieser Thread zwar sleept, aber das packet direkt weiter geschickt wird weil er sich für den sleep in dem Thread nicht interessiert.
09/03/2012 06:43 wurstbrot123#4
Quote:
Originally Posted by Crack-wtf View Post
Habe ich schon probiert.
Nur dann ist das Problem, dass dieser Thread zwar sleept, aber das packet direkt weiter geschickt wird weil er sich für den sleep in dem Thread nicht interessiert.
Normal...du springst ja trotzdem zum originalen Sendcode
zurück. Du müsstest den Packetbuffer kopieren,
das Senden unterbinden und das Packet dann selber Senden
( im extra thread in dem du auch wartest... ).
09/03/2012 07:08 Crack-wtf#5
Jetzt stellt sich die frage wie soll ich das Senden unterbinden ohne einen Crash zu kassieren?
Einfach retn reinhauen wirds nich bringen.
09/03/2012 18:38 MrSm!th#6
Also wenn das ganze Programm hängt, wenn du in einem Thread wartest, dann wird es wohl mit WaitForSingleObject o.Ä. auf den Versand warten und das hat dann wohl auch seinen Grund. Würde es also ggf. wie empfohlen versuchen.
Das Senden kannst du verhindern, indem du ordentlich returnst (nicht einfach retn, sondern der Calling Convention entsprechend und so wie es der Caller erwartet).