Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP

13 views
Skip to first unread message

RM

unread,
Aug 10, 2020, 2:32:30 AM8/10/20
to
Piszę obfuskator PHP w C++. Chciałbym, żeby obfuskator działał z
dowolnym frameworkiem PHP. W tym celu potrzebuję prasować framework,
żeby wyodrębnić identifkatory zarezerwowane przez framework (żeby tych
nie zamieniać na losowe - generowane przez obfuskator). Przy czy istotne
jest rozróżnienie zmiennych globalnych i lokalnych we frameworku, bo
globalne nie mogą być zastępowane w generowanym kodzie PHP (jeśli
framework zawiera np. tablicę globalną $config to wygenerowanym kodzie
ta nazwa musi być zarezerowana ni zamieniana na losowy, generowany ciąg
znaków). Powstaje więc pytanie jak przy parsowaniu frameworka (robię to
wyrażeniami regularnymi) odróżnić zmienne globalne od lokalnych. Nie
każda zmienna globalna $x musi mieć deklarację "global $x;" w jakieś
funkcji frameworka, więc jest to problem.
Jeśli w aplikacji PHP występuje użycie zmiennej globalnej frameworka o
nazwie $config to nie powinno ono być obfuskowane, a jeśli występuje
użycie zmiennej nieglobalnej (lokalnej lub paramtru) o nazwie $x, to to
powinno być obfuskowane.

Tomek

unread,
Aug 11, 2020, 2:14:14 AM8/11/20
to
W dniu 10.08.2020 o 08:32, RM pisze:
1.
Zapomniałeś o $GLOBALS['x']

2.
Nie prościej pisać to w PHP zamiast w C++?

RM

unread,
Aug 11, 2020, 3:11:28 AM8/11/20
to
> 1.
> Zapomniałeś o $GLOBALS['x']Ale ja nie wykonuję kodu frameworka, tylko go parsuję (przetwarzam jak
tekst) więc nie mogę użyć $GLOBALS

> 2.
> Nie prościej pisać to w PHP zamiast w C++?
Nie, bo chcę mieć binarkę pod Linux i Windows

Tomek

unread,
Aug 11, 2020, 5:13:19 AM8/11/20
to
W dniu 11.08.2020 o 09:11, RM pisze:
>> 1.
>> Zapomniałeś o $GLOBALS['x']

> Ale ja nie wykonuję kodu frameworka, tylko go parsuję (przetwarzam jak tekst) więc nie mogę użyć $GLOBALS

Będziesz przetwarzał wyłącznie Swój kod PHP czy również cudzy?
Bo jeśli w cudzym kodzie będzie : " $GLOBALS['x'] = 123; " to co?


>> 2.
>> Nie prościej pisać to w PHP zamiast w C++?
> Nie, bo chcę mieć binarkę pod Linux i Windows

A skorzystanie z bcompiler nie rozwiązałoby by Twojego problemu z
"zaciemnianiem"?

RM

unread,
Aug 11, 2020, 5:16:51 AM8/11/20
to
W dniu 11.08.2020 o 11:13, Tomek pisze:
> W dniu 11.08.2020 o 09:11, RM pisze:
>>> 1.
>>> Zapomniałeś o $GLOBALS['x']
>
>> Ale ja nie wykonuję kodu frameworka, tylko  go parsuję (przetwarzam
>> jak tekst) więc nie mogę użyć $GLOBALS
>
> Będziesz przetwarzał wyłącznie Swój kod PHP czy również cudzy?
Dowolną aplikację w PHP z wykorzystaniem dowolnego frameworka PHP.


>>> 2.
>>> Nie prościej pisać to w PHP zamiast w C++?
>> Nie, bo chcę mieć binarkę pod Linux i Windows
>
> A skorzystanie z bcompiler nie rozwiązałoby by Twojego problemu z
> "zaciemnianiem"?

Napisałem już 80% obfuskatora w C++, tzn. potrafi mi obfuskować dowolną
aplikację z CodeIgniter.

RM

unread,
Aug 11, 2020, 5:22:39 AM8/11/20
to
W dniu 11.08.2020 o 11:16, RM pisze:
> Napisałem już 80% obfuskatora w C++, tzn. potrafi mi obfuskować dowolną
> aplikację z CodeIgniter.

Tylko że na razie mam w kodzie (na stałych) zaszyte zarezerwowane
identifikatory CodeIgnitera. Teraz chcę zrobić współpracę z dowolnym
frameworkiem PHP i w tym celu muszę analizować kod frameworka, żeby
wydobyć zarezerwowane identyfikatory.

Tomek

unread,
Aug 11, 2020, 5:40:00 AM8/11/20
to
W dniu 11.08.2020 o 09:11, RM pisze:
>> 1.
>> Zapomniałeś o $GLOBALS['x']
Ale ja nie wykonuję kodu frameworka, tylko go parsuję (przetwarzam jak
tekst) więc nie mogę użyć $GLOBALS


Nie rozumiem o co ci chodzi z "więc nie mogę użyć $GLOBALS"?

"global $x;"
to nie jedyny sposób powstawania globali.

RM

