抓包分析,发现请求头参数有加密,表单有加密,返回的数据也是加密的。
请求头Source是固定的,其他的Sign,以及Timsestamp是加密的
请求载荷也是加密的
返回的数据也是加密的。
而且仔细看,它们都是数字和a到f的字母组成的,就很想哈希算法进行加密。实际上运用的就是sm3和sm4的算法,详情见前面对这些加密算法的讲解。
先解决请求头参数的加密:
直接搜索,一下子就找到加密位置了,打上断点,先分析sign参数
打印参数,继续分析,因此需要找的加密函数就是r和d
进入函数r,打上断点,发现是运用了函数s,而函数s在前面已经提示是sm3加密方法。
因此直接利用专门的库对参数进行加密,发现果然跟浏览器中加密的一致:
解决了函数r,那么现在来解决函数d
发现函数d,就是一个sm4加密的,e是函数r返回的带加密的数据,c是密钥
进入l函数,看一下sm4是ECB还是CBC,是否要向量IV,以及填充的方式是什么
发现l函数是m函数,打断点,进入m函数,仔细看这段代码,告诉我们了关键信息。
直接写代码:
综合分析一下,sign怎么来的,首先表单数据,包括页码,翻页尺寸等等经过处理用&连接,进行sm3加密,然后字母大写,再经过sm4加密,密钥是
30062AFC48C0E7B5B0918851C0445A37,ECB的模式。
同理这样分析,就知道时间戳是对当前时间戳,进行sm4加密,密钥同样是
30062AFC48C0E7B5B0918851C0445A37,加密数据是时间戳。
改进一下我们的代码,定义两个加密函数。
const sm3 = require('sm-crypto-v2').sm3;
const { SM4 } = require('gm-crypto');
const key = '30062AFC48C0E7B5B0918851C0445A37'; // 32位十六进制数字
function sm3_encrypted(data){
return sm3(data).toLocaleUpperCase()
};
function sm4_encrypted(key,data){
const encryptedECB = SM4.encrypt(data, key, {
mode: SM4.constants.ECB,
inputEncoding: 'utf8',
outputEncoding: 'hex'
});
return encryptedECB
};
data = 'pageNum=2&pageSize=15×tamp=1721116418231&year=2023&key=HD7232D2AAAKA@978D8723H211?IER&6'
console.log(sm3_encrypted(data))
console.log(sm4_encrypted(key,sm3_encrypted(data)))
// sm3加密大写结果:2245692EA39B3979877C2ACCEA6013B238087576142E3660BA128955BCE95B21
// sm4加密结果:9956ba8fd022af606049609d30b85d219e1c3805efac04796110021f99b0b7a4d20345b347552d35f4b74787969b34029378846f70051a9ded17c4ea
// 65a5cd27ba532c7c82c95484140e5a9ffbe7ae48
现在分析表单载荷是怎么加密的?
直接搜索,找到加密位置,打上断点,打印参数确认
就是b['b']函数对表单进行一个加密,进入这个函数去看看。我靠,巧不巧,就是d函数,还记得d函数是什么吗?就是sm4阿!
直接用我们的函数加密一下看看
是不是跟浏览器加密的结果数据一致阿!!!
现在不妨猜一下,返回的数据内容,我们该怎么解密呢?就在parameters下方,告诉了我们,数据是怎么解密的。打上断点,分析:
参数打印一下,进行确认。果然是这里进行了解密!
进入b['a']发现这个u函数解密,是不是很眼熟,在最开始我们分析sm4加密的d函数的时候,是不是出现在加密的下方就是解密的内容?所以这就是sm4进行解密即可!
写一个解密函数
var content='8098e461ec61940b80d75f61f88c584c290c2a5a9d38ceee696287e315483820a575a0df94cad88c862d9d39d2f73254bf5a88f9cb437ddd122ec3f599289ede4a8bf0c65aab0f207164164770b8948ef82721d1335055a72435032464e5267c4434fd96186091717f8f0cdc0fc947c0185f6eedbee89b0a44066152be877512b0e94b6290a0a0c5793356d50b9779ba3f1b63d4eae4925ee740ded661068b33a505becf9c9ae03134aa5af2f420524b4d832330059b7ecad36665bbf08c4135caf28d54e71be5657bcbe368224467036a724fc4c3177bd4ccab6c8646f9d90ee6ced862df60958a3bcf721c1ad8714d43533cceaebda1abaff3b0fb3c874b856d701e9ff8770d996fab79a831fec945180e21953dfcdb370d78b09a7ed5f24ed3bd888641a2889ea2fdc6b66ce28a3634dfe583e9b6163d6df256452b6793f576f9b4bc3842c9b67e034a0c0913f220a13bcf6a60fd12d2d90556db6909de2bee7d2668f2152ae63409308b8c0d829e9b4e970bfd373c44fdcb91315b81b431e716788da3abbf09de81d5d95c02da2786632a291363b89415d62c6985af9ab9137affb1a9502f7fbf33d16fc6b68f2aa03249c1951526343636352daad9d80b436c0cbb2f990e119cc057d72061da18129fc3fe42413bc12282ffb073e815ccb47b4a980d3537dad21a3f3d1aa65febc088a050411b68942cccbaefde61723aaa8693c743db0cd241078766ef052272c0e8a469e477d1fdf1ea3169a578398dacdfcd13577a2126dd86c3fc0b85ff685a67be2623c7dfc54a351738f635f6415424083c7dcb7fbce85b0522b37a31f8048cbafc892b7a02643e6e9da4f24eadaf29b2b1e147c99e9ebe8d150e8b2b63390de467ce7ffcc5d83b80813a276c01b2eb0ff27a8fb4c6506071ad842d9a5d57ffd7377fbcf4116d83eca878e377f97ce3887f94c8a0c28ff2658144f04c8cc43fe4a3a71b5c6f2618a01edfcba191eead9e11d8518e7e2100267410f0c66b095ca13144dabc389616f4e13d82ef0a6a800f9f3e25da1942dce739b349f61b9831ad6200be4e4e73cb397ee69143d2e7329fa06e14fa7b4c4e73cedfb7374e4109c82729b362239b81cd42fe5ae7d536266651442ad863c2cc4b342220ca3ae989d6a4a0b0fa943f9fb59e00cea2025e93a8daa52608b829eb6de5cf0d97d31cd247786cc2d07abae5c021631a851e79cc220159e6d95df09a77882c0902c8bef915cfedc31720639a4f06192d91a74fe3f88a8acd3d71f1e7f908c6d1596a11842ba923b97f86d036953b86137fad8be71af875e88a1ac276f4cd1dbe218b954c8aae1c05cf130755e92a0eec5a515a0af3bd261d712c165f6f36f1181b4b5d8960044f56dc867bcdcd41dce19027692454eae22739eeb5948f55c441676597f0c9f967dacd393bed160ef181249b799162f719f6473f00a047988182660f938c7c0b2e11e082d28a3a46628ea2eba3cc5c2f72cdb8fd6f17dbd67ea03c0bfab00a2a44847f996e3bb820d691892aad87c1462fcf7e3d60b2076c92a4ca80e5ddf469d1f3b89232334b2ef1a6c73bb7cd25ced4987f23268ae955892c1d9f9153d77b3907af7cf6a9d9055fc60c11d5269a1e5c4fb1dd8133c1c7be5b9be8ab4856caa9d66161db511b77510c312e1e252525b861c3dbf036518c1be00c0a66d1737f731ab3a6f5c8ee8f8151ad25a92b570ea6bf139b0ddd259b420839da67fa1d71b061e983b3e975bef1a44bbad6074d87e139cbd11caa874b420264261f9ea23395ba33047fc55294a5396ecf8e06fbf29d5c53dc8df533fc95d21b7958ff9e43f2a30ec80c7decd8159c3c60362d648092c98d380e15ad5bade2fa0b7e28fc8b0bfe9ebf05a3b03f43e6b52a7a7ca7cecaea2383e1e517963bdebf2bbb43817f2b523bebcedb797a1796199c1f6e20238bbe7dd0d20bd4c890dde1d7bd94ec38f4a2a8bb398e866d24cfa7ed5ba784493a94b70fe591749dcbbfb5bfac88afd193d245ec0de97838816883c522d40b2998f7e49ef99027de7b3293fc93628e9973111ca8b5b574783937276c32df25875bbdc751ab8d4aefbd90ba17518034c1a8da2d76c193bf02a70a30fed081d7b5f5cb726a12908809a68d4d8a5e93a8daa52608b829eb6de5cf0d97d31cd247786cc2d07abae5c021631a851ec8b0ef2e29b0328c92dabbe7965728a2b50fb2138b8d78cc0d1fe0c5ba38c319da005a9da3eb46cce941968396abb8b98802f9e47ee90eaa2ecddda03e220b5e2d6c054f932e93536ed8191e43fc7e8a1fa15685199ca99f45783aa08f8bbd9c10b932de9162fc11f3a0bab02b9a13536ce6f9f83b97ddce1428ae185513baac8bb814e7435e49fc5ea87f071095e0af919aac6a22793c7e18108af56e336cca483036e42e11fb61c58e11c634daec2613583a01ee298bd0acec0e78920216d136a597fcdeeea9aa60fa8f01ecec89a14fae9069bf746e220067dcaa7f49241e6875ae902d31cbf6b1cf5fc8622fd92060b063b8ef898f1227401142804b09f1a662b8a2659786f5dbbc42fc19413c1c99f78a8caf12bd044c27e857b0c14f9a8d2fa60792d2f09e3d4cb5454719f299c3dbda047b47743bae7fce6e1678e84a417fa462914a8d5ce383b937aa84ce4ed6d65c661374e04fc6951e969713061a7da9a75b46e41a6dfd49fc1380421ad0d6ecd6579543b6f68ea3d5c2bb4e6466519c5e36126e3000f069e1c664d9224ccd6dec5810965de6033520c23b8d07747b657e7a456e2fb2c971115014af27d131ea8060ec50854073c1bc4a6b7553258b8a02ca474558d9558c66e349057bbc418e2a73a04c9025c98e13f27390938843142fa04d9b8e797557cc920a876433d969bfa45c6691ef6e73c9b8cbbe62d798b7cab9ca2411f485e38172122cd87d0e55f28aad0333bb8c8b4394c4b5bb13c1816f6cd38c8376fc1865bc6956ec7ab78f7a207557d0478225150863fb123fbef42d62e0519c79d