Gönderen Konu: PHP Enconding - Obfuscation Level  (Okunma sayısı 7487 defa)

PHP Enconding - Obfuscation Level

« : 03.07.2006 11:40:03 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Aramızda PHP ile yakından ilgilenen arkadaşlar olduğu için bugün karşılaştığım bir olayı sizlerle paylaşmak istedim. Ben 2002 yılından beri Zend Encoder (yeni ismiyle Zend SafeGuard Suite ya da kısaca Zend Guard) kullanıyorum. Bu tool PHP dosyalarını byte codelara çevirip, daha sonra exe benzeri bir yapıya getirerek hem şifrelemiş oluyor, hem de birçok optimizasyon ile daha hızlı çalışmasını sağlıyor. Ancak çok uzun süreli lisans satmıyor Zend firması, senelik lisanslar alabiliyoruz. Bu yüzden de her sene ister istemez versiyon upgrade'i yapmamız gerekiyor.

Encode edilmiş dosyaların web server üzerinden çalışabilmesi için ise servera ücretsiz olan Zend Optimizer install edilmesi gerekiyor. Aslında mantık güzel. Kodlarını saklamak isteyen firma parayı basıyor, ancak müşteriye satarken ekstra bedel gerektirmediği için ürünün fiyatına yansımıyor.

şimdi bu ön bilgilerden sonra gelelim en son updatei yaptıktan sonra başıma gelen olaya. Yeni Guard toolu (encoder) bazı eklentilerle geldi. Bunlardan security amaçlı "Obfuscation Level" dikkatimi çekti. Bu reverse engineering gibi bazı tekniklere karşı alınmış bir önlem ve 3 seçenek sunuyor size. "Encoding only", "Basic" ve "Strong". Elbette ki encoding only seçtiğinizde bu seçeneği kapatmış oluyorsunuz. Default'u Strong'da geldiği için ben de bu şekilde kullanmayı denedim ve bir de baktım ki arayüzden garip garip hatalar alıyorum (aynı hatalar Basic seçtiğinde çıkmıyor). Encode ettikten sonra fonksiyon ve classların isimleri bozuluyor, çeşitli hatalar alıyorum. Bunun üzerine tam Zend'de bir support ticket açacaktım ki knowledge baselerinde bu sorunun yer aldığını gördüm. Hemen copy&paste ediim buraya.

Alıntı
Running PHP files encoded with Zend Guard 4.0.0 causes an undefined function error
Article #208
Product: Zend SafeGuard Suite, Zend Encoder

Symptoms

After you encode a PHP project with Zend Guard 4.0.0, running the files causes an errors. E.g.:
Fatal error: Call to undefined function: some_string() in some_script.php
on line x
or -
Fatal error: Cannot instantiate non-existent class: my_A_Class in C:InetpubwwwrootmyPHP_appmyClass.inc.php on line 3350

Cause

This may happen as a result of encoding your PHP code using strong
obfuscation.
Encoding code with Strong obfuscation provides the most efficient
security coverage for PHP code.
In order to successfully obfuscate code there are several preparations
that have to be made. These preparations entail identifying functions
classes, methods etc. that should not be obfuscated called “Exclude
Preferences”.

Resolution

Exclude Preferences include entities that should not be obfuscated (Such
as function names, function calls, classes and class functions that should
not be obfuscated). Most entities can be identified through a preliminary
setup procedure, by using the Suggest feature that automatically
generates an initial list of entities that should be included in the
“Exclude List”.

The error you got probably indicate that you need to exclude the
function called/declared in the script that is specified in the error.

Due to the loose and non-strict nature of PHP, obfuscation can introduce situations of indirect calls (etc.) to functions/classes that will require some functions/classes to bear non-obfuscated names in the encoded version of the script. The process of finding those functions/classes includes iterations of encoding the code, running it and finding those "problematic" identifiers and "excluding" them, then retrying. Usually, only very small part of the code needs to be un-obfuscated.

For more information about this, please refer to the user guide.
* Bu linki yalnızca registered Zend kullanıcılarının ulaşabileceği bir alana link verildiği için kaldırdım *

The information in this article applies to

Zend Guard 4 and above.

Keywords

undefined function, encoded, error

Last Updated: 2006-05-31 13:00:28
Bu yazıyı okuduğumda fark ettim ki "Strong" seçtiğim zaman "Exclude Preferences" bölümü aktif hale geçiyor ve buraya projenizde kullandığınız fonksiyon ve class isimlerinizi eklemeniz gerekiyor!!! E tabii büyük projelerde manyaklık bu ancak adamlar neyse ki "Suggest" diye bir link koymuşlar. Yine de bu link her zaman işe yaramayabiliyor. Manual olarak da uğraşmanız gerekebiliyor.

PHP+Zend ile ilgili benim gördüğüm son gelişmeler bunlar. Security olayının dibne vururken basic userların da dibe vuracağını pek düşünmemişler bence. Eminim yüzlerce kişi aynı konuda ticket açmıştır knowledge base'i incelemeden. En azından default'u Basic'de gelebilirdi Obfuscation Level'ın. Başlarına iş açmış adamlar :)

