ServerSocket Im Trojaner

  • Hi leute, ich hab meinem Troja von vor 2 Jahren jetzt mal ne Connection eingebaut^^


    Die Vics tauchen auch im ListView auf usw.. aber :


    wenn man jetzt eine Aktion ausführt, woher wei� ich dass dieser Eintrag aus TListView (bekomme den als "Item" übertragen), welche Connection ID ist?


    natürlich muss der erste eintrag eig ConID eins haben, aber wie kann ich aus nem TLISTITEM nen Integer bekommen?


    Sry hab nen Brett vorm Kopf

  • ClientConnect
    dan Tlistitem difinieren


    Ich nehme jetzt zb L
    Var
    L : Tlistitem;
    begin
    l := listview.items.add;
    l.caption := strtoint(socket.handle);
    l.SubItems.Add( socket.RemoteHost );
    l.SubItems.Add( socket.RemoteAddress );
    l.Data := socket.Data;



    so müsste es eigentlich aussehen wen du die IP zb vom victem im Client sehen willst "in der ListView"

  • nein also die IP + Port sehe ich ja,


    aber wenn ich jetzt rechtsklicke bekomme ich ein TListItem, und davon will ich den integer Wert wissen, bzw die Connection ID.


    d.h. ich habs so immoment dass er :


    Code
    Listener.Socket.Connections[0].SendText('msg');


    das sendet, aber das Connections.[I], da das I ist die ID, und die müsste mit der der ListItemID übereinstimmen, aber wie bekomme ich die.


    Code
    procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);


    Da bekomme ich ITEM gesendet, aber wie ermittele ich davon den integer ?

  • Ich glaube er will das andersrum machen.
    Ich meine damit, dass er in der Victim Liste ein Item auswählt und von dort aus zu
    ServerSocket.Connections[x] kommt.
    Ich hab das so gemacht.
    Ist aber bestimmt n4plike.


    Code
    for I := 0 to ConnectionsList.Items.Count - 1 do
    begin
      if (ServerSocket.Connections[I].RemoteAdress = ConnectionsList.Selected.Caption) then
      begin
        //bla
      end;
    end;
  • Ja klar müssen die gleich sein. Du musst die halt nur immer bei onconnect in die liste eintragen. Aber mir fällt grade auf wie derbe scheisse diese Methode ist. :D :/

  • Ich würde einfach das ganze Objekt (mit AddObject) in die Liste hauen. Dann kann nix schief laufen, wenn 2 Vics aus dem selben Netzwerk kommen und so die selbe IP haben.

    Signatur entfernt, da ich mich für mein eigenes Board schämen muss - Syler


    [RIGHT]Antw.: Danke und die Verwarnung drückt nur deine Hilfslosigkeit über die Aktion aus. Du bistkein guter Admin. Tut mir Leid.
    [/RIGHT]

  • Ja, aber wo ist das Problem dann dabei? Die aktuelle Auswahl ID bekommste mit ItemIndex

    Signatur entfernt, da ich mich für mein eigenes Board schämen muss - Syler


    [RIGHT]Antw.: Danke und die Verwarnung drückt nur deine Hilfslosigkeit über die Aktion aus. Du bistkein guter Admin. Tut mir Leid.
    [/RIGHT]

  • Was du tun solltest:
    handle irgendwo in die listview packen!
    Dann eine For-Next Schleife um alle Connections zu checken!
    In der For-Next Schleife checken ob z.B. Serv.Connections[i] das gleiche handle hat wie angegeben. Falls ja weiÃ?t du welche Connection welches Handle hat!


    Nochmals vielen Dank Zacherl ;)




    Du sagst, du spürst die Ohnmacht, denn der Feind ist ach so stark
    Und er will dich niederhalten mit Geschrei durch Bein und Mark
    Mit Verboten und Zensur kann er zwar den Kampf erschweren
    Doch niemals wird ein Richterspruch den freien Geist bekehren.


    Fürchte lieber Deutschlands Untergang als die Reden der Vasallen
    Derer, die der Lüge dienen, denn schon bald werden sie fallen.

  • Mit Socket.RemoteAddress bekommst du die Adresse. Und mit IndexOf kannst du dann nach was suchen, z.b. nach der Adresse, die du dann löschen lässt. Sie sollte halt nicht doppelt vorkommen. Sonst kannst du auch die Items mit ner Schleife durchsuchen.


    Edit: Da wir hier schon von ServerSocket sprechen, weiÃ? jemand wie ich die Komponenten in Delphi 2009 zum laufen bekommen kann? Das Problem ist ja, dass die Sockets sich nicht mit Unicode vertragen...

  • Im Prinzip läuft es genau wie in vorherigen Versionen, nur das empfangen
    eines Strings geht nicht mehr mit mit einfach nur einer Zeile.
    Das hier hatte ich in irgend einem Forum gefunden.
    So funktioniert es.


    Code
    procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
    var
      s: AnsiString;
    begin
      SetLength(s, Server.Socket.Connections[X].ReceiveLength);
      SetLength(s, Server.Socket.Connections[X].ReceiveBuf(Pointer(s)^, Length(s)));
    end;


    Ich hab das einfach in ne For schleife gepackt und so oft gemacht wie connections hatte.