刚开始见到这个思路是看到周大师用这个东西做的免杀,当时感觉这个想法很好,但是由于当时对PE结构了解的少,看到二进制的东西就打怵,所以当时也没能成功的去实现这个思路,只是简单的记录了一下TLS的特性,直到最近在看核心编程的某一章,里面又提到了TLS,让我想起了当时没有成功实现的那个思路,所以就又尝试了一次,用了一下午实现了这个TEXT代码段加密的思路。

功能就是把PE文件的TEXT段进行加密,隐藏他的静态代码段特性,在运行的时候抢在main函数执行之前把代码段直接在内存里面解密(不然就崩溃了),从而达到静态代码隐藏功能。

先说下TLS(线程本地存储),这个东西平时用的并不多,分为静态TLS和动态TLS,主要是为了给程序做预处理以及实现存储隔离的思路,就是比如一个全局变量,N个线程同时访问,可以不上锁,大家通过TLS自己每人有一个自己的备份等等.然而今天用的不是这方面,今天要用的是静态TLS,静态TLS也有很多特性和功能,这里不废话,需要的可以自行搜索,就用到一点,TLS可以在main函数执行之前加载并且调用,也就是在干活之前先执行TLS然后在进入main函数做事情,这个就是重点,这样的话就可以通过先按代码段加密,然后在TLS部分进行代码解密,这样静态PE文件看上去就是一个text段被加密的了。

说下实现思路(细节并不固定,很多地方可以DIY).

(1)首先找到一个位置存自己的密码(用于加解密代码),再找一个地方存一个key,这个key用来标记这个PE文件是不是已经被我们加密过了,防止二次加密。

我是直接在DOS头里面存的,在1的位置存的一个KEY用于标记这个东西是不是被自己处理过了,这个地方并没有写成一个固定的值,不然感觉很容易暴露,写的是一个随机计算出来的值,最后我会根据这个地方的值是否满足自己的公式来确定这个文件是不是自己处理过的,当然这个地方默认是0x90这么写也容易暴露,后续可以换位置写。2的位置是用来存密码的,用于加解密代码段内容。

(2)然后就是在自己的代码段里面留一个用于确定TLS代码大体位置的值:

注意这个地方是用汇编写的,不要用变量或者其他,汇编写的目的是防止数据被编译到数据段里面去,这样写直接在TEXT段里面找这个序列,然后根据这个序列的位置大体确定TLS函数的位置,然后在向两边扩展一个长度,用于猜测TLS函数代码部分,防止加密的时候误伤了这部分代码。还有就是一定要注意一个问题:

上面两个是对应的,但是仔细观察里面的序列对应关系,...表示今天下午被这个地方坑了好一会。

当然这个key的序列可以不写死,毕竟写死之后也会留下特征,由于时间原因我是临时写死了,其实可以这样,自己写一个递增的式子,然后每次随机生成一个满足式子的序列,在校验的时候我们每次固定取出来长度,然后依次校验这段长度是否全部满足地推公式,这样来判断key的位置,之前我这么干过,当时因为写的是递减的式子,吃了不少亏,记住要递增,原因是 5 / 2 = 2  这种情况下在结合概率,很容易出现误判。

这样的话,我们把key序列写到TLS代码里之后整个代码段大体是这样样子:

红色的部分,标记的位置是通过key序列找到的TLS代码定位坐标,然后前面扩展0x200,后面扩展0x1000这样得到的区域是自己估算的TLS函数区域,这个部分是处于代码段里但是不能进行加解密的部分(0x200和0x1000这个可以自己根据实际情况定义),然后两端的部分可以通过XOR或者其他方式直接处理,在编译完成之后,通过辅助程序把编译好的PE文件加载到内存里,然后找到代码段,然后找到key序列坐标计算出保护区域,然后把这个代码段除了保护区域的其他部分全都加密,最后再把相关信息,比如加密的密码以及标记等填充在相关位置上(这里我是填在DOS头里面了),这样加密部分就搞定了(通过辅助程序),解密的话代码是直接写在TLS里面的,同样的思路,只不过的是自己所在的进程空间的地址而已。

然后看一个处理过和处理前的PE文件的大体区别:

存储标记和加密key

修改代码段读写权限

加密代码段

受保护的TLS函数段:

最终达到PE文件的代码段记性加密的思路,用在静态免杀和夹克程序里。

大体思路就是上面那些,很多细节和坑点都没有写,太多了不写了,对于这样的东西提示一个大家容易犯的通病,就是忽略:

1.了解思路

2.亲自实现出来

3.产品化,发版出去

