本帖最后由 ja3klyTim9k 于 2014-9-17 00:58 编辑
打开后随意输入字符,点加密后看了半天没看出和那种加密算法相似,看来非得好好逆一下了…
用PEid分析下加密算法如下:
主要是BASE64算法和MD5算法,加密的地方挺多,看来要做好打持久战的心理准备了…
载入OD,F9运行,在“加密”按钮事件上下WM_LBUTONUP断点:
点加密断下后,下内存访问断点,F9到下面(此断点不熟悉的请自己补充OD基础知识):
F7跟进后如下:
具体替换运算过程写在图片上了,请自行对照察看…
替换完成后的字符串设为S4,进入下一轮运算,如下:
下面是第一轮RC4初始化的运算情况:
第二轮RC4初始化并加密S4字符串:
RC4算法完了,别急!后面还有… 下面是对上面S4经过RC4加密后的字符串进行BASE64处理(因为经过RC4异或加密后的S4字符不具有可视性,很多是十六进制形式).
具体的base64算法,不多说:
此轮加密完后,加密过程快进入尾声了,下面是尽行MD5加密的过程,之后再连接字符串,变换等等:
好了,大概过程就到这儿了,至于逆向的思路,我觉得知道加密过程后应该不难了吧,个人总结的逆向步骤如下 :
步骤一: 这是题目给出的要解密字符:
S7 : eQ&ylzL7SDrMyTLiXeJK6lk2sbepvlJT0kYZt207rRppvL4HrtVwJ6bd96XeY8AdAZ98ZWbea88d5cb8VY8Z7 根据之前的分析,此字符串的最后32位 : 6bd96XeY8AdAZ98ZWbea88d5cb8VY8Z7 实际上是S5的最后3位字符的MD5加密后经替换而来 . 替换的规则如下:
AfBgChDiEjFkGlHm InJoKpLqMrNsOtPu QvRwSxTyUzV0W1X2 Y3Z4a5b6c7d8e9+& /@=#
则反替换后的字符为: b68eb293df8f4ed41695dd8a76d03d4c
此MD5解密后为: A==
S7所有的字符(出去最后32位)反替换加上这三个后变为:
S5 : 9v+TGUqcxiMrTyqD29opbGFXN69KQGoyVF34OXVcMwKKQqZmMO0RoA==
步骤二: 个人感觉是最麻烦的一步,这一步需要将S5字符串用BASE64解密,但因为解密后的字符大多为十六进制,具有不可视性,而你用工具解密后其编码已经被改变,因此有点坑!本人在做这道题时花了接近一个小时自己动手将其用BASE64编码方法解密了(当然完全可以自己写base64解密程序) BASE64解密过程倒不复杂,但难在运算量特别大,涉及到二进制输入输出极容易打错,S5解密后的字符串如下 : f6 ff 93 19 4a 9c c6 23 2b 4f 2a 83 db da 29 6c 61 57 37 af 4a 40 6a 32 54 5d f8 39 75 5C 33 2 8A 42 A6 66
步骤三: 好了,最难得步骤做完了,后面的就挺简单了, S4变为S5是先经过RC4加密后再BASE64变换,现在我们已经解密BASE64这一步了,还需要RC4解密,到这一步大家有两种选择:1 .很傻很傻的去手工解密(虽然可行,而且base64加解密的密钥都一样且每一个子密钥都是固定不变的),BASE64解密秘钥如下:
8f a7 d5 4b 7d f1 8d 66 5c 1a 1e da a2 a3 11 15 58 12 0f de 39 19 1d 67 64 31 b3 68 06 1a 0b 4e bc 1a cd 13
好吧,我承认,我就是这样很傻很傻很二很二的去自己解密的,,当时估计脑子抽风了。。。
2. 将需要解密的字符串复制到程序某处空白数据区,大家一定还记得之前加密过程时RC4加密后又有一个地方是对其解密的,当时还没发现有啥用 ,现在可以对其解密的内存地址进行修改,指到我们添加的需解密的数据区,然后运行,ok,手一抖,解密结果出来了…
79 58 46 52 37 6D 4B 45 77 55 34 59 79 79 38 79 39 45 38 71 73 59 77 55 30 6C 4B 51 73 46 38 4C 36 58 6B 75 转换成字符串为S4 : yXFR7mKEwU4Yyy8y9E8qsYwU0lKQsF8L6Xku
步骤四: S3到S4的过程就是进行了一个替换,按照之前的替换规则,得到S3 S3 :T2kwcHpjRzZ3TTdTejdLN3RzVGpvNkdqb2FP
再往后就没啥难度了,直接拖到在线BASE64解密工具中,两次BASE64解密,得到结果:
S1 : :-)土豪我喜欢你!!
题目下载:http://pan.baidu.com/s/1eQmtBMi
|