扭曲变换加密

基于Arnold变换的图像加密原理与Matlab实现详解 图像加密是信息安全领域的重要分支,其核心原理在于破坏图像原有的空间相关性,使其在视觉上变得不可识别。Arnold变换,又称猫脸变换,是一种经典的几何置乱方法,它通过简单的矩阵运算和模运算,迭代地改变图像像素的位置,从而实现加密效果。该技术因其数学原理清晰、实现直观,常作为理解图像加密基础概念的入门案例。从工程实践角度看,Arnold变换可与混沌系统结合,通过引入Logistic映射等伪随机序列进行像素值扩散,从而增强安全性,弥补其仅置乱不混淆的局限性。本文以Matlab为工具,详细解析了Arnold变换的数 阅读详情
作者:刘涛涛 me@liutaotao.com
网址:http://liutaotao.com/nqby.txt

一,一般来讲,加密就是加壳

我们经常考虑,一个可执行文件,怎么样加密才能安全呢?

一般用的手段,是加壳。加壳工具的工作原理,就是把可执行文件的代码与
数据都进行加密变换,作为数据存放。生成的目标文件入口代码是加壳软件
准备好的防跟踪代码。经过漫长的防跟踪代码后,会把原始可执行文件的代码
与数据段恢复,然后跳转到原来的入口处,继续运行。这样做的缺点是,不管
你的加密多强,防跟踪代码多牛,只要一运行,在内存中就全部恢复了。只要
把内存映象dump下来,反汇编一下,就清清楚楚了。甚至有工具可以直接把
dump下来的内存映象存为可执行文件。这样加密就彻底失败了。

简单加壳是不安全的,这大家都知道了。我们一般把上述简单的加壳方式叫“压缩壳”。
所以现在的加壳软件都在上述“压缩壳”的基础上,多做了一些工作,比如:

* 防止内存被 dump 。这实际上是不可能做到的。因为Windows操作系统就不是
一个安全系统,你怎么可能做到内存不被dump呢?曾有一个壳,我用了多种方法
dump都不成功。但最后还是找到了一个方法成功dump了。我这才惊叹dump原来有
这么多种方法,真是防不胜防。

* 修改文件入口代码。因为一般软件都是用常用的几种编译器编译生成的。如果
加壳软件知道你是用什么编译器编的(这很容易),把入口代码破坏掉,用另外一
段功能类似的代码替换它。这样dump下来的代码就比较难找到正确的入口,直接
被存为一个EXE的可能性就小多了。但还是会被反汇编的。

* 还有一些加壳软件,支持对一个或几个重点函数加密。甚至使用了虚拟机。但他们
都只能重点加密少数几个函数,不可能把所有函数都加密。而且对这个函数还有很多
要求。这可以想象。如果用汇编写一个函数,不加ret它可能连函数结束地址都找不到,
怎么可能加密呢

******

尽管加壳软件可以使用以上多种技术防止被跟踪,分析,还原,但我认为,它们仍然没
没摆脱“壳”的这个中心思想。以上的这些技术不过是在“壳”的大前提下所做的一些
小的插曲。它仍然是不安全的

二,扭曲编译的思想

做个比喻。加壳保护就好比是你桌上有宝贝,为了保护它,你在屋外围了一圈铁丝网。只
要有人突破了这道铁丝网,进入你的屋子,一眼就看到了桌上的宝贝。这当然不安全。

重点函数加密的思想,就好比是,我屋外围了一圈铁丝网,我还把宝贝放进了
保险箱里。如果有人突破了铁丝网,进入屋子,一眼就看到了保险箱。虽然保险箱不会被轻
易打开,但他如果把保险箱搬走,慢慢分析呢?这也不够安全。

最安全的,就是进了屋子,却什么也找不着。没有目标,这才是最让人头疼的。

现在的编译器,都是追求生成高效率的运行代码。这些代码的模式基本一成不变。有经验
的程序员看反汇编代码简单跟看源码一样,毫无秘密可言。如果我们有一个编译器,它的编译
目标不是为了高效,而是为了防止被读懂,那该多好啊!我有C++源码,我能看懂。一旦编译,
谁也别想通过反汇编看懂我想做什么,或者很难。遗憾的是,这样的编译器还没有。

