先上图,看你能做到什么程度?

上面每一种方法的具体原理详情以及实现都会在本专栏后续逐个讲到,请关注~~ 本博文只做大概的介绍以及优缺点,暂忽略细节

为什么要加密代码/程序呢?

商业活动中,你辛辛苦苦开发出来的软件,本来是你的饭碗,但是别人搞到了你的源码之后,做了一些修改,直接发布,变成了别人的摇钱树,这~~ Rockstar公司的大作GTA5这款游戏虽然达100个G大小,仅仅泄露了300行C++源码,就让R星坐不住了,可见程序保护的重要性。

1:时间限制

虽然这是最小儿科的保护的方式,但是也可以帮我们初步简历程序防护思维。
本地时间限制就是不联网,使用datetime库,依赖系统时间。
网络时间限制,需要联网通过NTP协议获取网络时间。

思路:设立一个过期时间戳,检测当下时间,如果当前时间大于设立时间戳,程序自动Crash.

优点:操作简单

缺点:太简单,有基础的人一眼能开出来。单独使用,基本没用

2:代码混淆

无论是用网站混淆还是用Pyobfuscate这个库混淆。效果都差不多。
直接看效果:

混淆前:

__all__ = []class Foo(Bar):class_public_var = 'class_public_var'_class_public_var = '_class_public_var'__class_private_var = 'class_private'def __init__(self, private):self.__class_private_var = privatedef public_method(self, arg):self.class_public_var = argdef __class_priv_method(self, arg):self.__class_private_var = argfoo = Foo()
foo.public_method()

混淆后:

__all__ =[]#line:1
class O0OO0O00000O0000O (Bar ):#line:3class_public_var ='class_public_var'#line:4_class_public_var ='_class_public_var'#line:5__OO000O00OOO00O0O0 ='class_private'#line:6def __init__ (O00OOOO000O0000OO ,O0OO0O000O0OOOO0O ):#line:8O00OOOO000O0000OO .__OO000O00OOO00O0O0 =O0OO0O000O0OOOO0O #line:9def public_method (O0O0000OO00O00OOO ,OO000O00OOO0OOOO0 ):#line:11O0O0000OO00O00OOO .class_public_var =OO000O00OOO0OOOO0 #line:12def __O0OO0O0O0000O00OO (O0OOOO0O0O0OOO000 ,OOOOOO0OOOOO0O0O0 ):#line:14O0OOOO0O0O0OOO000 .__OO000O00OOO00O0O0 =OOOOOO0OOOOO0O0O0 #line:15
OOOO00000O00O0OOO =O0OO0O00000O0000O ()#line:17
OOOO00000O00O0OOO .public_method ()#line:18

优点:降低可读性

缺点:可看出你的逻辑,只修改了类名,实例名,函数名,变量名,增加破解时间,仅此而已

3: 生成pyc文件

先看看把 print(“hello world”) 生成的pyc文件长什么样子:

610d 0d0a 0000 0000 b053 1964 1400 0000
e300 0000 0000 0000 0000 0000 0000 0000
0002 0000 0040 0000 0073 0c00 0000 6500
6400 8301 0100 6401 5300 2902 7a0b 6865
6c6c 6f20 776f 726c 644e 2901 da05 7072
696e 74a9 0072 0200 0000 7202 0000 00fa
0431 2e70 79da 083c 6d6f 6475 6c65 3e01
0000 00f3 0000 0000

优点:看起来好厉害

缺点:pyc是由Python文件经过编译后所生成的文件,目前已经有非常成熟的针对pyc反编译出py的包, 此加密效果比较感人

4: 生成pyd文件

.pyd 文件是由非 Python语言编写编译生成的 Python 扩展模块,是类似 .so .dll 动态链接库的一种 Python 文件。看看同样是print(“hello world”) 生成的pyd是怎样的?

pyd文件长得和pyc文件一样,但是大的多

同样的命令,pyd文件大小有195kb

优点:提升运行速度,加密效果好,推荐, 破解门槛很高,破解需要掌握逆向和Assembly,想得到源码无法反编译,只能反汇编爆破, 劝退99%的人

缺点:如果项目更新需要重新手动迭代。

5: C++代码生成dll文件供python调用(dll可以被vmprotect加密)

这一种方法太硬核,关键代码直接C++写,生成dll,Python再调用。
dll还能通过vmprotect这个虚拟机加密软件加密

优点提升运行速度同时基本无法破解

缺点:对加密者要求比较高~~熟悉python和C++两种语言,灵活切换

5: .py生成.exe后使用虚拟机加密软件加密

虚拟机加密有名的软件,vmprotect反编译,反汇编,加壳防护,底层汇编代码添加虚假跳转,垃圾指令,无法有效调试…

效果太过恐怖,劝退 吾爱破解 和 看雪论坛 两大专注逆向的很多大神…

优点:一键完成恐怖效果的加密

缺点:无

6: 验证系统

其实验证系统本质上来算并不算是加密的领域。基本上在商业化盈利或者是为了防止别人把软件再未经授权的情况下分享出去,使用的一种注册验证手段.

