为什么80%的码农都做不了架构师?>>>
网站就不发了具体过程呢: 通过阅读晦涩无比的代码发现它使用的是AES+gzip压缩实现的加密
首先加密数据是17WSPeYwQFufy74vaYJ4=base64的超长字符串 首先用base64解码 我们把加密的base64复制到本地txt 然后呢 通过base64解码
bin = open("123.txt", "rb").read() base = base64.decodestring(bin) print base[0:10] 输出:eᆬᄡ^_àjᄍ@ð
- 这样似乎说明不了什么然后呢我们查看js代码发现他是AES加密的那么我们要把base64解码的数据拿到aes去解密
- 一般来说参数很容易找出来
- 如果是一般网站 aes解密后就可看到源码
- 但是此网站解密出来依然是乱码
- 到此处整个分析陷入僵局
- 然后通过查看js的aes算法发现他在计算完毕之后加载了一个奇怪的库通过调用这个库的某个接口转换返回的数据
- 然后着手对这个库分析发现这个库使用的算法很像是gzip的压缩算法,于是使用了py的zlib库进行最后的解压
- 确实有数据出来但是依然是乱码,于是我开始排除py 使用c#重写了解密过程发现
- 原来是py的aes解密库有问题 他不能直接操作byte[]进行解密所以导致揭秘出来的数据乱码
- 然后因为对方只会py 采取了折中的办法 使用c#写了一个aes解密com组件注册到系统使用py的comtypesku进行com调用完美的解决此网站解密过程
c#的aes解密code:
private string Decrypt(string toDecrypt){byte[] keyArray = UTF8Encoding.UTF8.GetBytes("61581af471b166682a37efe6");byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);RijndaelManaged rDel = new RijndaelManaged();rDel.Key = keyArray;rDel.IV = UTF8Encoding.UTF8.GetBytes("c8f203fca312aaab");rDel.Mode = CipherMode.CFB;rDel.Padding = PaddingMode.None;ICryptoTransform cTransform = rDel.CreateDecryptor();byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);string a = Convert.ToBase64String(resultArray);return a;}
py的代码
#!/usr/bin/python
-- coding: utf-8 --
import sys import zlib import base64 import comtypes.client as cc import json
factory = cc.CreateObject("ComToPython.AES") bin = open("123.txt", "rb").read() date = factory.Aes(bin) base = base64.decodestring(date) text = zlib.decompress(base) jsonx = json.loads(text) print jsonx["text"]