如果我们自己编一个这样的编译器呢?不现实。工作量太大了。即使是找一个开源的C++编译器
来改工作量也不得了。

直接做一个会加密的编译器行不通。而一旦编译连接生成EXE后,就只能加壳了。难道就没有办法
了吗?我想出一个主意,就是加密编译的中间文件OBJ,输出ASM文件,用ML编译成OBJ,然后再link连接!

这个方法有几个好处:

* OBJ文件格式相对简单。不象处理C++源文件那么工作量大。
* OBJ文件中保留了很多源文件的信息,比如符号名,代码与数据,标号等等。方便加密。这些信
息很多在LINK的过程中被丢掉了。所以LINK为EXE后再处理就极不方便了。
* 这是一个全新的思想!对代码的加密已经不限于加壳,而是加密每一个函数,每一条指令。再也
没有一目了然的汇编了。
* 可以很容易设定加密的强度。可以根据需要,对一部分代码轻量级加密,而对另一部分代码重点
加密。
* 可以嵌套加密。重复使用几种加密变换,无限制地使代码膨胀
* 因为是加密OBJ文件,所以不管DLL还是EXE都可顺利加密,驱动程序也可以

基于这个思想,我们的加密软件就要出台了!我们暂时叫它扭曲变换器 1.0

三,扭曲变换器

有了思想,就开始动手编码。原以为OBJ文件格式是有文档的,工程进度应该很快。没想到其中还是
有很多内容需要考虑。每每说这是最后一个问题,解决了就没事了,却总是后延。前前后后居然写
了差不多半年时间。

主要遇到的技术问题:
* 汇编器ML会把所有的代码放到一个段中,这是不可以的。CL则通常是一个函数一个段。
* 汇编器ML不能生成 COMDAT 段。尽管文档中讲它支持COMMON,但加了这个关键字无效果。
* 汇编器ML不支持 WEAKEXTERN
* 汇编器ML只支持 defaultlib 这一个 drectve 关键字,其它 export, include 等关键字不支持.

总之,CL编译的OBJ其中有很多属性是ML无法生成的。微软的masm真的该升级了。

还有一些问题:
* 分不清代码与数据。数据段中肯定是数据,但代码段中却有可能不是代码,是数据。这时如果你试图
反汇编它,就会出错。
* ?????

不管怎样,这些问题都一一解决了(别问我怎么做的)。

采用的代码扭曲方法:

* 用 JMP 把代码打乱。这已经不是什么新鲜的招数了,但它依然有效。

* 用 JMP 把多个函数缠绕在一起。这样可以让分析者找不到函数从什么地方开始,到什么地方结束。

* 把 call 改掉。破解者对 call 是极敏感的,这举可以让他找不到一个 call。比如,我可以把
        call sub1
    改为:
        mov eax, offset sub1 + 3
        push offset @1
        sub eax, 3
        jmp eax
    @1:
* 把 ret 改掉。破解者对 ret 是极敏感的,这举可以让他找不到一个 ret。比如,我可以把ret写作
        push ecx
        mov ecx, [esp+4]
        add esp,8
        jmp ecx
* 改条件跳。条件跳也是极敏感的指令,比如我们可以把
        cmp reg1, reg2
        jge L_DST     
    L_NEXT:
写作:
        push eax
        mov eax, reg1
        sub eax, reg2
        shr eax, 1fh
        neg eax
        and eax, L2 - L1
        add eax, L1
        jmp eax
    L1:
        pop eax
        jmp L_DST
    L2:
        pop eax
    L_NEXT:
再看这个,你能看懂是什么意思吗
push offset @@L - offset L_3 + 23h
jmp L_1
L_2:
        jz L_3
        ret 4
L_3:      
        add dword ptr [esp+4], offset L_3 - 23h
        add esp,4
        ret

L_1:
call L_2
        ...
        这里出现了call和ret,但又不是一般所期望的那种。这里的call不代表你发现了一个函数调用。
这里的ret不代表是一个函数的结束。

* 使用堆栈代替寄存器。比如:
        MOV     EAX, DWORD PTR [ECX+0AD8h]
        PUSH    EAX
        MOV     ECX, DWORD PTR [EAX]
