软件保护技术----从KeyFile到认识迷宫

例子用的还是加密解密3的例子,就来讲一下自己的做法和收获吧

链接:链接:https://pan.baidu.com/s/1AVnM8FaGtbm8TCd6gImvvw 密码:9m16

KeyFile其实就是大家在下载软件的时候,如果你购买了正版,一些软件公司可能会发给你一些文件,让你放在目录下面,它的作用其实就是当你使用软件的时候,软件自身会对这些文件的内容进行识别与匹配(肯定是经过一些奇奇怪怪的加密操作的),成功的话你就可以正常使用软件

咳咳,那么,如果你买的不是正版,那么我们能不能把那个KeyFile伪造出来呢?

咳咳,首先声明我们只是学一下保护技术啊,大家不要想歪

在OD中打开例子PacMe.exe

第一件事肯定是要找出来KeyFile的名字是什么,你这伪造的文件名字都不对,人家软件也是有尊严的好不好,都懒得识别

和KeyFile有关的函数主要有CreateFileA以及ReadFile,那么我们可以直接设置函数断点,来直接找出文件名

你看看,文件名是不是出来了,KwazyWeb.bit,还不快去赶紧建一个呢

建好文件之后就是找想把发弄清楚应该在文件里些什么内容了

我们可以在OD里面查找字符串

我自己是看到了Success和Congratulations什么的觉得比较结果什么可能在那边附近,跟进看一下

然后在下面一点的地方我看到了IstrcpyA这种比较的函数,而且结构就感觉是压入了两个字符串来比较,感觉基本就是核心比较代码了(如下)

可以去OD里面的数据窗口跟进一下403365是什么

是这样子的,看到这种东西我们猜测他是一种迷宫,从C出发,你要走到X,.和*是路和墙(这个需要之后验证,也可能是反的),我们的序列很可能和迷宫走法有关了,如果刚接触是不是觉得脑洞大开,我反正是惊了

跟进函数40101D看一下

可以看到4034FB,感觉很眼熟就想在前面找一下,然后我们可以发现在CreateFile之后调用了三次ReadFile,而第二次正是4034FB,也就是说4034FB是文件内容的第二个字节了,那我也是说我们漏掉了对第一个字节的分析,回过去乖乖看看,哭哭

开始漫长的分析……

刚开始就是读取了第一个字节4034FA和第二个字节4034FB,然后遇到了401000函数,我们进去看一下

这段还是比较好分析的,先是一些列清零操作,不去管,然后读取了第一个字节,然后将ESI指向了第二个字节的地址(403288是第二个字节缓冲区的地址,可以在第二个ReadFile里看到)

之后就是一个循环相加的操作,并且把最后加好的值放在4034FB,循环的次数又4034FA的字节内容的长度决定,根据之前的两个ReadFile其实也不难猜出来了,第一个字节多半存放的就是你用户名的长度,然后把你用户名的字符形式的和全部加起来放在第二个字节处

继续按照代码向下,我们遇到第三个ReadFile,可以看到这次读取12h个数据,接着我们就又回到了我们最初的起点,破译迷宫

分析一个这一块,就是把第二个字节出开始读取一个字节出来和第三次读取的12h个数据全部做异或(你是不是也猜到了第三次读取的数据是什么了,一定和迷宫的走法有关)

接下来其实我看这反汇编代码有点迷茫,但是明确找到了加加减减很接近的语句

看到这里关于是不是1还是2做判断,并且作相应的加减,走迷宫的的上下基本就是用al可以变化的四个值(0,1,2,3)来做上下左右的判断操作的

之后也看到了如果遇到2A就离开,2A就是字符*,所以也可以判定*是墙,.是通路了

那我们把迷宫的走法先写出来,然后用四进制数0,1,2,3来表示,一般性0是向上,1是向右,2是向下,3是向左,最多也就错三次,试试就好了

把试好的结果写出来:222122232211010011100333030011111211011211122332330332223221110011112233

四进制换成16进制:a9aba510543f3055651656bef3eae95055af

加入我们用户名是xiaoyuyu,那么第一个字节就是08(用户名长度)

第二个字节开始就是用户名:7869616f79757975,加起来就是38D,低8位是8D

用低8位和走法异或:2426289dd9b2bdd8e89bdb337e6764ddd822

然后就得到了最终序列:087869616f797579752426289dd9b2bdd8e89bdb337e6764ddd822

大家有没有理解了,要一起加油哦

猜你喜欢

转载自blog.csdn.net/qq_42192672/article/details/81506208
今日推荐