![]() |
hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Hallo!
Kann man sich eigentlich darauf verlassen, dass das Windows-Dienstprogramm hh.exe auf allen Windows-Computern von Windows 7 bis Windows 10 installiert ist? (hh.exe zeigt CHM-Hilfedateien an). Ich benötige hh.exe, um mit meinem Programm die Befehlszeile hh.exe -decompile <CHM-Datei> auf dem Computer des Benutzers auszuführen. |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
![]() Nimm doch das hier.. und integriere alles in dein Programm... dann ist auf jeden Fall immer alles an Bord... Wie lauten denn die Lizenzbedingungen zur originalen HH.exe? |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Ansonsten schau mal hier in der DP:
![]() War vor einiger Zeit mal so entstanden, um CHM-Dateien "auszupacken". Eventuell kannst Du ja Teile daraus so umbauen, dass Du direkt in Deinem Programm an die gewünschten Inhalte kommst. |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Vielen herzlichen Dank! Ich habe jetzt übrigens gerade entdeckt, dass auch 7z CHM-Dateien dekompilieren kann, mit dieser Befehlszeile:
7z x -o%OUTDIR% %INFILE%.chm (Dabei darf zwischen "-o" und %OUTDIR% kein Leerzeichen stehen). Wie meinst du "integriere alles in dein Programm"? Gibt es irgendwo einen Delphi SourceCode, den man integrieren kann? |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Zitat:
- diese Verknüpfung existiert - warum auch immer - nicht (mehr?), - irgendein Scherzbold hat die hh.exe-Datei umbenannt oder - die hh.exe-Datei wurde gelöscht. |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Was mich bei KeyTools stört, ist dass man es installieren muss. Es gibt keine Information, was dabei geschieht. Wahrscheinlich wird dabei eine ActiveX bzw. "ocx" registriert. Das ist nicht gut - ich möchte die alleinige Kontrolle behalten. Insofern werd ich mir mal das CHM dump ansehen.
|
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Nimm doch den Quelltext, auf den ich weiter oben verwiesen habe. Anstatt dort den Inhalt in Dateien zu schreiben, kannst Du ihn Dir in 'ne Stringliste (oder sowas) kopieren und dann nach belieben im Programm verarbeiten.
Irgendwas externes wird nicht benötigt. |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
BytesRead, BytesWritten: ActiveX.LargeUInt; // Int64; Nach dem Ausführen kam aber diese Meldung des MS Virenwächters: Anhang 45108 |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Wie soll in den von Dir selbst erstellten Quelltext (bzw. das Kompilat) ein Virus reinkommen?
Habe mir vor Jahren angewöhnt, die Antivirussoftware so zu konfigurieren, dass das Ausgabeverzeichnis von Delphi nicht mehr überwacht wird. Leider haben irgendwelche "netten Leute" mit Delphi mal entsprechend "unsaubere" Software erstellt, so dass es seit dem immer wieder mal "false positive" gibt. Damit muss man leider leben. Die mit Delphi 7 kompilierte Version wird jedenfalls nicht als verseucht oder potentielle Gefahr erkannt. Abgesehen davon bedeutet die Meldung auf dem Bild ja nichts weiter, als sowas wie: "Es könnte unter umständen, eventuell, vielleicht oder eben auch nicht, was nicht wirklich absolut unverfängliches gefunden worden sein." Oder: "Nix genause weiß man nicht." Da ich das Programm schon seit Jahren immer mal wieder nutzte und bisher keinerlei schädliche Nebenwirkungen habe feststellen können, (und auch noch kein Virenscanner angeschlagen hat) gehe ich davon aus, dass es diese auch nicht gibt. Ansonsten schick die Exe doch an die "Analysten", eventuell finden die ja nix und sorgen dafür, dass nach 'nem Update auch grundsätzlich nix gefunden wird. Und falls Du die von Dir benötigen / relevanten Teile des Quelltextes in Dein Programm übernimmst, heißt das nicht, dass dann in der von Dir erstellten Exe auch eine potentielle Gefahr lauert. |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Hier gibt es ein Freeware Tool mit GUI:
Free CHM Decompiler: ![]() (leider ohne SRC) Hab' ich mal ausprobiert, macht was es soll und braucht dazu nur Kontrolle über explorer.exe und services.exe (OpenDialog - Pfadauswahl)... sieht sauber aus... Wie wäre es mit FreePascal CHMLS.exe !!! Läßt sich von der CommandoZeilenEbene ansteuern... Dazu gibt es doch auch sicher den SourceCode oder? Hab' ich mir noch nicht angesehen... Die FreePascal Echse kann auf jeden Fall decompilieren. |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Zitat:
|
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Zitat:
Wollte nur sagen, dass man solche Warnungen bei eigener Software nicht so eng sehen sollte, da die Wahrscheinlichkeit, dass die Antivirussoftware richtig liegt, eher gering ist. |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Zitat:
Ein wenig Pfusch von mir dazu:
Delphi-Quellcode:
procedure TFrmMain.TreeDblClick(Sender: TObject); var s, sAsk: string; sFileName: string; Node: TTreeNode; ans: Word; //ausgewählte Anworte begin Node := Tree.Selected; if Assigned(Node) then begin { Create a fully qualified filename by traversing the parent nodes } s := Node.Text; sFilename := Node.Text; repeat Node := Node.Parent; if Assigned(Node) then sFilename := Node.Text + '\' + sFilename; until (Node = nil); s := sFileName; sAsk := 'Möchten Sie das ausgewählte Objekt ' + #13#10 + sFileName + #13#10 + 'wirklich bearbeiten?'; // MessageBox(Handle, PChar(s), 'Doppelklick im Tree', mb_Ok or mb_DefButton1); ans := MessageBox(Handle, PChar(sAsk), 'Bestätigen', mb_YesNoCancel or mb_IconQuestion or mb_DefButton3); if ans = idCancel then begin MessageBox(Handle, 'Abbrechen angeklickt', 'Info', mb_Ok or mb_DefButton1); exit; end; if ans = idNo then begin MessageBox(Handle, 'NEIN angeklickt', 'Info', mb_Ok or mb_DefButton1); exit; end; if ans = idYes then begin MessageBox(Handle, 'JAhaa angeklickt', 'Info', mb_Ok or mb_DefButton1); // Machwas! exit; end; end; end; |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Zitat:
![]() Wie könnte man das Package nach Delphi übertragen? |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Anhang 45112 |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Das liegt daran, dass die Exe mit Upack gepackt ist. Das ist eben keine gute Idee, da das oft von Malwareentwicklern benutzt wird, die Analyse der Exe durch Virenscanner erschwert wird und diese daher misstrauisch macht...
Diese Packer werden daher als Tools für Virenautoren eingestuft, so dass gepackte Exen oft unter einen Generalverdacht fallen... |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Zitat:
Wie ich schon gesagt hatte, es sah sauber aus... ob die Datei wirklich 100% sauber ist kann ich nach den 3xCHM-File-Laden und decompilieren nicht sagen, wäre es jedoch eine Malware, dann wäre diese sehr dumm bzw. völlig unbrauchbar. Nach dem Starten der EXE ist nichts passiert und wärend des kurzen Tests ist ebenfalls nichts passiert. D.h. die EXE hat nichts gemacht/gewollt. Erst als ich einen Pfad eingegeben habe wollte sie einen Zugriff auf die explorer.exe und die services.exe. Den Zugriff habe ich 1x erlaubt. Der Zugriff ist normal und wird von jedem OpenDialog benötigt. Weitere Zugriffe waren nicht zu verzeichnen. Malware will normalerweise alles Mögliche.. Da man mit FreePascal CHMls.exe auch decompilieren kann benutze ich lieber die Pascal-EXE. Außerdem kann ich die FPC-EXE überall einbinden und mit entsprechenden Parametern im Hintergrund starten und sofort decompilieren. Zusätzlich müsste man mal schauen wo der SRC ist bzw. ob es davon SRC gibt. Für die kleine Echse brauchst du ja nicht das komplette Paket von FPC. Aber ich hab' den QuellCode noch nicht lokalisieren können... Du kannst dir einfach FreePascal 3.0 herunterladen und findest die EXE im Verzeichnis "\bin\i386-win32\".. ist also ganz einfach zu bekommen... z.B. hier: ![]() btw: hast du einen Namen angezeigt bekommen? Also einen Malware-Namen oder so (was es denn sein soll)?? |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Zitat:
Werde mir gleich das FP mal herunterladen und sehen, ob sich der Code in Delphi einbinden lässt. Vielen Dank für deine Infos, haben mir sehr geholfen! |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Habe mir jetzt FreePascal 3.0 heruntergeladen und installiert, aber keine Source für das CHM-Programm gefunden.
|
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Zitat:
|
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Also ich würd' das Formular des Programmes einfach in mein Programm mit aufnehmen, Visible auf false setzten und die Methode
Delphi-Quellcode:
aufrufen.
DumpCHMFile('Name der zu entpackenden Datei.chm');
Anschließend ist der Inhalt im Verzeichnis 'Name der zu entpackenden Datei' zu finden. Dort kannst Du Dir dann die gewünschten Dateien raussuchen oder halt auch durch den Baum gehen, um dort gezielt zu suchen. Du findest dort ja bereits alle Informationen, die Du für eine weitere Bearbeitung benötigst. Bist Du damit fertig, löschst Du noch das für den Export erstellte Verzeichnis. Letztlich sind die Informationen in 'ner CHM-Datei in 'nem Baum organisiert, ohne den wirst Du nicht auskommen. Wenn Du den Baum dann Zweig für Zweig durchläufst, kannst Du für jeden Zweig
Delphi-Quellcode:
aufrufen, also sowas in der Art:
TreeChange(Self, Node);
Delphi-Quellcode:
Im Attribut Text des Knotens befindet sich der Dateiname, anhand dessen kannst Du entscheiden, ob Du TreeChange für den Zweig überhaupt aufrufen willst.
for i := 0 to tree.Items.Count - 1 Do begin
TreeChange(Self, tree.Items[i]); end; Ansonsten schau Dir die Methode EnumerateStorage an, dort wird die CHM-Datei letztlich "aufgebröselt". Mal eine ungetestet hingedaddelte "veränderte" Methode:
Delphi-Quellcode:
DumpChmFile könnte dann in etwa so aussehen:
procedure TFrmMain.EnumerateStorage(const Storage: IStorage);
var Enumerator: IEnumStatStg; Stat: TStatStg; SubStorage: IStorage; Extension: String; Src: IStream; begin OleCheck(Storage.EnumElements(0,nil,0,Enumerator)); while Enumerator.Next(1,Stat,nil) = S_OK do begin // Hier ist der Name der Datei / des Verzeichnisses enthalten -> Stat.pwcsName; if Stat.dwType = STGTY_STORAGE then begin OleCheck(Storage.OpenStorage(Stat.pwcsName,nil, STGM_READ or STGM_SHARE_DENY_WRITE,nil,0,SubStorage)); EnumerateStorage(SubStorage); end else begin Extension := UpperCase(ExtractFileExt(Stat.pwcsName)); if (Extension = '.HTM') or (Extension = '.HTML') then // Hier müsstest Du jetzt mal schauen, wo sich genau der Inhalt der HTML-Datei befindet, um ihn dann nach belieben zu verarbeiten. OleCheck(SubStorage.OpenStream(Stat.pwcsName,nil,STGM_READ,0,Src)); // In Src hast Du dann 'nen Stream, den Du (vermutlich) in 'ne TStringList oder sowas laden kannst, für die weitere Verarbeitung. end; end; end; end;
Delphi-Quellcode:
procedure TFrmMain.DumpCHMFile(const Filename: String);
var ITStorage: IITStorage; S: WideString; begin ITStorage := CoITStorage.Create; S := Filename; OleCheck(ITStorage.StgOpenStorage(PWideChar(S),nil, STGM_READ or STGM_SHARE_DENY_WRITE,nil,0,FRootStorage)); EnumerateStorage(FRootStorage); end; |
AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Der SourceCode von FPC kann z.B. hier heruntergeladen werden:
![]() Die CHMls.exe ist dort auch zu finden.. also die dazugehörigen Dateien. Wenn man FPC-SRC entpackt und dann im Verzeichnis "packages\CHM\SRC" nachschaut, dann findet man die Dateien: .. chmls.lpi chmls.lpr chmWriter.pas chmReader.pas htmlUtil.pas ..usw... (insgesamt 23 Dateien) Ich hab' noch nicht 'reingeschaut, klingt aber schonmal ganz gut... Wieviel man daran ändern muß um diesen Code in Delphi lauffähig zu machen hab' ich nicht probiert, aber wenn man nur das Dekompilieren benötigt ist es vielleicht ja nicht so doll. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 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