可以写作:
        PUSH    EAX
        PUSH    ECX
        MOV     EAX, DWORD PTR [ESP]
        ADD     EAX, 0AD8h
        MOV     EAX, DWORD PTR [EAX]
        MOV     DWORD PTR [ESP+04h], EAX
        PUSH    DWORD PTR [ESP+04h]
        MOV     EAX, DWORD PTR [ESP]
        MOV     DWORD PTR [ESP+08h], EAX
        MOV     EAX, DWORD PTR [ESP]
        MOV     EAX, DWORD PTR [EAX]
        MOV     DWORD PTR [ESP+04h], EAX
        MOV     EAX, DWORD PTR [ESP]
        MOV     ECX, DWORD PTR [ESP+04h]
        ADD     ESP, 08h
你能看懂吗?很明显,这个变换是不可逆变换。因为它本来使用了哪个寄存器,已经没有办法知道了。

* ……还可以想出很多扭曲变换的方法。化繁为简只有一种方法,化简为繁可以有无穷多种方法。

还有一些功能:
* 在C语言中,使用 #pragma code_seg(".code$curve_NoChange") 来指示后面的代码不做任何加密。因
为有时候有些代码含有大量的循环,加密它会严重影响效率。

* 在C语言中,使用 #pragma code_seg(".code$curve_Max") 来指示后面的代码重点加密。比如后面是
与注册算法相关。

现在的扭曲变换器我叫它1.0版,已经非常稳定了。我用它把VC6的库文件LIB都处理了一遍,再用LIB.exe工具
写回LIB文件中,我们就有了一套加密后的库。如果用这套库来LINK你的软件,分析者就很难从汇编中找到哪
个是printf哪个是strcpy,IDA也无法识别MFC静态链接的库函数了。能把VC6的库都加密一遍不出错,我
相信它已经很强壮很稳定了。

用它来加密我们做的一个共享软件,就再也没人写出注册机了。去读懂大量的经过以上变换的代码是不可
想象的。但还是有人暴破了,真佩服他。我会不断丰富加密方法,让暴破者都放弃。

现在的扭曲变换器还只支持VC6使用的COFF格式的OBJ,下一步,要分析一下VS2005的OBJ格式,尽快支持它。

我经常喜欢反汇编一下,分析点什么东西。我有不少朋友也经常在做反汇编或破解的工作。我不希望扭曲变换
器在网上一公布,被广泛使用。有一天我想分析点什么却无法下手。所以,这软件暂时还不提供下载,也不出售。
如果你有一段小程序想测试一下,可以把OBJ发给我,我加密一下给你。如果你有一个商业项目需要安全地加密,
也可以谈谈。

附上一个为CCG写的crackme,用扭曲变换器加密,带部分源码,供参考。
        http://liutaotao.com/CrackMe.zip


        LiuTaoTao        2006.7.7 
Arnold变换:图像加密与数字水印中的核心置乱技术 图像加密与数字水印是多媒体信息安全领域的关键技术,旨在保护数字内容的版权与隐私。其核心原理在于通过特定算法对图像数据进行变换,使其在视觉或统计上难以识别,同时确保授权用户能无损恢复。Arnold变换作为一种源自混沌理论的经典图像置乱技术,通过简单的矩阵运算和模运算迭代,实现对像素位置的可逆重排,从而破坏图像的空间相关性。这一特性使其在技术价值上,既能作为图像加密的预处理步骤,快速增强加密效果,又能作为数字水印的预处理手段,将水印信息均匀分散,显著提升水印的鲁棒性和不可见性。在应用场景中,Arnold变换常与 阅读详情

相关推荐

基于Arnold变换的图像置乱加密技术实战

图像置乱作为信息安全与数字内容保护的重要手段,广泛应用于图像加密、版权保护与敏感数据隐藏等领域。其核心思想是通过特定的数学变换或算法,将原始图像的像素位置进行重新排列,使图像视觉信息变得不可识别,从而实现对原始内容的有效遮蔽。在众多图像置乱方法中,Arnold变换因其良好的混沌特性、可逆性以及周期性,成为学术界和工程实践中备受关注的技术路径。二维猫映射的标准形式源自经典混沌动力学模型,命名源于Arnold曾用一只猫的形象演示该变换对图像的扭曲效果。

weixin_29009401的博客 1033

扭曲变换加密 【目前防止软件被破解最好的方法】

 扭曲变换加密作者:刘涛涛 me@liutaotao.com网址:http://liutaotao.com/nqby.txt一,一般来讲,加密就是加壳我们经常考虑,一个可执行文件,怎么样加密才能安全呢?一般用的手段,是加壳。加壳工具的工作原理,就是把可执行文件的代码与数据都进行加密变换,作为数据存放。生成的目标文件入口代码是加壳软件准备好的防跟踪代码。经过漫长的防跟踪代码后,会

FreeXploiT 3736

Computers & Security 投稿实战:从零到一详解避坑指南

本文详细解析了向《Computers & Security》投稿的全流程避坑指南,包括ORCID账号注册、文件格式统一、Editorial Manager®系统操作技巧等关键步骤。特别强调了cover letter撰写、Declaration of Interest Statement准备以及PDF生成后的检查要点,帮助研究者高效完成投稿流程。

weixin_29228203的博客 676

KCTF-CCG CrackMe crypto 1.0

到这里,逻辑分析完了,破解思路就是先计算Name的MD5,然后将前8个字节进行RC4解密,得到未编码的serial的前8字节,再根据已知e,n,c求出第9字节开始的数字,最后进行base64编码。sub_4088A0就是未修改的MD5Transform,可以看出,sub_408340和 sub_4085F0计算了Name的MD5.提示成功了,但运行不了,拖入IDA,发现逻辑正常,估计是加了保护,也懒得看,直接分析源码。之后判断MD5的前8个字节,与Serial解码后的前8个字节RC4加密后相同。

geesehoward20000的博客 909

GEE开发之Landsat8计算MNDWI和数据分析

上一篇博客介绍了landsat8计算NDWI以及数据的获取,这次介绍MNDWI(改进的归一化差异水体指数)。

等待着冬天的风的博客 8440

YOLOv8改进002:添加小目标检测头(小目标检测大量涨点)

YOLOv8 目标检测算法改进之添加小目标检测头,亲测在小目标检测的数据集上有大幅度的涨点效果(mAP直接涨了 0.04 左右)。

m0_46496775的博客 9878

记:破解MFC小程序02

在很久很久以前,有几个加密过的小程序 然后,他们被我破解了…. 现在我们来破解第三个小程序打开之后的页面是这样的感觉和上一个程序一样是输入正确密码才可以点亮“确定”按钮,运行程序后发现,这九个按钮只有 0 和 1这两个状态,那么肯定也是通过匹配正确密码来达到点亮“确定”按钮的目的的那么我们就像上次一样找到关键的几个密码就可以了还是找特征码,怎么找特征码我在破解MFC小程序01中已经详细说明了,不

DSQSYSPA的博客 834

华为HCIP-001:PPPOE配置模拟实验

华为HCIP01:PPPOE配置模拟实验 实验环境 pppoe-client上面的接口信息 [AR1]dis ip interface brief *down: administratively down ^down: standby (l): loopback (s): spoofing The number of interface that is UP in Physical is 2 The number of interface that is DOWN in Physical is 1 Th

兔子乖乖 1802

换一种方式做加密—著名程序员刘涛涛谈扭曲加密变换技术

换一种方式做加密—著名程序员刘涛涛谈扭曲加密变换技术 作者:刘涛涛 发布时间:2009-10-26 5:37:19 什么是扭曲加密变换呢?这是我开发的一款软件,可能官方的名词叫做“混淆加密”,我给自己的软件起名叫做扭曲加密变换技术。我断断续续用了一年多的时间开发这款软件,但是

Jingle的专栏 2069

学术版GPT安装教程——保姆版(附带原生GPT注册教程)

学术版GPT图文安装教程

DBenD的博客 2万+

Qt 5.9.1 32位下,手把手搞定周立功CAN二次开发库的加载与配置(含常见错误排查)

本文详细介绍了在Qt 5.9.1 32位环境下配置周立功CAN二次开发库的完整流程,包括环境准备、项目配置、常见错误排查及性能优化建议。特别针对MinGW 32bit环境,提供了.pro文件的精准配置和DLL部署策略,帮助开发者快速解决库文件匹配、编译报错和运行时问题,实现高效的CAN总线通信开发。

weixin_28717431的博客 356

