PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (BATCH) - SHELL - finde alle PHP-Variablen in Datei



noobee
27.10.2018, 03:23
Gibt es mittels 'sed' und 'regex' eine Möglichkeit, alle Variablen (beginnend mit $ bzw $$) in meiner *.txt zu finden?

Das Problem ist wahrscheinlich die Länge des Variablennamen. Dieser ist natürlich nicht immer gleich lang. Auf der anderen Seite endet eine PHP-Variable doch aber immer mit einem der folgenden Zeichen:

char[] chars = { ' ', '=', ';', '\t', ',', '.', '[', ']', '+', '-', '*', '/', '(', ')' };

Sollte mit dem Beginn einer Variable ($) und dem Ende einer Variable (chars[]) nicht ein Finden jeder Variablen möglich sein trotz unbekannter Länge?

masterholdy
27.10.2018, 08:48
hast du ne text datei mit beispielen? also eingabe und erwartete ausgabedatei?


^(\s)*(\${1,2})([a-zA-Z0-9]+)(.*)$

https://www.szenebox.org/images/_imported/2018/10/73.jpg

Nimbus
27.10.2018, 10:41
Ich befürchte das wird schwer, wenn es wirklich darum geht das ganze komplett korrekt zu machen...
Vermutlich müsste man dazu den kompletten Syntax parsen können, was komplex werden dürfte.


Mir fällt da ganz spontan folgender Fall ein:



echo "Test $var123";

Hier ist $var123 eine Variable



echo 'Test $noVar123';

Hier ist $noVar123 keine Variable.


Für die Benennung gibt es in der PHP-Dokumentation (http://php.net/manual/de/language.variables.basics.php) bereits einen Reg-Ex, auf dem man Aufbauen könnte.

noobee
27.10.2018, 21:26
also eingabe und erwartete ausgabedatei?
also ne ausgabedatei hab ich nicht. ist aber nicht ganz so wichtig. könnte ja zur not alles in eine test.txt umgeleitet werden. Dort würde dann zeilenweise je eine erkannt Variable stehen. Das sehe ich nicht als Prob. Das Prob wird sein, erstmal alle Variablen mit $ und $$ zu erkennen, bzw das Ende des Variablennamen


Ich befürchte das wird schwer, wenn es wirklich darum geht das ganze komplett korrekt zu machen...

Japp, ich sitze leider schon viele Stunden an dem Problem. Dein "echo-Problem" ist nicht das einzige.

In dem Bsp. reicht es leider nicht aus, die $-Variablen zu finden. Hier muss ebenfalls 'a' und 'b' gefunden werden, da die ja $a und $b entsprechen -.-

<?php
$a= 5;
$b= 10;

function myTest1() {
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

myTest1();
echo $b; // outputs 15
?>


oder das "echo $this->var;" mit dem var ohne $


<?php
class SimpleClass
{
//erster Kommentar
public $var = 'ein Standardwert';

//zweiter Kommentar
public function displayVar() {
echo $this->var;
echo $this->$var;
}
}
?>



naja, oder die vielen kleinen anderen Dinge wie feste Variablen in PHP

{"$_GET","$_POST","$_SESSION", "$_GLOBALS", "$GLOBALS", "Superglobals","$_SERVER","$_FILES","$_REQUEST","$_ENV","$_COOKIE","$php_errormsg","$HTTP_RAW_POST_DATA","$http_response_header","$argc","$argv","$this","$integer","$string","$float","$bool","$double"};

Mhh, da hab ich nicht nachgedacht, als ich mir dachte, dass kann ich locker in SHELL lösen :(

fritzi
27.10.2018, 22:01
Was ist da eigentlich der Anwendungsfall? Deobfuscate?

noobee
27.10.2018, 22:03
Vordergründig Obfuscate, japp (nicht deobfuscaten). Dahinter steckt dann aber noch n bissi mehr. Aber erstmal muss obfuscaten laufen, damit der Rest kommen kann.