เทคนิคการเข้ารหัสไฟล์ php ด้วย Yakpro-po และ PHP Parser

เรื่องทั่วไปที่ไม่รู้จะโพสต์หรือหาอ่านได้ในกระทู้ไหน หรือเรื่องที่อยากให้ผมเขียน

Moderator: jubjang

เทคนิคการเข้ารหัสไฟล์ php ด้วย Yakpro-po และ PHP Parser

โพสต์โดย nuiz » 24 ก.พ. 2026 10:33

ถ้าเราเขียนโปรแกรมด้วยภาษา php แล้วอยากจะซ่อนเทคนิค ฟังก์ชั่น ตัวแปรต่างๆที่เราใช้ ไม่ให้คนอื่นเอาไปแกะ เอาไปแก้ไขได้ เราก็ต้องเข้ารหัส PHP ครับ หรือที่เรียกว่า PHP Obfuscation & Encryption จริงๆก็แกะได้แหล่ะแต่ก็ต้องใช้เทคนิคขั้นสูงขึ้นมาอีกนิดนึง ไม่ใช่ว่าเปิดไฟล์ขึ้นมาแล้วก็เห็นเลย มีหลายเทคนิคที่ใช้เข้ารหัสภาษา php นะครับ บทความนี้ผมจะแนะนำวิธีที่ง่ายที่สุดและก็ฟรีด้วย เรียกว่า Obfuscation (ทำให้อ่านไม่ออก) ครับ ใช้ yakpro-po และ PHP-Parser สองโปรแกรมนี้ใช้คู่กันนะครับ

ทั้ง 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 ทั้งฟรีและดี
** งานเร่งด่วนติดต่อที่เบอร์ 085-161-9439 อีเมล์ iamaladin@gmail.com ไลน์ไอดี nuizvoip ครับ ผมหนุ่ยครับ**
nuiz
Diamond Member
 
โพสต์: 7343
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

ย้อนกลับไปยัง กระทู้ทั่วไป - ฝากคำถาม

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และ บุคคลทั่วไป 0 ท่าน

cron