AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit RtlRunEncodeUnicodeString

Ein Thema von slemke76 · begonnen am 22. Sep 2015 · letzter Beitrag vom 27. Sep 2015
Antwort Antwort
slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
146 Beiträge
 
#1

AW: Probleme mit RtlRunEncodeUnicodeString

  Alt 23. Sep 2015, 10:31
Hallo,

leider nicht - um die dritt-Software geht es ja auch zunächst gar nicht. Ich würde mir selber gerne ein Beispiel schreiben (naja, genau genommen bekomme ich das ja nicht hin ), um die Funktionen zu verstehen und benutzen zu können.

Ich habe also zwei Probleme:
- Verständnisproblem zusammenspiel RtlInitUnicodeString & RtlRunEncodeUnicodeString
- Variablen / Pointerhandling

Kann mich jemand unterstützen?

Ich habe auch mal mein Sample als komplettes Projekt (Delphi 7) als ZIP angehängt.

DANKE!
Angehängte Dateien
Dateityp: zip RTLEncode.zip (6,0 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.075 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Probleme mit RtlRunEncodeUnicodeString

  Alt 23. Sep 2015, 11:03
Du benutzt schon die Init-Funktion nicht richtig.
Hast du dir die Doku in der MSDN dazu angeschaut?
Beachte, was die Ausgabe und was die (optionalen) Eingabeparameter sind.

Delphi-Quellcode:
 
...
var
  Source : string;
  UnicodeString: TUnicodeString;
begin
 Source := 'TestString';
  FillChar(UnicodeString, SizeOf(UnicodeString), 0);
  RtlInitUnicodeString(@UnicodeString, PWideChar(Source));
end;
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.075 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Probleme mit RtlRunEncodeUnicodeString

  Alt 23. Sep 2015, 11:56
Schau dir nochmal den ersten Link an, den du in deinen Beispielprojekt hast.
Die werkeln da mit CopyAndSkipString rum. Wenn man diese Procedure verwendet geht es:
Delphi-Quellcode:
...
type
  UNICODE_STRING = packed record
    Length: Word;
    MaximumLength: Word;
    Buffer: PWideChar;
  end;
 PUNICODE_STRING = ^UNICODE_STRING;


procedure RtlInitUnicodeString(DestinationString: PUNICODE_STRING; SourceString: LPWSTR); stdcall; external 'ntdll.dll';
procedure RtlRunEncodeUnicodeString(Hash: PUCHAR; Str: PUNICODE_STRING); stdcall; external 'ntdll.dll';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure CopyAndSkipString(var P : Pointer; var Str : PWideChar);
var
  Len : Cardinal;
begin
  Len := (Length(Str) + 1) * SizeOf(Str[0]);
  CopyMemory(P, Str, Len);
  Str := P;
  Inc(Cardinal(P), Len);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Source: PWideChar;
  UnicodeString: UNICODE_STRING;
  Hash : UCHAR;
  P : Pointer;
begin
  {
    http://www.remkoweijnen.nl/blog/2008/11/26/executing-a-fast-user-switch-programmatically-part-2/
    http://doxygen.reactos.org/dc/d4b/lib_2rtl_2encode_8c_source.html
    http://forums.codeguru.com/showthread.php?322941-problem-using-RtlRunDecodeUnicodeString
  }

  Source := 'TestString';
  GetMem(P, SizeOf(UnicodeString));
  CopyAndSkipString(P, Source);

  RtlInitUnicodeString(@UnicodeString, Source);
  Hash := Byte(GetTickCount);
  RtlRunEncodeUnicodeString(@Hash, @UnicodeString);
end;
  Mit Zitat antworten Zitat
slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
146 Beiträge
 
#4

AW: Probleme mit RtlRunEncodeUnicodeString

  Alt 23. Sep 2015, 12:29
Hallo,

1000 Dank - tiefste Dankbarkeit - wenn du nicht aus Berlin kommen würdest (zu weit weg) würde ich mit ner Kiste Bier vorbeikommen .

Ich werde dann mal als nächstes das Decode selber probieren zu implementieren Ich habe erstmal einen kräftigen Schubser in die richtige Richtung bekommen.

lg
Sebastian
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.075 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Probleme mit RtlRunEncodeUnicodeString

  Alt 23. Sep 2015, 12:34
1000 Dank - tiefste Dankbarkeit - wenn du nicht aus Berlin kommen würdest (zu weit weg) würde ich mit ner Kiste Bier vorbeikommen .
Gibt es bei euch keine Post?
  Mit Zitat antworten Zitat
slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
146 Beiträge
 
#6

AW: Probleme mit RtlRunEncodeUnicodeString

  Alt 24. Sep 2015, 01:17
Hallo,

darüber lässt sich reden

Ich habe das ganze jetzt durchgearbeitet und (hoffentlich) auch verstanden (ein paar Fragen sind noch unten .
Mein nächster Schritt wäre jetzt, die RtlRunDecodeUniCodeString einzuführen; die Parametertypen sind gleich, ein "RtlRunDecodeUniCodeString(@Hash, @UnicodeString);" sollte im o.g. Source also gehen (?).

Was ich getan habe: Ein Breakpoint _vor_ dem RtlRunEncodeUniCodeStringsetzen, Inhalt von UnicodeString in den überwachten Ausdrücken einsetzen, diesen Aufklappen und in UnicodeString.Buffer liegt der Wert "TestString", wie erwartet.

Dann Einzelschritt für Encode & Decode machen - leider steht dann _nicht_ wieder der "TestString" im UnicodeString.Buffer (bei gleichem Hash)?

Ich habe auch noch paar "untergeordnete" Fragen (ich möchte nicht Dumm sterben :

1. mit GetMem wird Speicher an der Adresse "P" in Größe der Struktur UNICODE_STRING bereit gestellt, mit CopyAndSkipString der Inhalt von Source an die Speicheradresse P kopiert. Richtig? Wird dann mit Str := P; die Adresse der Variable "Source" ebenfalls auf P gesetzt? Ich vermute, damit man auf das Ergebnis später einfach über die Variable source zugreifen kann? Was passiert mit der alten Speicheradresse von source? Leck?

2. Wenn ich "ShowMessage(WideCharLenToString(UnicodeString.Buf fer, UnicodeString.Length div 2));" oder auch einfach "ShowMessage(source);" zum Anzeigen des Inhaltes der Variable benutze, funktioniert das im ersten Durchlauf, im zweiten bekomme ich eine Exception - warum?

Kann jemand auflösen, warum zum Henker die Decode Funktion nicht laufen will? Ich habe schon alles mögliche probiert (u.a. auch die Variable neu zu initialisieren), aber nichts klappt.

Einen aktuellen Source habe ich nochmal angehängt.
Es gibt keinen Fehler, aber ich bekomme auch meinen Wert nicht zurück...!?

lg
Sebastian
Angehängte Dateien
Dateityp: zip RTLEncode.zip (10,3 KB, 4x aufgerufen)

Geändert von slemke76 (24. Sep 2015 um 01:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: Probleme mit RtlRunEncodeUnicodeString

  Alt 24. Sep 2015, 06:36
Die Parameter sind nicht gleich. Bei der Decode Funktion ist der Hash ein UCHAR und kein PUCHAR

Bei dem ganzen CopyAndSkipString Kram hast du btw. auf jeden Fall einen Buffer Overflow eingebaut. Der Speicher, den du dir per GetMem holst ist unter 32 Bit immer 8 Byte groß. In der Funktion schreibst du aber im Falle von "TestString" 22 Bytes.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (24. Sep 2015 um 07:58 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz