免费分享 3.1 4.1 通杀版本,仅调用了精益模块,适配了各种参数拼接,仅用于学习用途,请勿非法使用,后果自负!
变量名 类 型 静态 数组 备 注 ai 文本型 appid 文本型 functionId 文本型 body 文本型 UserAgent 文本型 r 文本型
UserAgent =
“Mozilla/5.0 (iPhone; CPU iPhone OS 15_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1” ai =
“1e214” appid =
“normandy” functionId =
“jutouDisplayIndex” body =
“%7B%22channelId%22%3A%2210296%22%2C%22ext%22%3A%7B%22rewardSource%22%3A%22gift%22%2C%22rewardKey%22%3A%22qzhBsJ9jBS4%3D%22%2C%22mappingPin%22%3Anull%7D%2C%22lid%22%3A%22OJojQS6257w%3D%22%7D” r =
h5st ( , ai, appid, , , functionId,
编码_URL解码 ( body,
真 ) , UserAgent, ,
“4.1” ) 调试输出 ( r
) h5st 文本型 pin 文本型 ai 文本型 appid 文本型 client 文本型 clientVersion 文本型 functionId 文本型 body 文本型 UserAgent 文本型 _t 文本型 version 文本型
变量名 类 型 静态 数组 备 注 fp 文本型 d 文本型 e 文本型 r 文本型 JCrypt 加解密对象 tk 文本型 rd 文本型 method 文本型 n 日期时间型 j 文本型 t 文本型 ts 文本型 k 文本型 b 文本型 g 文本型 c 文本型
fp =
“3ggig5gi9mnz6tw0” d =
文本_替换 ( #device, , , ,
“[sua]” ,
文本_取出中间文本 ( UserAgent,
“(” ,
“)” , ,
) ,
“[p1]” , pin,
“[random]” ,
文本_取随机字符 ( 16,
位或 ( 1, 2
) ),
“[referer]” ,
“https://plogin.m.jd.com/” ,
“[fp]” , fp
) JCrypt.
加密数据 ( #算法_AES_128_CBC, d,
选择 ( version =
“3.1” ,
“wm0!@w-s#ll1flo(” ,
“HL4|FW#Chc3#q?0)” ) , d,
#填充方式_PKCS7, 到字节集 ( “0102030405060708” ) ,
#文本内容类型_十六进制_小写 ) e =
文本_替换 ( #expandParams, , , ,
“[av]” ,
文本_取右边 ( UserAgent,
“Mozilla/” ) ,
“[ua]” , UserAgent,
“[sua]” ,
文本_取出中间文本 ( UserAgent,
“(” ,
“)” , ,
) ,
“[pl]” , pin,
“[url]” ,
“https://m.jd.com/” ) e =
文本_替换 ( e, , , ,
“[og]” ,
“https://m.jd.com/” ,
“[random]” ,
文本_取随机字符 ( 16,
位或 ( 1, 2
) ),
“[ai]” , ai,
“[fp]” , fp
) JCrypt.
加密数据 ( #算法_AES_128_CBC, e,
“wm0!@w-s#ll1flo(” , e,
#填充方式_PKCS7, 到字节集 ( “0102030405060708” ) ,
#文本内容类型_十六进制_小写 ) r =
编码_Utf8到Ansi ( 网页_访问_对象 ( “https://cactus.jd.com/request_algo?g_ty=ajax” , 1,
“{” +
#引号 +
“version” +
#引号 +
“:” +
#引号 + version +
#引号 +
“,” +
#引号 +
“fp” +
#引号 +
“:” +
#引号 + fp +
#引号 +
“,” +
#引号 +
“appId” +
#引号 +
“:” +
#引号 + ai +
#引号 +
“,” +
#引号 +
“timestamp” +
#引号 +
“:” +
时间_取现行时间戳 ( ) +
“,” +
#引号 +
“platform” +
#引号 +
“:” +
#引号 +
“web” +
#引号 +
“,” +
#引号 +
“expandParams” +
#引号 +
“:” +
#引号 + e +
#引号 +
“,” +
#引号 +
“fv” +
#引号 +
“:” +
#引号 +
“v1.6.1” +
#引号 +
“}” , , ,
“Content-Type: application/json” +
#换行符 +
“User-Agent: ” + UserAgent
) )
tk =
文本_取出中间文本 ( r,
“tk” +
#引号 +
“:” +
#引号, #引号 ) rd =
文本_取出中间文本 ( r,
“rd='” ,
“'” ) method =
文本_取出中间文本 ( r,
“algo.” ,
“(” ) 如果真 ( method =
“” ) 返回 ( “” ) n =
取现行时间 ( ) j =
时间_取现行时间戳 ( ) t =
时间_格式化 ( n,
“yyyyMMdd” ,
“hhmmss” ) +
取文本右边 ( j, 3
) ts = t +
“04” 如果真 ( method =
“HmacSHA256” ) k = JCrypt.
取HMAC值 ( #哈希算法_SHA256, tk + fp + ts + ai + rd, tk,
#文本内容类型_十六进制_小写 ) 如果真 ( method =
“HmacMD5” ) k = JCrypt.
取HMAC值 ( #哈希算法_MD5, tk + fp + ts + ai + rd, tk,
#文本内容类型_十六进制_小写 ) 如果真 ( method =
“HmacSHA512” ) k = JCrypt.
取HMAC值 ( #哈希算法_SHA512, tk + fp + ts + ai + rd, tk,
#文本内容类型_十六进制_小写 ) 如果真 ( method =
“MD5” ) k = JCrypt.
取哈希码 ( #哈希算法_MD5, tk + fp + ts + ai + rd,
#文本内容类型_十六进制_小写 ) 如果真 ( method =
“SHA512” ) k = JCrypt.
取哈希码 ( #哈希算法_SHA512, tk + fp + ts + ai + rd,
#文本内容类型_十六进制_小写 ) 如果真 ( method =
“SHA256” ) k = JCrypt.
取哈希码 ( #哈希算法_SHA256, tk + fp + ts + ai + rd,
#文本内容类型_十六进制_小写 ) b = JCrypt.
取哈希码 ( #哈希算法_SHA256, body,
#文本内容类型_十六进制_小写 ) 判断 ( version =
“3.1” ) 如果 ( client =
“” ) c =
“appid:” + appid +
“&body:” + b +
“&functionId:” + functionId
_t =
时间_取现行时间戳 ( ) c =
“appid:” + appid +
“&body:” + b +
“&client:” + client +
“&clientVersion:” + clientVersion +
“&functionId:” + functionId +
“&t:” + _t
g = JCrypt.取HMAC值 ( #哈希算法_SHA256, c, k, #文本内容类型_十六进制_小写 ) 判断 ( version =
“4.1” ) 如果 ( client =
“” ) c = k +
“appid:” + appid +
“&body:” + b +
“&functionId:” + functionId + k
_t =
时间_取现行时间戳 ( ) c = k +
“appid:” + appid +
“&body:” + b +
“&client:” + client +
“&clientVersion:” + clientVersion +
“&functionId:” + functionId +
“&t:” + _t + k
g = JCrypt.取哈希码 ( #哈希算法_MD5, c, #文本内容类型_十六进制_小写 ) 返回 ( “” ) 返回 ( t +
“;” + fp +
“;” + ai +
“;” + tk +
“;” + g +
“;4.1;” + j +
“;” + d
)
。