Pbidea库关于PB核心代码保护的一个方案

Pbidea库关于PB核心代码保护的一个方案

我们写程序,总是希望自己的代码不容易被别人破解,有一定安全性。尤其是用PB写CS程序,如果代码被pbkiller之类的工具轻易反编译了,数据连接等信息、加密方法等就一止了然,别人可以直接使用这些信息连接到数据库,其影响不可估量。当然,也有人不在乎这些安全考量,那就不在此考虑之类,可以忽略本文。

一、pbidea库核心代码安全保护方案

1.给应用程序正常添加库文件。将核心代码单独放到一个pbl里面,库名称随意指定,这里假设我们指定的名称是panda.pbl。这里的“panda”就是关键字。panda.pbl里必须有个对象叫做 uo_panda,uo_panda有一个函数 of_init()。

2.正常写程序,把一些初始化代码,包括数据库连接、注意信息等放到 uo_panda 对象或相关对象里面,只要 uo_panda.of_init() 能访问到即可。注意不要在其他 pbl 或 pbd 里包含 panda.pbl里的对象,否则后面会把panda.pbl从库列表里移除,会导致其他对象编译失败。

3.全编译项目,生成 panda.pbd。然后重新设置库列表,把panda.pbl从库列表里移除。

类似 panda.pbl这样的库可以有多个。

4.写这样一段代码,生成加密文件

string ls_files[]

ls_files[1] = "panda\panda.pbd"

ls_files[2] = "panda\json" //json是一个utf8编码的JSON文件,在调用时会被自动解析到uo_panda.json对象里去。当然,你也可以没有这个,可选的。

ls_files[3] = "panda\dzz.png"

……..可以将更多需要打包到加密文件里的文件添加进来

uo_utils u

u = create uo_utils

u.packapplication( "panda.dat", "mykey", ls_files[]) //生成加密文件panda.dat

至此,我们得到了一个加密文件包,包含了我们的核心代码。

那么,我们怎么调用这个核心代码呢?其实很简单:

在主窗口的 open事件里,

uo_utils u

u = create uo_utils

u.initapplication("panda") //注意"panda"这个关键字

initapplication这个函数加载了加密文件包,并且调用了 uo_panda对象里的 of_init()函数 ,完成核心代码调用。

二、pbidea库核心代码安全保护方案的实现原理

本方案主要是利用aes 256位加密,key是随机生成,对库文件进行加密打包,几乎是防止了暴力破解的可能。

Initapplication函数首先是对文件进行解密,把内容读取到内存,在内存里进行解密。当PB程序执行时,分块进行读取,解密成代码后执行。所有PB的对象创建、代码运行,都在DLL内部完成,这也是pbidea库使用system library方式的优势。

考虑到可以利用目前各种调试工具,例如OllyDBG,进行调试跟踪 ,暂停关键代码执行,分析研究程序。Pbidea库做了一些反调试处理。发现自身处于调试环境中时,会拒绝执行应用功能,从而保护代码安全。即使是调试工具从内存中找到解密后的文件内容,那也只是局部内容,无法保存成整体的文件出来反编译。

                     大自在 QQ:781770313,QQ群:624409252

                                      2022年4月3日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值