分析发现一个pb的bug可以使得pbkiller无法得到任何代码
//global function integer lf_count ()
int li_i
……一直到
int li_i
int li_i
int li_i
int li_i
int li_i
return
本想测试一下pbkiller对代码行数有没有限制发现pb在变量数超过行后保存就会出错但是重启IDE又能插入一个可以保存但是插入第二个变量就不行了我用这种方法最大可以插入到int li_i现在我们先写个编译和调用这个函数都没错然后多申明一个比如int li_i采用增量编译后主调用程序中返回(注意不能进行全编译否则报内存只读错误)这倒没什么价值价值在于这样编译后的pbdpbkiller无法反编译出任何代码大家可以测试一下如果用作关键点计算或者返回几个关键参数倒是蛮好的!不过工程project也只能用增量编译否则IDE报错退出
pbNI的运用使得关键代码可以融入pbd但是pbkiller又反不到其他调式工具也单独调试不到具体未测试过见黄国畴的blog有实例
编译后的文件假设包括一个mainexe和mainpbdsecondpbd用ue打开mainexe在最后部分RTL标志以上有一个dat*标志找到其中的pbd列表修改一下如mypicjpg然后把相应的pbd文件改改名字效果也挺搞笑的
做个exe(不是主程序)其作用只是依次调用比如exe调用exeexe又去调exe最后调用mainexe各步骤的调用都带参数并且这个exe还执行部分文件操作和数据处理或者部分认证和文件校验等然后最后调用mainexe而且带参数这些参数隐蔽地作为一些地方的数据也可以在exe执行过程中将一些数据写入sql中或者文件中如此使用倍增难度的方式来为难pj者
还是那句话不要让pbkiller直接看到你的源码(给破解者一个假的pbd是个好办法)保护自己的软件一年以上给客户一个必须要掏钱的理由!
只要能防止静态下反编译到你的pbd(一般破解者就是直接找跟主文件同名的pbd来编译看看是否能找到注册算法根本不会在意你的pbd到底是不是正确的!!!也不会在意你对他的欺骗)你就有%的希望保护到自己的软件如果你的软件受众很少的话
有兴趣可以参考《加密与解密》P页的几个对软件保护的建议(*见网上有就摘抄过来)
本节将给出关于软件保护的一般性建议这些都是无数人经验的总结程序员在设计自己的保护方式时最好能够遵守这里给出的准则这样会提高软件的保护强度
()软件最终发行之前一定要将可执行程序进行加壳/压缩使得解密者无法直接修改程序如果时间允许并且有相应的技术能力最好是设计自己的加壳/压缩方法如果采用现成的加壳工具最好不要选择流行的工具因为这些工具已被广泛深入地加以研究有了通用的脱壳/解压办法另外最好采用两种以上的不同的工具来对程序进行加壳/压缩并尽可能地利用这些工具提供的反跟蹤特性
()增加对软件自身的完整性检查这包括对磁盘文件和内存映像的检查以防止有人未经允许修改程序以达到破解的目的DLL和EXE之间可以互相检查完整性
()不要采用一目了然的名字来命名函数和文件如IsLicensedVersion()keydat等所有与软件保护相关的字符串都不能以明文形式直接存放在可执行文件中这些字符串最好是动态生成
()尽可能少地给用户提示信息因为这些蛛丝马迹都可能导致解密者直接深入到保护的核心比如当检测到破解企图之后不要立即给用户提示信息而是在系统的某个地方做一个记号随机地过一段时间后使软件停止工作或者装作正常工作但实际上却在所处理的数据中加入了一些垃圾
()将注册码安装时间记录在多个不同的地方
()检查注册信息和时间的代码越分散越好不要调用同一个函数或判断同一个全局标志因为这样做的话只要修改了一个地方则全部都被破解了
()不要依赖于GetLocalTime( )GetSystemTime( )这样众所周知的函数来获取系统时间可以通过读取关键的系统文件的修改时间来得到系统时间的信息
()如果有可能的话可以采用联网检查注册码的方法且数据在网上传输时要加密
()除了加壳/压缩之外还需要自己编程在软件中嵌入反跟蹤的代码以增加安全性
()在检查注册信息的时候插入大量无用的运算以误导解密者并在检查出错误的注册信息之后加入延时
()给软件保护加入一定的随机性比如除了启动时检查注册码之外还可以在软件运行的某个时刻随机地检查注册码随机值还可以很好地防止那些模拟工具如软件狗模拟程序
()如果采用注册码的保护方式最好是一机一码即注册码与机器特征相关这样一台机器上的注册码就无法在另外一台机器上使用可以防止有人散播注册码并且机器号的算法不要太迷信硬盘序列号因用相关工具可以修改其值
()如果试用版与正式版是分开的两个版本且试用版的软件没有某项功能则不要仅仅使相关的菜单变灰而是彻底删除相关的代码使得编译后的程序中根本没有相关的功能代码
()如果软件中包含驱动程序则最好将保护判断加在驱动程序中因为驱动程序在访问系统资源时受到的限制比普通应用程序少得多这也给了软件设计者发挥的余地
()如果采用keyfile的保护方式则keyfile的尺寸不能太小可将其结构设计得比较复杂在程序中不同的地方对keyfile的不同部分进行复杂的运算和检查
()自己设计的检查注册信息的算法不能过于简单最好是采用比较成熟的密码学算法可以在网上找到大量的源码
编辑推荐
ASP NET开发培训视频教程
Microsoft NET框架程序设计视频教程
[] []