PHP Enconding - Obfuscation Level

« Yanıtla #1 : 03.07.2006 13:53:51 »
Hızlı düğmeleri aç

GnoStiC


  • Ziyaretçi
lisansli bir Zend SafeGuard kullanicisi olarak, 3.6.0 kullaniyom.. sorun cikarmadi simdiye dek.. eski 3.x'lerde iken "optimizations"'dan dolayi cok sorun yasamistim, encoder'dan oldugunu ongormeyip, kodlarim arasinda dolanip durmustum.. o gun bugundur optimizations'i hep "none" tutuyorum..

birde su zend_optimizer.optimization_level 'i aciklayan bir metin bulsam..

PHP Enconding - Obfuscation Level

« Yanıtla #2 : 04.07.2006 02:57:17 »
Hızlı düğmeleri aç

disq

İleti: 93

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://www.oynasana.com/
cagrilacak fonksiyon adini dinamik generate ettirme gibi maymunluklar yapiyorsan normal, adamlarin dedigi de bu.

yani

Kod: [Seç]
void dunyayielegecir($p)
{
echo "su parametrelerle ele gecirilecek: ".$p."
";
}

$x="dunyayielegecir";
$x("parametreler");

ya da

Kod: [Seç]
$degiskenimcokguzel=14;
$a="degiskenimcokguzel";
echo "degiskenimin degeri soyledir boyledir: ".$$a."
";

yaparsan alet tabi ki calismayacak. buna benzer ornekler disinda oluyosa garip ama gercekten.

PHP Enconding - Obfuscation Level

« Yanıtla #3 : 04.07.2006 11:17:58 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
@Disq: Evaluation kullanımı da problem yaratıyor.

Örnek:
Kod: [Seç]
for($i = 1; $i < 10; $i++)
 eval(&quot;$a&quot;.$i.&quot;=&quot;.($i*2).&quot;;&quot;);
echo $a5;

Kısacası adamlar indirect calllar derken biraz genelleme yapmışlar. PHP'de daha birçok özel durum var problem yaratan.

PHP Enconding - Obfuscation Level

« Yanıtla #4 : 05.07.2006 15:46:27 »
Hızlı düğmeleri aç

spaztica

İleti: 1.493

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
azıcık off-topic olsa da, yine de zend encoding ile ilgili:

her ne kadar iş çalışmalarında kodların kapalı yapılmasını tercih etsem de, türk iş anlayışındaki "parasını veriyorsam herşeyi yaptırırım" mantalitesi sayesinde zend encoder'ı kullanmak çok mümkün olamamakta. oysa licensing, date-bomb gibi özellikleriyle ilk gününden beri ilgimi çektir zend. diğer bir sorun da işi kurduğunuz server yerli ise, alın başınıza belayı; netone'da daha yeni gördüm, zend dışında birçok 'standart' olabilecek modülün de yüklenmemiş olduğunu.

bu yüzden ilgilenenlere öncelikle kullanacakları environment'i test etmelerini öneririm. server'a zend yüklü değilse ve yükletemiyorsanız bırakın kalsın.

PHP Enconding - Obfuscation Level

« Yanıtla #5 : 06.07.2006 05:06:45 »
Hızlı düğmeleri aç

disq

İleti: 93

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://www.oynasana.com/
Alıntı
Originally posted by skate@Jul 4 2006, 10:17 AM
@Disq: Evaluation kullanımı da problem yaratıyor.

Örnek:
Kod: [Seç]
for($i = 1; $i < 10; $i++)
 eval(&quot;$a&quot;.$i.&quot;=&quot;.($i*2).&quot;;&quot;);
echo $a5;

Kısacası adamlar indirect calllar derken biraz genelleme yapmışlar. PHP'de daha birçok özel durum var problem yaratan.
[post=8046]Quoted post[/post]
[/b]

e tabi yapar, dedigimden biraz akli olan biri eval'in -bu sekilde kullaniminin- da sorun cikartacagini cikrtabilir diye ustune basa basa soylemedim. aklin nerede sıkeytim.

PHP Enconding - Obfuscation Level

« Yanıtla #6 : 06.07.2006 18:11:42 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
no comment...

PHP Enconding - Obfuscation Level

« Yanıtla #7 : 12.07.2006 09:20:28 »
Hızlı düğmeleri aç

disq

İleti: 93

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://www.oynasana.com/
Alıntı
Originally posted by skate@Jul 6 2006, 05:11 PM
no comment...
[post=8063]Quoted post[/post]
[/b]

alinmissindir da simdi :)

PHP Enconding - Obfuscation Level

« Yanıtla #8 : 12.07.2006 13:01:33 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Alıntı
Originally posted by disq+Jul 12 2006, 08:20 AM-->
QUOTE(disq @ Jul 12 2006, 08:20 AM)
QUOTE(skate @ Jul 12 2006, 12:01 PM)
Alıntı
Originally posted by disq@Jul 12 2006, 08:20 AM
\n\t\t\t\t\t\t\t\t\t
<' + '/div>\n\t\t\t\t\t\t\t\t\t