当前软件发展的方向 主要是 软件自身的保护方式被破解,软件bug和漏洞的fix,以及web程序的加密问题,对于web我不多讲因为我们的主题并不是web软件
在保护方面从最早的磁盘保护,到现在的 花指令,反跟踪,解释器,等一系列的方法防止软件被破解
其目的就是增加Cracker的时间劳损..但是在熟练的破解人员和逆向人员面前都显的那么苍白无力,并且在强大的动态调试和静态分析工具的辅助下比如OD,IDA,WinDbg等软件…
所以软件保护应该采用 多发展应用,和浑浊代码.已经无限可能性,比如1-2-1-3-4,这个样子,也可以分析也可以破解,但是时间呢?在商业软件和当今电脑处理速度下,增加几十M不是什么问题,但是对于软件破解者呢?我每天浑浊和jmp都是有意义的,你需要分析海量的数据,这样就给你破解的时间增加了,造成了时间的浪费,最终导致你破解毫无意义,因为我下个版本已经出来了!其实密码学算法也是这样的,你可以破解,但是你需要NO(N=年天,o等于小时)平方的时间,等你破解出来,我这个矩阵算法已经不用了,换另外一个矩阵了,你破解还有什么用呢? 在这个方面显然,算法作者比较聪明意识到了,不被破解的可能性的微弱….
所以我们所能做的只有增加成本呢…..
而我们破解者,对付这种加密也是很苍白无力的,但是我们可以团队化,比如一个人A代码,一天500行,十个人也就是5000行,但是无形中增加我们的成本问题.但是还是可以破解的…..
漏洞方面是这里我们不谈 本身功能逻辑错误的bug..这个是显而易见的..
我们谈一谈 合法性本身的漏洞,在编译时候因为编译器优化的问题,导致产生的汇编代码流程错误,而产生的漏洞,比如大家会发现debug版本的和free版本 存在的问题 debug版本可以执行,free不可以,这就是因为优化的原因和内存泄漏…
针对这些,厂商一般使用 代码审计 工具,
微软的C/C++的代码分析工具(也被称作PREfast),已经集成到静态代码分析器中,在编译的过程中就能够发现安全和编码的缺陷
以及黑盒测试工具 Com Raidor ,SPIKE等
软件安全的分类和发展方向
1. 破解
破解和反破解是矛与盾的事情,软件加解密的技术,也是逆向和反逆向的PK,在未来的软件安全发展方面,应该采取的是多种应用,
语言
.net方面 因为设计的框架和理念,导致很容易得到源码…
对于非解释语言编译的程序,逆向高手,可以很快的逆向成C代码,而且在工具的辅助下..可以直接获取核心代码.导致软件的脆弱性增加了很多
在保护方面也 从反跟踪 到虚拟机,核心就是把汇编指令转换成 虚拟机的微指令代码!
防止被时间反编译,增加软件逆向的时间和利益的损失减少
2. 漏洞
畸形的文档
文档本身其实只是一个数据文件,但是当我们的解释器,在解释文档的时候很可能就会触发漏洞
变形的数据
在C/S架构的程序上,一般都会使用tcp/ip 或udp等协议进行通讯,在正常的数据通讯的时候不会发现什么问题,但是当传送变形数据包的时候,C端或者S端就会发生错误,导致漏洞的产生
程序本身函数的漏洞
比如我们使用 拷贝字符串函数时候 函数不会检查你拷贝的多少函数,而是一直拷贝,不会检查缓冲器的问题,所以就导致的字符的溢出,根据栈的结构,可以改变返回的地址,和控制EIP造成执行构造的shellcode甚至可以把数据当作指令来执行
总结。
在未来的软件安全方面,不仅仅是技术的比拼更是团队合作方面的熟悉度比拼,因为在以后的软件自身厂商明白不可能不会被破解,所以就进行时间消耗大战,从而对破解的个人产生强压,但是厂商自身,也会增加一个成本的问题,所以谈起所论就是“钱”的问题了….
在当今就业形势下,找工作成了大家的心病,但是作为安全厂商,对人员的招聘还是比较头痛,因为行业本身特殊的原因,造成了人员的紧缺,因为学校教的东西普遍理论化,或者根本不答边,毕业生必须经过培训 才能进行 开发和分析工作,这就导致了成本问题,也就导致了,为什么大学生抱怨别人比你学历低,凭什么赚钱比你多,学历只能代表你上了学,毕了业,其他无从谈起.而学习过破解和病毒分析的就可以很快上岗,所以雇主当然会选择短期回报,长线培养这种人才广招社会人才而不要求学历~,而不是去学校大规模招聘的原因之一
就业
1. 病毒分析
加壳、脱壳
熟练使用softice等调试工具;
C++程序设计、常用算法、数据
熟悉x86系列汇编语言。
熟悉windows API,并有一定C语言编程基础。
对反病毒、反汇编有强烈兴趣。
4k-6k
2. 漏洞分析
1. 丰富的网络攻防经验。
2. 熟悉漏洞利用原理。
3. 熟练使各种安全工具。
4. 良好的英文阅读及理解能力。
8k-15k
3. 保护软件开发
VC或delphi
80x86汇编
实现虚拟机技术
精通反调试
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)