这三个的区别,很多人以为一看,嗯,这个思路可以了。然后就拉倒了,其实你不一定能写出来,就算你写出来了,也不一定能达到稳定发版的水平,这个是平时最容易犯的错误(包括我),当然至于做到什么程度,要看小伙伴们的初衷及其需求,上面做的那些就是为了让小伙伴达到1的目的,至于2和3大家就自己实现把,只有去尝试写才能理解和发现这里面到底有啥坑点,总之我不会告诉别人 今天被一个SB错误坑了好几个小时,一直误以为是内存加密有问题。

传了一下下午写的一个实现代码,没有经过强测试,自己在家写着玩的。仅供大家思路参考:

http://download.csdn.net/detail/u013761036/9726645

TLS实现代码段加密相关推荐

  1. BSS段、数据段、代码段、堆与栈

    BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 ...

  2. 你应该学习的 20 个 Python 代码段

    作者丨Chaitanya Baweja 译者丨王文刚 策划丨万佳 Python 是一门优秀的编程语言.可读性和设计简单性是其广受欢迎的两个主要原因. 正如 Python 的禅宗所说: 美丽胜于丑陋. ...

  3. php为什么容易解密,PHP代码的加密和解密

    现在常见的对PHP代码进行加密的方式主要分为两大类: Ø 不需要加载php扩展的: Ø 需要加载php扩展的 第一种方式使用方便,不需要对php服务器进行配置,或加载其他模块,因此可以方便地部署在租用 ...

  4. 前端JavaScript代码混淆加密原理介绍

    因为JavaScript大都是运行在浏览器端,这就导致任何人都可以直接对网站的代码进行查看,如果代码没有进行任何处理就会导致直接暴露源码,他人便可轻而易举的复制你的劳动成果,但是由于没有纯粹的加密方案 ...

  5. 你知道吗?JS代码混淆加密,很有用!

    JS代码为什么要进行混淆加密? 因为:JS代码是明文. JS是种开放源码的编程语言, 无论是前端浏览器中的JS代码,还是在后端使用,如nodejs,js代码都是明文, 明文代码,他人可以随意查看.复制 ...

  6. DotNetty TLS 开启双向认证加密传输数据

    这里写目录标题 DotNetty TLS 开启双向认证加密传输数据 一.生成PFX证书 二.服务器端 2.1 引用Nuget: 2.2 创建处理请求类 2.3 注册DotNetty监听服务 三.客户端 ...

  7. 快过年了,给朋友来一段加密祝福会不会太秀?

    眼看又要过年了,学了编程的你,得用一个什么新花招给朋友们发点祝福呢? 天空飘来几个大字:用一段加密的祝福!(手动大字) 这还真是个不错的主意! 什么是加密祝福?就是长成这样的: 看,一般人看到这,估计 ...

  8. 收藏!PyTorch常用代码段合集

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Jack Stark,来源:极市平台 来源丨https://zhu ...

  9. PyTorch常用代码段合集

    ↑ 点击蓝字 关注视学算法 作者丨Jack Stark@知乎 来源丨https://zhuanlan.zhihu.com/p/104019160 极市导读 本文是PyTorch常用代码段合集,涵盖基本 ...

最新文章

  1. pyvmomi 实现VMware自动化
  2. JVM 垃圾收集器CMS相关参数
  3. ip复原Java,力扣:复原IP地址
  4. Redis高可用详解:持久化技术及方案选择
  5. 2020年2月全国程序员工资统计
  6. 计算机专业大学四年应该怎么过才有意义?
  7. 数组(array)(小谈)
  8. 题目1022:游船出租(结构体使用)
  9. java FileSplit类
  10. python爬虫股票数据分析判断股票好坏_教你用Python爬虫股票评论,简单分析股民用户情绪...
  11. 报告显示:数据屏蔽降低业务安全风险
  12. UMTS 与 WCDMA的区别
  13. android 颜色渐变扩散,Android 颜色渐变(gradient)的实现总结
  14. JAVA基础+集合+多线程+JVM
  15. 屏蔽拼多多广告信息的方法
  16. 软件测试实习生(3k)
  17. pyautogui实现微信自动回复和其他功能
  18. 程序员的三大优点:懒惰、急躁和傲慢
  19. 一文帮你分析外贸收款难问题
  20. MFC在查找预编译头时遇到意外的文件结尾

热门文章

  1. 阿里云ECS主机自定义进程监控
  2. SpringMVC 类扫描原理解析
  3. 恢复SQL Server被误删除的数据
  4. js weibo api
  5. 关于服务器返回信息的Unicode转码的方法
  6. 新入门的小白,整理一下特别简单实用的div+css兼容性的问题。
  7. 关于模板页调用js的问题
  8. python 正则表达式基础
  9. 组队开发第二周第一次会议
  10. 发现自己的BLOG被转载了