最典型的就是有些视频播放软件会绑定你的机器码,这属于硬件验证

还有的你购买游戏辅助时商家给你发的激活卡密,属于网络验证

总结

实际生产中,我们根据实际需求,选择性的混合以上的几种方法. 加密终究是手段,不是目的,过度的加密会显著降低程序运行效率速度,得不偿失。

更多内容第一时间更新,请关注公主号:HardcoreTech硬核科技

【Python代码/程序综合防护系列第1期】 各层次各方法简介相关推荐

  1. 博途中用的是c吗_S7-1500系列博途中使用SCL语言编程方法简介

    S7-1500系列博途中使用SCL语言编程方法简介 SCL:Structured Contorl Language,结构化控制语言. 在TIA博途软件中,默认支持SCL语言,在建立程序块时可以直接选择 ...

  2. python代码块缩进_有没有一种快速的方法来减少Python中多行的缩进? - python

    我是python编程的新手.我发现减少python中代码块的缩进非常烦人.例如,给出以下代码片段 for i in range(density): if i < 5: x, y = rnd(0, ...

  3. python代码计算字数_Python计算一个文件里字数的方法

    本文实例讲述了Python计算一个文件里字数的方法.分享给大家供大家参考.具体如下: 这段程序从所给文件中找出字数来. from string import * def countWords(s): ...

  4. 水仙花数python代码多种方式_水仙花数的三种解决方法(Python实现)

    先来了解一下什么是水仙花数.水仙花数是这样一个三位数:它的个位数.十位数.百位数的三次方之和,等于它自身.例如,153就是一个水仙花数,因为153=1^3+5^3+3^3.470也是一个水仙花数,因为 ...

  5. python代码实现从pdf或图片离提取文字的方法

    1.首先将pdf转换成图片 请参考:https://blog.csdn.net/weixin_42397303/article/details/80786232 2.再提取图片中的文字 https:/ ...

  6. S7-1500系列博途中使用SCL语言编程方法简介

    SCL:Structured Contorl Language,结构化控制语言. 在TIA博途软件中,默认支持SCL语言,在建立程序块时可以直接选择SCL语言. SCL语言类似计算机高级语言,如果你有 ...

  7. Python代码运行不够流畅?看大神如何多角度优化!

    更多深度文章,请关注:https://yq.aliyun.com/cloud 这是"Python代码性能优化"系列中的第一篇文章--环境设置.通过每个帖子,我将介绍一些Python ...

  8. 基于hadoop的商品推荐系统_[零基础入门推荐系统(1)]基于用户和基于物品的协同过滤方法(python代码实现)...

    1. 前言: 为什么会有该系列? 最近,打算写<零基础入门推荐系统>系列,为了系统地介绍推荐系统知识,以及加强基础的实践能力. 该系列将结合一些书籍,比如项亮的<推荐系统实践> ...

  9. java语言的编译器可以用python_jython实现java运行python代码

    Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现.最近的一个项目需要将python代码转换成java实现,所以用了一 ...

最新文章

  1. 机器学习 欧式距离及代码实现
  2. SQL Server 2008如何进行数据库同步?
  3. JavaScript实现cartesianProduct笛卡尔乘积算法(附完整源码)
  4. libevent源码学习-----事件驱动流程分析
  5. asp.net mvc+httpclient+asp.net mvc api入门篇
  6. DockerONE 干货 深入理解Docker容器和镜像
  7. 初识JAVA--foreach语句的应用
  8. ef 连接localdb_如何连接和使用Microsoft SQL Server Express LocalDB
  9. a = a + 1, a++, ++a ,a+=1区别在哪
  10. 黑苹果电池电量补丁_【黑苹果】用一次实战记录电池热补丁的编写方法
  11. 睡眠阶段分期——SVM和ELM分别与粒子群算法结合(function)
  12. 未root的情况下获取墨墨背单词的databases文件夹
  13. winhex使用教程(详细版)
  14. 变频器的工作原理与结构介绍
  15. Git学习使用方法总结(1)
  16. AUTOSAR架构深度解析
  17. facebook的network-connection-class(测量移动端网络质量)源码详解
  18. vue项目接入eslint、prettier、husky+lint-staged
  19. 用python写一个真心话大冒险GUI(tkinter)
  20. C语言 | 栈区空间初探

热门文章

  1. 华为鸿蒙小艺建议有什么用,华为小艺怎么用 华为小艺使用教程及隐藏功能推荐...
  2. 荣耀8 android8.0 2018,荣耀手机EMUI8.0+ Android8.0最新适配计划
  3. 剑网三体服服务器没显示,剑网3体验服安装说明及步骤 教你完成体服安装
  4. android 应用程序入口,小米系统 应用入口之争的另一种思路
  5. matlab如何设置横纵坐标轴的字体粗细
  6. 关于女性开发者的 8 大误解
  7. 唯品会按关键字搜索vip商品 API
  8. “他者”德意志(一):“进窄门”的德国AI
  9. 文字根据图片环绕 + 显示文字两行后省略号
  10. 用Python画一个生日蛋糕并写上生日祝福对象及生日祝福语