换一种方式做加密——著名程序员刘涛涛谈扭曲加密变换技术

什么是扭曲加密变换呢?这是我开发的一款软件,可能官方的名词叫做“混淆加密”,我给自己的软件起名叫做扭曲加密变换技术。我断断续续用了一年多的时间开发这款软件,但是没做什么推广,这款软件直到现在不对外公开的。 现在加密变换适用于VC6、VS2005、VS2008等这么几个平台,下面我给大家讲一下在这个软件的开发过程中的一些思考,以及我的一些解决方案...

weixin_33743248的博客 294

华为OD机考双机位C卷 - AI处理器组合 (Java & Python & JS & GO & C++ & C)

> 2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 华为OD机试双机位C卷真题目录点击查看: [【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)](https://blog.youkuaiyun.com/banxia_frontend/article/details/155503868)

算法大师! 233

换一种方式做加密

 什么是扭曲加密变换呢?这是我开发的一款软件,可能官方的名词叫做“混淆加密”,我给自己的软件起名叫做扭曲加密变换技术。我断断续续用了一年多的时间开发这款软件,但是没做什么推广,这款软件直到现在不对外公开的。 现在加密变换适用于VC6、VS2005、VS2008等这么几个平台,下面我给大家讲一下在这个软件的开发过程中的一些思考,以及我的一些解决方案。 一、加密软件现

3518

Python爬虫实战:使用最新技术爬取路透社新闻数据

网络爬虫(Web Crawler)是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。随着大数据和人工智能技术的发展,爬虫技术在数据采集、市场分析、舆情监控等领域发挥着越来越重要的作用。requests:同步HTTP请求库aiohttp:异步HTTP请求库:HTML解析库lxml:高效的HTML/XML解析库selenium:浏览器自动化工具playwright:现代浏览器自动化工具pandas:数据处理和分析库scrapy:专业的爬虫框架:生成随机User-Agentredis:缓存和分布式爬虫支持。

2201_76125261的博客 1204

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

刘涛涛的扭曲变化加密

今天本来打算把国内某视频转换软件写个注册机,锻炼自己,结果弄了一天都不知道这软件怎么回事,也没加密,后来才发现时刘涛涛的扭曲变换加密,果然够变态 网上找的爆破方法,虽说爆破没技术含量,but,这软件爆破也挺难啊 先附上扭曲变换加密的思想: 转载自:http://www.liutaotao.com/nqby.txt 扭曲变换加密 作者:刘涛涛 me@liutao

收集学习过程中对自己有帮助的牛人文章 1594

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

混淆字符串

基础知识 物极必反。我们已经研究了阅读Windows内核的方法,现在开始讨论在我们自己的驱动编码中采用特殊的编码方法,来简单地防止反汇编阅读。这是有趣的一种事态:一方面我们研究如何阅读别人的(尤其是MS的)代码;另一方面,我们不得不采取措施保护自己的技术不被他人简单地窃取。 我这里要用到的这种方法不同于加壳或者加密。加壳和加密的方法比较单一,从而容易被人以同

8240

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

防止反汇编

下文所有内容摘抄自:http://blog.youkuaiyun.com/xinkeasw/article/details/7795462 一. 代码混淆:常用的方式有名称混淆、流程混淆和语法混淆。 *名称混淆(即字符串替换)的方式有: 1. 无意义替换。我们知道在实际的开发过程中,我们都必须遵守一定的命名规范来为类型、属性、字段命名。但是当我们对编译成功的代码进行名称混淆的时候就是要将这些规范的、规律

foreveryoung001的专栏 3380

captcha图像验证码生成算法详解:扭曲、噪音与抗OCR技术

图像验证码是现代Web应用中保护用户数据安全的重要防线,而cap/captcha作为Go语言生态中高效的验证码解决方案,通过精妙的算法设计实现了强大的抗OCR能力。本文将深入解析其核心生成技术,包括字符扭曲、噪音干扰和抗识别策略,帮助开发者理解验证码安全的底层逻辑。 ## 验证码生成的核心流程 cap/captcha的图像生成系统主要通过`captcha.go`实现,其核心逻辑围绕随机字符生成

gitblog_01030的博客 948
上一篇: PE引入表修改实战
下一篇: 一款木马的分析
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值