unread,
Aug 11, 2020, 5:47:00 AM8/11/20
to
W dniu 11.08.2020 o 11:16, RM pisze:
> W dniu 11.08.2020 o 11:13, Tomek pisze:
>> W dniu 11.08.2020 o 09:11, RM pisze:
>>>> 1.
>>>> Zapomniałeś o $GLOBALS['x']
>>
>>> Ale ja nie wykonuję kodu frameworka, tylko  go parsuję (przetwarzam
>>> jak tekst) więc nie mogę użyć $GLOBALS
>>
>> Będziesz przetwarzał wyłącznie Swój kod PHP czy również cudzy?
> Dowolną aplikację w PHP z wykorzystaniem dowolnego frameworka PHP.

Bo to jest dość ambitny projekt.

RM

unread,
Aug 11, 2020, 5:49:17 AM8/11/20
to
W dniu 11.08.2020 o 11:39, Tomek pisze:
> W dniu 11.08.2020 o 09:11, RM pisze:
>>> 1.
>>> Zapomniałeś o $GLOBALS['x']
> Ale ja nie wykonuję kodu frameworka, tylko go parsuję (przetwarzam jak
> tekst) więc nie mogę użyć $GLOBALS
>
>
> Nie rozumiem o co ci chodzi z "więc nie mogę użyć $GLOBALS"?

Po w programie w C++ nie mogę sprawdzić co zawierałaby PHPowska tablica
$GLOBALS przy wykonaniu aplikacji PHP.

Tomek

unread,
Aug 11, 2020, 6:13:29 AM8/11/20
to
W dniu 11.08.2020 o 11:49, RM pisze:
Kompletnie nie rozumiesz o czym piszę.
Nikt Ci nie każe wykonywać kodu PHP.

W kodzie PHP będziesz miał taki kod:

==========================================================
<?php


$GLOBALS['aaa'] = array('zzz','yyy');

foreach ($GLOBALS['aaa'] as $v) {
echo $v;
}

========================================

i co z tym zrobisz?

RM

unread,
Aug 11, 2020, 6:15:03 AM8/11/20
to
W dniu 11.08.2020 o 12:13, Tomek pisze:
Poddaję się.

RM

unread,
Aug 11, 2020, 6:26:38 AM8/11/20
to
W dniu 11.08.2020 o 12:13, Tomek pisze:
Mogę zostawić zmienna aaa nie zobfuskowaną.

Tomek

unread,
Aug 11, 2020, 6:31:22 AM8/11/20
to
W dniu 11.08.2020 o 12:15, RM pisze:

> Bo to jest dość ambitny projekt.
> Poddaję się.

I to już koniec?
Po projekcie?

RM

unread,
Aug 11, 2020, 8:02:00 AM8/11/20
to
W dniu 11.08.2020 o 12:26, RM pisze:

>> W kodzie PHP będziesz miał taki kod:
>>
>> ==========================================================
>> <?php
>>
>>
>> $GLOBALS['aaa'] = array('zzz','yyy');
>>
>> foreach ($GLOBALS['aaa'] as $v) {
>>      echo $v;
>> }
>>
>> ========================================
>>
>> i co z tym zrobisz?
>
> Mogę zostawić zmienna aaa nie zobfuskowaną.

To jest rzadki przypadek. Nic się nie stanie jak takie rzadkie przypadki
nie zostaną zobfuskowane.

RM

unread,
Aug 11, 2020, 12:01:35 PM8/11/20
to

>> W kodzie PHP będziesz miał taki kod:
>>
>> ==========================================================
>> <?php
>>
>>
>> $GLOBALS['aaa'] = array('zzz','yyy');
>>
>> foreach ($GLOBALS['aaa'] as $v) {
>>      echo $v;
>> }
>>
>> ========================================
>>
>> i co z tym zrobisz?

Jeśli chodzi Ci o taki przypadek w kodzie frameworka, to muszę wyłapać
takie zmienne. Jeśli chodzi co o taki przypadek w kodzie aplikacji PHP,
to mogę to zignorować (zostawić niezobfuskowane i nic się nie stanie).

RM

unread,
Aug 12, 2020, 9:32:01 AM8/12/20
to
W dniu 10.08.2020 o 08:32, RM pisze:
Czy mój problem ma w ogóle rozwiązanie?

RM

unread,
Aug 12, 2020, 11:14:40 AM8/12/20
to
Mój obfuskator (testowany na razie tylko z CodeIgniter) nie obfuskuje
zmiennych w widokach, ponieważ do tych zmiennych są przekazywane
parametry widoków z kontrolerów. Wiem, że w Yii wywołanie widoku wygląda
podobnie jak w CI:

$this->render('index', array('models' => $models, 'pages' => $pages,
'sort' => $sort));

więc mam pytanie: czy można przyjąć dla wszystkich frameworków
założenie, że zmiennych w widokach nie obfuskujemy.

RM

unread,
Aug 12, 2020, 11:20:01 AM8/12/20
to
W dniu 12.08.2020 o 17:14, RM pisze:
Tzn. mój obfuskator ma zaciemniać kod aplikacji typu MVC.
0 new messages