如今ctf逆向比赛常用加密解析(一)(简化版)

  • A+
所属分类:逆向工程

如今ctf逆向比赛常用加密解析(一)(简化版)

一.ctf比赛常用的加密手段


现在的ctf题库里,里面的题可谓是多种多样,不过对于加密手段都是万变不离其宗,有进行字符串隐藏的,有在打开程序就进行比较的,有自己写壳的甚至有人自己搞了一套类似于vmp的自解析手段,还有还有就是利用算法的手段进行加密处理。当然一般壳的话是要自己写的壳才能进入比赛项目的
不然就太欺负人了。

当然这篇文章的加密技术早在多年前就有人使用了,不过我只是写出来让一些ctf及一些逆向的小白来借鉴一下的,
大佬看看笑笑就好。


如今ctf逆向比赛常用加密解析(一)(简化版)


二.如何入门ctf比赛

对于一些想打ctf比赛的小伙伴来说,入门是一件十分困难的事情,首先,汇编是入门的基础,当然并不是让你去用汇编写程序,而是让你通过汇编了解到c语言和c++的基本语法在汇编是如何实现的,因为在现在的ctf比赛中大部分试题还是以c和c++为主,不过在c和c++的基础上使用了mfc或者qt等框架
对于c和c++的基本语法逆向,如果小伙伴感兴趣小编会在后面的文章给大家简单的讲解一下。

大部分的初学者往往其实是没有找在主函数,或者在跟进某个函数时不知道是是否应该跟进而产生问题,其实在这些比赛中的题目大部分都还是用了api函数,很容易知道干了什么事情,又或者写了一些简单的加密算法。当然这些都是很考验一个小伙伴对于基础的掌握。

所以,学习汇编,c,c++,mfc是入门ctf的基本,当然没学这些能不能去刷ctf,当然可以,不过基础是一个人在这一行能走的远的重要因素,不然遇到问题就很难了解到这是为什么,和如何解决这样的问题。


如今ctf逆向比赛常用加密解析(一)(简化版)


三.给你源码你也不知道破解的加密算法(不可逆算法)

这套加密算法使用的领域非常广泛,不仅仅在ctf中经常出现,也往往出现在一些小型或者中型的软件上面,不过本人在这里只是讨论加密算法的思路,并不针对任何软件。

我先画一个简单图让小伙伴明白一下加密流程


如今ctf逆向比赛常用加密解析(一)(简化版)


我怕这图片不够清晰,就上传了一下附件。
这里用到了两个程序。加密端和解密端
首先,先讲一下加密端

我们将正确的值放到加密端,正确的可以是很多种,可以是用户名密码,可以是flag,甚至可以是用户的机器id。当然也可以加上用户的使用时间呀之类的进行对比,我就不往外扩展了,只要是可能的就都可以。

对于第一次的这个加密最好是不可逆运算,因为如果是可逆运算的话,那么如果你是一个辅助作者,别人买你一个授权就能推导出其他的恐怕你明天就要关门,我们就是要让别人不知道是如何进行运算的。当然不可逆算法有很多,什么与运算呀,或运算呀,还有市面上公开的算法,大多都是不可逆运算,这套加密算法的难度就在这个加密运算上。

后来我们将得到key跟我们要加密的数据进行可逆运算,这里一定要进行可逆运算,因为,这个数据我们在解密端是需要用到的,不然就运行不了我们原来的程序。
要加密的数据可以是关键的数据,也可以是关键的代码段。这样的话,进攻方就算是爆破也没有办法强行破解你的程序,就只能强行的逆向的你的代码,与算法硬碰硬。要知道谁也不想搞数学,太头痛了。//得到encode

我们再通过加密的数据或者关键的代码段进行可逆运算,这个的话就是一段混淆一下破解者的思路的办法,让他以为这里是关键比较,而关注这里,其实加密跟这里没有很大的关系。也算是个防护手段吧。//得到检测值


我们将encode和检测值,写入解密端



下面是解密端:
跟加密端类似,我们还是先得到用户输入的值,只要他跟上面的用户端的值不同,就不能得到正确的key值然后得到的key值与encode进行可逆运算解密,


当key值不对,就无法解密出正确的数据或者代码段,也就无法得到正确的程序结果。

我们将得到的数据或者代码段进行不可逆运算,得到检测值1与检测值对比,如果不对就不执行代码段或者退出程序。



如果一个人把关键跳改成执行但是你的数据和代码段不对,执行又有什么用呢



下面我总结一下:

加密和解密的本质都无非是不过是取消明文对比。

这里面就涉及到很多的数学逻辑问题。


如今ctf逆向比赛常用加密解析(一)(简化版)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: