专注于高品质PHP技术等信息服务于一体 [STIEMAP] [RSS]

百度提供的广告:
c#
当前位置:首页 > 技术文档 > c# >  > 
php 代码保护利器-清如许工作室代码保护器

PHP程序虽然,可以使用zend 加密,不过现在都可以轻易破解。

清如许工作室,发布PHP代码加密工具,现已开源核心代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Security.Cryptography;
using System.Threading;
using System.Linq;
 
namespace 代码混淆器_清如许专版
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        //浏览
        private void buttonBrowse_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog dialog = new FolderBrowserDialog();
            if (DialogResult.OK == dialog.ShowDialog())
            {
                textBoxWorkSpace.Text = dialog.SelectedPath;
            }
 
        }
        //开始混淆
        private void buttonStart_Click(object sender, EventArgs e)
        {
            //先判断
            if (!Directory.Exists(textBoxWorkSpace.Text))
            {
                MessageBox.Show("请先选择加密目录","提示信息");
                return;
            }            
            //递归混淆文件
            Dirs(textBoxWorkSpace.Text);
        }
 
        #region 加密算法
        /// <summary>
        /// 递归目录中文件
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        private void Dirs(string path)
        {
            foreach(string paths in Directory.GetDirectories(path))
            {
                Dirs(paths);
            }
            //比较php文件
            foreach (string file in Directory.GetFiles(path))
            {
                if ("php" == file.Substring(file.Length - 3).ToLower())
                {
                    //文件内容
                    string content = GetFileContent(file);
                    //加密变量名
                    if (checkBox1.Checked)
                    {
                        //查找所有变量名
                        List<string> all = new List<string>();
                        int flag = 0;
                        while (0 < (flag = content.IndexOf("$")))
                        {
                            int end = flag + content.Substring(flag).IndexOf(" ");
                            string temp = content.Substring(end);
                            string flagName = content.Substring(flag+1, end - flag-1);
                            content = (content.Substring(0, flag) + " #" + flagName + temp);
                            all.Add(flagName);
                        }
                        //去重复
                        all.Distinct();
                        //替换变量名
                        if (null != all && 0 < all.Count)
                        {
                            foreach(string flagName in all)
                            {
                                content = content.Replace("#" + flagName, "$" + Md5(Guid.NewGuid().ToString()));
                                Thread.Sleep(20);
                            }
                        }
                       
 
                    }
                    //加密数字
                    if (checkBox2.Checked)
                    {
 
                    }
                    //加密BOOL
                    if (checkBox3.Checked)
                    {
                        content = content.Replace("true", "(bool)\"" + RandomNum() + CreateFlag() + "\"");
                        Thread.Sleep(20);
                        content = content.Replace("TRUE", "(bool)\"" + RandomNum() + CreateFlag() + "\"");
                        Thread.Sleep(20);
                        content = content.Replace("false", "(bool)(int)\"0" + CreateFlag() + "\"");
                        Thread.Sleep(20);
                        content = content.Replace("FLASE", "(bool)(int)\"0" + CreateFlag() + "\"");
                        Thread.Sleep(20);
                    }
                    //写回文件
                    StreamWriter writer = new StreamWriter(file, false, radioButton1.Checked ? Encoding.Default : Encoding.UTF8);
                    writer.Write(content);
                    writer.Close();
                    MessageBox.Show("混淆已完成","提示信息");
                }
            }
        }
 
        /// <summary>
        /// 生成变量名
        /// </summary>
        /// <returns></returns>
        private string CreateFlag()
        {
            string arr = "QWERTYUIOPASDFGHJJKLZXCVBNM1234567890";
            string str = "QRU"+Guid.NewGuid().ToString().Replace("-","");
            Random rand = new Random(35);
            for (int i = 0; i < 50;i++ )
            {
                 str+= arr[rand.Next(35)];
            }
            return str.ToUpper();
        }
        /// <summary>
        /// MD5加密
        /// </summary>
        /// <param name="strPwd"></param>
        /// <returns></returns>
        public string Md5(string strPwd)
        {
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] data = System.Text.Encoding.Default.GetBytes(strPwd);//将字符编码为一个字节序列 
            byte[] md5data = md5.ComputeHash(data);//计算data字节数组的哈希值 
            md5.Clear();
            string str = "";
            for (int i = 0; i < md5data.Length - 1; i++)
            {
                str += md5data[i].ToString("x").PadLeft(2, '0');
            }
            return "QRU" + str.ToUpper();
        }
        /// <summary>
        /// 随机取数字非0
        /// </summary>
        /// <returns></returns>
        public string RandomNum()
        {
            string arr = "123456789";
            string str = "";
            Random rand = new Random(8);
            for (int i = 0; i < 50; i++)
            {
                str += arr[rand.Next(8)];
            }
            return str;
        }
        /// <summary>
        /// 读取文件内容
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        private string GetFileContent(string filePath)
        {
            StreamReader reader = new StreamReader(filePath, radioButton1.Checked ? Encoding.Default : Encoding.UTF8);
            string content = reader.ReadToEnd();
            reader.Close();
            //移除注释 //
            int flag = 0;
            while(0< (flag =content.IndexOf(@"//")))
            {
                string temp =content.Substring(flag + content.Substring(flag).IndexOf("\r\n"));
                content =  content.Substring(0, flag) + temp;
            }
            content = content.Replace("\r\n"," ");
            //移除注释 /* */
            while (0 < (flag = content.IndexOf(@"/*")))
            {
                string temp = content.Substring(flag + content.Substring(flag).IndexOf(@"*/")+2);
                content = content.Substring(0, flag) + temp;
            }
            return content;
        }
        #endregion
    }
}

 

可以实现功能,变量名加密,true flase 数字加密。以后会有更好用的版本。来保护广告开发人员的。