刚开始见到这个思路是看到周大师用这个东西做的免杀,当时感觉这个想法很好,但是由于当时对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段,代码段及数据段,堆栈段的区别 时间:2012-11-21 10:0772人阅读 BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英 ...

  2. 在SuperSocket中启用TLS/SSL传输层加密

    关键字: TLS, SSL, 传输层加密, 传输层安全, 证书使用, X509Certificate SuperSocket 支持传输层加密(TLS/SSL) SuperSocket 有自动的对TLS ...

  3. WPF自定义RoutedEvent事件代码段

    今天在写东西的时候,发现常用的代码段里没有RoutedEvent的,因此,写了一个代码段,方便以后使用,顺便记录一下,如何做代码段. 1.在项目中新建一个XML文件,将扩展名修改为snippet. 2 ...

  4. JavaScript代码段整理笔记系列(二)

    上篇介绍了15个常用代码段,本篇将把剩余的15个补齐,希望对大家有所帮助!!! 16.检测Shift.Alt.Ctrl键: event.shiftKey; //检测Shift event.altKey ...

  5. 我们为什么要看《超实用的Node.JS代码段》

    不知道自己Node.JS水平如何?看这张图 如果一半以上的你都不会,必须看这本书,一线工程师用代码和功能页面来告诉你每一个技巧点. 都会一点,但不知道如何检验自己,看看本书提供的面试题: 1.     ...

  6. 《超实用的JavaScript代码段》—— 读后总结

    这本书全是代码,从头到尾跟着坐下来确实收获很多.比那些古板的教科书式的理解更多,不过书中并不是每个例子都做了,有的作者封装的太多,觉得看了收获不多,就没细看——比如模块渐变.有空好好学学这段的代码. ...

  7. Visual Studio常用小技巧一:代码段+快捷键+插件=效率

    用了visual studio 5年多,也该给自己做下备忘录了.每次进新的组换新的电脑,安装自己熟悉的环境又得重新配置,不做些备忘老会忘记一些东西.工具用的好,效率自然翻倍. 1,代码段 在Visua ...

  8. 使用eclipse开发Morphline的Java代码段

    背景:morphline是一个轻量级的etl工具.除了提供标准化的方法之外,还可以定制化的开发java片段.定制化的java片段会在加载时被作为一个独立的类编译,对源数据作处理. morphline关 ...

  9. 前端福利!10个短小却超实用的JavaScript 代码段

    JavaScript正变得越来越流行,它已经成为前端开发的第一选择,并且利用基于JavaScript语言的NodeJS,我们也可以开发出高 性能的后端服务,甚至我还看到在硬件编程领域也出现了JavaS ...

随机推荐

  1. VirtualBOX 虚拟机 FreeBSD配置

    pkg装virtualbox-ose-additions, 再将 Section "Device"Identifier "Card0"Driver " ...

  2. Hibernate在oracle中ID增长的方式

    引用链接:http://blog.csdn.net/w183705952/article/details/7367272 Hibernate在oracle中ID增长的方式 第一种:设置ID的增长策略是 ...

  3. 分形、分形几何、数据可视化、Python绘图

    本系列采用turtle.matplotlib.numpy这三个Python工具,以分形与计算机图像处理的经典算法为实例,通过程序和图像,来帮助读者一步步掌握Python绘图和数据可视化的方法和技巧,并 ...

  4. 扩展欧几里得算法(EXGCD)学习笔记

    0.前言 相信大家对于欧几里得算法都已经很熟悉了.再学习数论的过程中,我们会用到扩展欧几里得算法(exgcd),大家一定也了解过.这是本蒟蒻在学习扩展欧几里得算法过程中的思考与探索过程. 1.Bézo ...

  5. Python-生成器

    创建生成器 创建生成器需要两部步骤 定义一个包含yield语句的函数 调用第一步创建的函数得到生成器 def test(val,step): 2 print("函数开始执行") 3 ...

  6. 巧用 SVG 滤镜还能制作表情包?

    本文将介绍一些使用 SVG feTurbulence 滤镜实现的一些有趣.大胆的的动效. 系列另外两篇: 有意思!强大的 SVG 滤镜 有意思!不规则边框的生成方案 背景 今天在群里面聊天,看到有人发 ...

  7. 三分钟玩转微软AI量化投资开源库QLib

    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 微软QLib简介 微软亚洲研究院发布了 AI 量化投资开源平台"微矿 Qlib".Q ...

  8. C++并发与多线程学习笔记--基本概念和实现

    基本概念 并发 可执行程序.进程.线程 学习心得 并发的实现方法 多进程并发 多线程并发 总结 C++标准库 基本概念 (并发.进程.线程)区分C++初级编程和中高级编程 并发 两个或者更多的任务同时 ...

  9. 滴水逆向初级-C语言(二)

    2.1.C语言的汇编表示 c语言代码 int plus(int x,int y) { return 0; } void main() { __asm { mov eax,eax } //调用函数 pl ...

  10. Python是啥?为什么这么多职业人和学生就算报班也要学它?!

    嗨,大家好 这里是汐仔 首先我们先来考究一下近几年的头条和新闻. 1.早在2018年python就已经被纳入高考之一了 2.Python加入全国计算机等级考试,从2018年九月起新增为大学计算机二级考 ...