🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.php
18 messages
18 total messages Started by RM Mon, 10 Aug 2020 06:32
jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232558
Author: RM
Date: Mon, 10 Aug 2020 06:32
16 lines
2340 bytes
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.
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232559
Author: Tomek
Date: Tue, 11 Aug 2020 06:14
23 lines
2372 bytes
W dniu 10.08.2020 o 08:32, RM pisze:
> 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.

1.
Zapomniałeś o $GLOBALS['x']

2.
Nie prościej pisać to w PHP zamiast w C++?
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232560
Author: RM
Date: Tue, 11 Aug 2020 07:11
7 lines
1301 bytes
> 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
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232561
Author: Tomek
Date: Tue, 11 Aug 2020 09:13
16 lines
1791 bytes
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"?
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232562
Author: RM
Date: Tue, 11 Aug 2020 09:16
21 lines
1849 bytes
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.
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232563
Author: RM
Date: Tue, 11 Aug 2020 09:22
8 lines
1575 bytes
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.
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232566
Author: Tomek
Date: Tue, 11 Aug 2020 09:39
11 lines
1606 bytes
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.
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232564
Author: RM
Date: Tue, 11 Aug 2020 09:46
13 lines
1653 bytes
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.
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232565
Author: RM
Date: Tue, 11 Aug 2020 09:49
12 lines
1572 bytes
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.
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232567
Author: Tomek
Date: Tue, 11 Aug 2020 10:13
32 lines
2206 bytes
W dniu 11.08.2020 o 11:49, RM pisze:
> 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.

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?
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232568
Author: RM
Date: Tue, 11 Aug 2020 10:15
35 lines
2181 bytes
W dniu 11.08.2020 o 12:13, Tomek pisze:
> W dniu 11.08.2020 o 11:49, RM pisze:
>> 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.
> 
> 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?

Poddaję się.
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232570
Author: RM
Date: Tue, 11 Aug 2020 10:26
35 lines
2213 bytes
W dniu 11.08.2020 o 12:13, Tomek pisze:
> W dniu 11.08.2020 o 11:49, RM pisze:
>> 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.
> 
> 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?

Mogę zostawić zmienna aaa nie zobfuskowaną.
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232569
Author: Tomek
Date: Tue, 11 Aug 2020 10:31
7 lines
1497 bytes
W dniu 11.08.2020 o 12:15, RM pisze:

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

I to już koniec?
Po projekcie?
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232571
Author: RM
Date: Tue, 11 Aug 2020 12:01
22 lines
1769 bytes
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.
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232572
Author: RM
Date: Tue, 11 Aug 2020 16:01
20 lines
1800 bytes
>> 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).
Re: jak odróżnić zmienne globalne od lokalych przy parsowaniu kodu PHP
#232573
Author: RM
Date: Wed, 12 Aug 2020 13:31
19 lines
2231 bytes
W dniu 10.08.2020 o 08:32, RM pisze:
> 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.

Czy mój problem ma w ogóle rozwiązanie?
pytanie do znawców frameworków PHP
#232574
Author: RM
Date: Wed, 12 Aug 2020 15:14
10 lines
1418 bytes
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.
Re: pytanie do znawców frameworków PHP
#232575
Author: RM
Date: Wed, 12 Aug 2020 15:19
14 lines
1612 bytes
W dniu 12.08.2020 o 17:14, RM pisze:
> 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.
> 

Tzn. mój obfuskator ma zaciemniać kod aplikacji typu MVC.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads