ทั้ง Yakpro-po และ PHP-Praser มีหลายเวอร์ชั่น เวอร์ชั่นหลังๆรองรับ PHP เวอร์ชั่นสูงๆ เช่น 7.x, 8.x แต่พอดีว่าผมทดสอบกับ Issabel 4.0 บน CentOS 7 ซึ่งใช้ php 5.4 จึงต้องใช้เวอร์ชั่นต่ำๆหน่อยครับ
ลำดับขั้นตอนการติดตั้งและใช้งานเป็นดังนี้ครับ
1. ดาวน์โหลดและติดตั้ง Yakpro-po เวอร์ชั่น 1.8.11
ทำบนเครื่อง Issabel เลย
- โค้ด: เลือกทั้งหมด
cd /home
wget https://github.com/pk-fr/yakpro-po/archive/refs/tags/1.8.11.tar.gz -O yakpro-po_v1.8.11.tar.gz
tar xvf yakpro-po_v1.8.11.tar.gz
mv /home/yakpro-po-1.8.11 /home/yakpro-po
chmod +x -R /home/yakpro-po
chown -R asterisk.asterisk /home/yakpro-po
2. ดาวน์โหลดและติดตั้ง PHP-Praser เวอร์ชั่น 1.4.1
ติดตั้งไว้ข้างในไดเร็คตอรี่ /home/yakpro-po เลยครับ
- โค้ด: เลือกทั้งหมด
cd /home
wget https://github.com/nikic/PHP-Parser/archive/refs/tags/v1.4.1.tar.gz -O PHP-Parser_v1.4.1.tar.gz
tar xvf PHP-Parser_v1.4.1.tar.gz -C /home/yakpro-po
mv /home/yakpro-po/PHP-Parser-1.4.1 /home/yakpro-po/PHP-Parser
chmod +x -R /home/yakpro-po/PHP-Parser
3. ไฟล์คอนฟิกของ Yakpro-po
ไฟล์ /home/yakpro-p/ yakpro-po.cnf
ปกติเราไม่ต้องแก้ไขคอนฟิกเลยครับ โปรแกรมตั้งค่าดีฟอลท์มาให้อยู่แล้วว่าจะทำอะไรบ้างตอนเข้ารหัส ส่วนมากก็ตั้งเป็น true ครับ
4. เริ่มการเข้ารหัส
เราสามารถบอกให้ yakpro-po เข้ารหัสได้ 2 แบบครับ คือ เข้ารหัสเป็นไฟล์เดี่ยวๆ หรือเข้ารหัสทั้งไดเร็คตอรี่ โดยโปรแกรมจะเข้ารหัสเฉพาะส่วนที่อยู่ภายใน <?php ... ?> นะครับ ถ้าอะไรที่อยู่นอกมันจะไม่เข้ารหัส เพราะมันไม่ใช่โค๊ด php ยกตัวอย่างเช่น ในไฟล์มีทั้ง <?php ... ?> และ text แต่มันอยู่นอก <?php ... ?> อะไรที่อยู่นอกจะไม่ถูกเข้ารหัสนะครับ ถ้าต้องการให้เข้ารหัสด้วยเราต้องเอาเข้ามาอยู่ใน <?php ... ?> ครับ
ข้อควรระวัง ถ้าในไดเร็คตอรี่มีไฟล์ php ที่มันต้องอิงค่าตัวแปรในไฟล์อื่นอีก การเข้ารหัสแค่ไฟล์เดียวจะเกิดปัญหาการหาตัวแปรไม่เจอครับ เราต้องเข้ารหัสทุกไฟล์ในไดเร็คตอรี่นั้นเพื่อให้ Yakpro-po จัดการเรื่องตัวแปร
ยกตัวอย่างเช่น ผมต้องการเข้ารหัสไฟล์ php ในไดเร็คตอรี่ /var/www/html/demo/*
4.1 เข้ารหัสบางไฟล์
- โค้ด: เลือกทั้งหมด
/home/yakpro-po/yakpro-po.php /var/www/html/demo/index.php -o /var/www/html/demo/index_encrypted.php
ไฟล์ index.php จะถูกเข้ารหัสกลายเป็น index_encrypted.php โดยไฟล์เดิมก็ยังอยู่ครับ ต่อไปก็ลองเข้าหน้าเว็บเรียก index_encrypted.php ถ้าแสดงผลถูกต้อง ก็ย้าย index.php ออกไปไว้ที่อื่นได้เลย และเปลี่ยน index_encrypted.php เป็น index.php ทำงานต่อไปได้เลย หากต้องการแก้ไขเราก็ไปแก้ไข index.php แล้วก็รันคำสั่งเข้ารหัสใหม่
4.2 เข้ารหัสทุกไฟล์ในไดเร็คตอรี่
- โค้ด: เลือกทั้งหมด
/home/yakpro-po/yakpro-po.php /var/www/html/demo -o /var/www/html/demo_encrypted
ไฟล์ไหนที่ไม่มี <?php ... ?> เลยก็จะไม่ถูกเข้ารหัสนะครับ จากนั้นลองเข้าหน้าเว็บดู demo_encrypted ถ้าทำงานได้ถูกต้องก็ย้าย demo ไปไว้ที่อื่น แล้วเปลี่ยน demo_encrypted เป็น demo ครับ
5. มาทดสอบกันครับ
ผมจะเข้ารหัสไฟล์ /var/www/html/demo/index.php ให้เป็น /var/www/html/demo/index_encrypted.php
5.1 ไฟล์ index.php ก่อนเข้ารหัส[/b][/size][/color]
- โค้ด: เลือกทั้งหมด
<?php
// ทดสอบตัวแปรและการคำนวณ
$item_price = 1500;
$discount_rate = 0.15; // ลด 15%
$customer_name = "Somchai";
function calculate_final_price($price, $discount) {
$total_discount = $price * $discount;
return $price - $total_discount;
}
// ทดสอบ Logic เงื่อนไข
$final_price = calculate_final_price($item_price, $discount_rate);
echo "--- ระบบคำนวณราคาสินค้า ---\n";
echo "ลูกค้า: " . $customer_name . "\n";
echo "ราคาปกติ: " . $item_price . " บาท\n";
if ($final_price < 1000) {
echo "สถานะ: ราคาประหยัด\n";
} else {
echo "สถานะ: สินค้าพรีเมียม\n";
}
echo "ราคาหลังหักส่วนลด: " . $final_price . " บาท\n";
//ทดสอบ Array และ Loop
$items = array("Apple", "Banana", "Cherry");
foreach ($items as $fruit) {
echo "Item: " . strtoupper($fruit) . "\n";
}
?>
5.2 รันคำสั่งเข้ารหัส
- โค้ด: เลือกทั้งหมด
/home/yakpro-po/yakpro-po.php /var/www/html/demo/index.php -o /var/www/html/demo/index_encrypted.php
ผลลัพธ์
- โค้ด: เลือกทั้งหมด
Info: Using [/home/yakpro-po/yakpro-po.cnf] Config File...
Info: Process Mode = file
Info: source_file = [/var/www/html/demo/index.php]
Info: target_file = [/var/www/html/demo/index_encrypted.php]
Obfuscating /var/www/html/demo/index.php
Info: [variable ] scrambled : 9
Info: [function ] scrambled : 1
Info: [method ] scrambled : 0
Info: [property ] scrambled : 0
Info: [class ] scrambled : 0
Info: [class_constant] scrambled : 0
Info: [constant ] scrambled : 0
Info: [label ] scrambled : 23
5.3 ไฟล์ /var/www/html/demo/index_encrypted.php
- โค้ด: เลือกทั้งหมด
<?php
/* __________________________________________________
| Obfuscated by YAK Pro - Php Obfuscator 1.8.1 |
| on 2026-02-24 10:46:31 |
| GitHub: https://github.com/pk-fr/yakpro-po |
|__________________________________________________|
*/
goto Lkr3g; J5mEW: function FTku0($fjFAl, $DRtEZ) { $RXruQ = $fjFAl * $DRtEZ; return $fjFAl - $RXruQ; } goto x0qOv; kjoNS: echo "\340\xb8\xa5\xe0\xb8\271\xe0\270\x81\340\270\204\340\271\211\xe0\270\xb2\x3a\x20" . $e2AhV . "\xa"; goto D7XOd; QTofD: if ($cfshD < 1000) { goto V2j81; } goto JAqGV; ZGP5R: foreach ($BMc_B as $WtDBW) { echo "\111\164\x65\155\x3a\40" . strtoupper($WtDBW) . "\xa"; zGBDP: } goto P19NT; JAqGV: echo "\340\xb8\252\xe0\xb8\226\xe0\xb8\xb2\xe0\270\x99\340\xb8\xb0\72\x20\340\270\xaa\xe0\xb8\xb4\340\270\231\340\270\x84\xe0\271\211\340\xb8\xb2\340\270\236\340\270\243\xe0\xb8\xb5\xe0\xb9\x80\340\270\241\xe0\xb8\265\xe0\270\xa2\xe0\270\xa1\12"; goto Xth6n; UNb7w: ceYfS: goto cMvSn; Lkr3g: $bch4V = 1500; goto XkN1T; Vf40b: V2j81: goto JjhsE; x0qOv: $cfshD = fTkU0($bch4V, $hJHTQ); goto ICIUr; XkN1T: $hJHTQ = 0.15; goto k3_0u; ICIUr: echo "\55\x2d\55\40\340\xb8\243\340\270\260\340\xb8\x9a\340\xb8\232\340\xb8\204\xe0\270\263\xe0\xb8\231\340\xb8\xa7\xe0\270\x93\340\270\243\340\270\262\340\270\x84\340\270\xb2\xe0\xb8\xaa\340\270\264\340\270\231\340\xb8\x84\340\271\x89\xe0\xb8\262\40\55\x2d\x2d\12"; goto kjoNS; xFE0Y: $BMc_B = array("\101\160\160\x6c\145", "\x42\141\156\x61\x6e\141", "\103\150\145\162\x72\171"); goto ZGP5R; D7XOd: echo "\340\270\xa3\xe0\xb8\xb2\xe0\xb8\x84\xe0\xb8\xb2\340\xb8\233\340\xb8\201\340\xb8\225\xe0\270\264\72\x20" . $bch4V . "\40\xe0\270\x9a\340\270\262\xe0\270\227\xa"; goto QTofD; k3_0u: $e2AhV = "\123\x6f\155\143\150\x61\151"; goto J5mEW; JjhsE: echo "\340\270\xaa\340\270\226\xe0\xb8\xb2\340\xb8\x99\340\xb8\xb0\x3a\40\340\270\xa3\340\270\262\xe0\xb8\204\340\xb8\xb2\xe0\270\233\xe0\xb8\243\340\270\260\xe0\xb8\xab\340\270\xa2\340\xb8\261\340\270\x94\xa"; goto UNb7w; Xth6n: goto ceYfS; goto Vf40b; P19NT: ugHeg: goto z544b; cMvSn: echo "\xe0\270\xa3\xe0\270\262\340\xb8\x84\xe0\270\xb2\340\xb8\253\340\270\245\xe0\xb8\xb1\340\270\207\xe0\xb8\xab\340\xb8\xb1\xe0\270\x81\340\270\252\xe0\xb9\x88\xe0\xb8\247\340\xb8\x99\xe0\270\xa5\340\270\224\x3a\x20" . $cfshD . "\40\xe0\xb8\x9a\340\xb8\262\340\xb8\x97\12"; goto xFE0Y; z544b: ?>
5.4 เปิดหน้าเว็บ
ไม่ว่าจะเป็น index.php หรือ index_encrypted.php หน้าเว็บก็แสดงผลลัพธ์เหมือนกันครับ
บทความที่เกี่ยวข้อง
Issabel IP-PBX ทั้งฟรีและดี
FreePBX IP-PBX ทั้งฟรีและดี
