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 数字加密。以后会有更好用的版本。来保护广告开发人员的。
- 上一篇:vc++ tcp 通信源码
- 下一篇:PHP加密器源码二