Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   Anwendung als Malware erkannt (https://www.delphipraxis.net/207828-anwendung-als-malware-erkannt.html)

HolgerX 8. Mai 2021 20:59

AW: Anwendung als Malware erkannt
 
Hmm..

Zitat:

Zitat von venice2 (Beitrag 1488838)
Es ist auch kein Konstantenstring.

Delphi-Quellcode:
...
    Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', false);
..

Wenn Du meinst, dass dies kein Konstantenstring in deiner EXE ist?
Es muss nicht 'const' davor stehen....

venice2 8. Mai 2021 21:05

AW: Anwendung als Malware erkannt
 
Eine Konstante ist bei mir ein vorgefertigter string. ;) in diesen Fall

Delphi-Quellcode:
const
  x = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Run';

Reg.OpenKey(x, false);
Das andere nur ein String gültig für die eine Anweisung, Funktion.

Wenn jedoch bei dir ein string ohne const eine Konstante ist dann ist es so.
Ich habe da eine andere Auffassung.

himitsu 8. Mai 2021 21:14

AW: Anwendung als Malware erkannt
 
Es macht keinen Unterschied.

Eine "richtige" Konstante wird, ähnlich einem Makro, an jeder Stelle ersetzt. (Strings sind Zeiger, also steht "überall" der Zeiger zum String)

Es ist das selbe Ergebnis, also wenn man den die String-Konstante den String direkt einsetzt.
Noch besser, denn wenn der gleiche String an mehreren Stellen vorkommt, dann führt die Codeoptimierung das zusammen und auch da ist dann überall der gleiche Zeiger zur selben String-Konstante.



Bei einer typisierten Konstante ist es ein Unterschied,
denn typlisierte Konstanten sind in Wirklichkeit schreibgeschützte Variablen.
Also hier ist dann überall der Zeiger auf die "Variable" eingebaut.



Bei Strings kommt das Verhalten des Compilers nicht gut rüber.
Mit Integern fällt es besser auf.

Egal ob untypisierte Konstante oder die Zahl direkt im Code, am Ende ist die Zahl direkt im Compilat.
Bei einer Variable oder typisierten Konstante wird an allen Stellen eine Referenz zur globalen Varialble/Konstante im Compilat zu finden sein.

HolgerX 8. Mai 2021 21:14

AW: Anwendung als Malware erkannt
 
Hmm...

Zitat:

Zitat von venice2 (Beitrag 1488914)
Eine Konstante ist bei mir ein vorgefertigter string. ;) in diesen Fall

Delphi-Quellcode:
const
  x = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Run';

Reg.OpenKey(x, false);
Das andere nur ein String gültig für die eine Anweisung, Funktion.

Wenn jedoch bei dir ein string ohne const eine Konstante ist dann ist es so.
Ich habe da eine andere Auffassung.


Wenn Du einen String so übergibst

Delphi-Quellcode:
    Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', false);
Dann ist dieser 'Text' auch eine Konstante!
Versuche diesen mal an eine Funktion so zu übergeben, wenn dort vor der Parameterdefinition ein 'var' steht...

Ich erhalte die Fehlermeldung
'[Fehler] Unit1.pas(33): Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden'

Delphi-Quellcode:
const
  x = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Run';
Reg.OpenKey(x, false);

Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', false);
Bei beiden Stellen ist der Text '\SOFTW...' eine Konstante!

venice2 8. Mai 2021 21:16

AW: Anwendung als Malware erkannt
 
Zitat:

Es macht keinen Unterschied.
OkiDoki :)

Danke für eure Infos! Ihr habt dann recht.
Dachte bisher das es nur dann eine Konstante ist wenn explicit so in einer Funktion übergeben.

function(const x: string)
Wuste nicht das es grundsätzlich so ist. Dann kann man sich das const für Strings ja sparen!

Aber gut Thema ist ja erledigt.

himitsu 8. Mai 2021 21:33

AW: Anwendung als Malware erkannt
 
Was bei diesem Const (als Parameter) rein geht, ist unbestimmt.

Dieses "const" bedeutet nur, dass innerhalb der Funktion das Übergebene nicht geändert werden kann, also dieser Parameter ist "schreibgeschützt".
Ob dort eine Konstante oder Variable rein ging, ist egal ... dieses Const bezieht sich ausschließlich auf den Parameter, nicht auf das was rein ging.

PS: Bei einem String kannst mit Delphi-Referenz durchsuchenStringRefCount rausbekommen, ob es eine Konstante ist.
Also eine Variable, typisierte Konstante, Funktions-Paramter oder Dergleichen an diese Funktion übergeben und

0 = nichts drin, aka Leerstring ''
-1 = Konstante
>0 = Variable


falls StringRefCount noch nicht existiert, dann
Delphi-Quellcode:
if S <> '' then
  RefCount := PInteger(NativeInt(S) - 2 * SizeOf(Integer))^
else
  RefCount := 0;

KodeZwerg 8. Mai 2021 21:39

AW: Anwendung als Malware erkannt
 
ich will dich nicht nerven weil du ja das thema beendet hast...
ich weiß echt nicht wie die heuristik da funktioniert bei deinem nicht-scanner scanner, aber vielleicht ginge das hier:
deinen string bevor du kompilierst per aes und base64 verfremden und zu laufzeit den string dort decodiert übergeben falls du verstehst was ich meine.
so wäre die nicht-konstante konstante erstmal vergangenheit.
vielleicht meckert der aber generell wenn du in registry was schreibst, egal wo, könnte man ja mal testen.

venice2 9. Mai 2021 09:42

AW: Anwendung als Malware erkannt
 
Zitat:

Zitat von KodeZwerg (Beitrag 1488919)
ich will dich nicht nerven weil du ja das thema beendet hast...

Warum sollte ich da was ändern unabhängig von dem String Gedöns?

Lese bitte die ersten beiden Zeilen nach der Quote.
Das Problem ist UPX nicht irgendein String als Konstante, nicht Konstante, egal wohin geschrieben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz