一个高难度CrackMe的制作历程[网络技术]
本文“一个高难度CrackMe的制作历程[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
用到的加解密算法及编解码主要有:sms4,RSA256,md5,base64,别的还有一个自定义的简单加解密算法
1.首先是注册码的构成
w+WfnhqrasT6ZIRJMs1UKBAahI3XeY5uGumgsa2MygwapvFjjjZxBcXmLRI3/0gkVA/xjSkGz0xDkXatHHcYGBkeMliN4BtCtiSj0chWoUX5ujFK6skG6SLYKQ4PnV8sbXNDdqTXBPYAjS6cujddDR8adKkxAI2MnQlxT2JxYTZ2a
jEPo0/yUv+iTUS6W4cEcDwiCmX+lcu/gMRd1UbZHh7qOIIeirp5R3NxxwHEgSJnpLi147NSoTdo2G39Rqkr
以上是一组注册码,其原始构造为:
| A:32字节代码 | B:32字节代码 | C:16字节密码 | D:16字节随奥秘钥 |
生成注册码历程:
(1)生成16位随奥秘钥
(2)用随奥秘钥加密A,B,C
(3)用自定义加密算法加密ABCD
(4)用RSA算法,私钥加密ABCD,得到192字节密文(由于是RSA私钥加密,因此没有私钥是无法写出注册机的)
(5)为了将上一步中不可见字符转换为可见字符,用Base64编码,得到以上256字节的注册码
(6)通过改变随奥秘钥,便可得到差别的注册码
2.安全性解析
(1)注册机编写的大概性
由于注册码利用了RSA非对称加密算法,因此理论上无法写出注册机,假如你说能破解RSA256,我可以用RSA1024,能破解RSA1024,不用往下看了,我承认你可以破解这个CrackMe
(2)暴力破解的大概性
A和B为构成PE文件的关键代码的密文,并且利用另一段关键代码的MD5值作为密钥举行SMS4加密.PE运行时,会首先计算关键代码的MD5,用sms4解密A,B,然后将A和B恢复到PE文件中.PE中本来对应的这两段代码利用随机数据填充,因此不解析注册码的情形下,无法暴力破解,除非你能用机械码手动恢复这64字节数据.这样也同时保护了关键代码,关键代码的任何改正都将造成解密A,B的错误,造成PE无法正常运行.
3.别的的保护手段
(1)两个保护线程
保护线程有四个作用.
一是反OD.我用了很简单的思绪.OD中止时会把全部的线程也中止,我在线程中会不断GetTickCount,Sleep为200ms,在不中止的情形下,两次隔断不会超越1秒.假如你用OD中止超越4秒,会招致线程中检测到两次隔断超越4秒,运行退出代码.
二是查抄关键代码能否被改正.发现被改合理即退出程序.
三是将解密代码的办法放到线程里.主要作用是避免调试者简单的杀线程绕过反OD.杀掉线程或nop CreateThread之后会招致很多代码无法解密,运行出错.这也就是很多人问我,为啥杀掉线程后也不行.
四是用两个线程互守,比一个线程的保护作用更强.
(2)密码分段存储
C(密码)的MD5被分段放到了三个地方,避免调试者很简单跟出来,这个保护作用不是很强,但有一定的误导作用.有些人把大量时间花在这里,认为把三段密码找齐就完成破解,其实误导作用更胜保护作用.
(3)多段代码加密
共加密了5段关键代码,运行时解密.一个作用是反静态汇编,不运行的情形下,静态汇编出的很多代码都是错误的.二是反动态汇编.有3段代码互锁,1,2,3代表三段加密后的代码,此中2的解密密钥为1的MD5值,3的解密密钥为2的MD5值.假如你改正了1,则2不能解密,假如你改了2,则3不能正常解密.假如你不改1,无法运行到2,不改2,无法运行到3.
4.破解办法
固然上面写了这么多,也不是不能破的.我只能说,不给出一组精确注册码的情形下无法破解
以上是“一个高难度CrackMe的制作历程[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |