【JS逆向】破解第三方Bilibili视频加密策略(2)
本文探讨一个与先前介绍的网站类似的平台,该网站提供免费API用于下载B站视频,源码但限于P清晰度。网络网站的源码加密策略颇为新颖,值得分析。网络具体步骤如下:
首先,源码mysqljson源码用户需要进行两次POST请求。网络第一次请求中,源码需提供B站视频链接、网络时间戳以及一个加密参数sign,源码响应则返回加密后的网络B站视频链接。
第二次请求则基于第一次的源码响应url,包含同样的网络时间戳与不同的加密参数sign,以及固定的源码username和otype,请求结果是网络加密的image和video地址。
在Network标签页中,未在sources中找到sign信息,云管家婆 源码源码中也未直接揭示其来源。此时,选择加入XHR断点,揭示了名为jiexi的函数,其用于生成sign。sign的生成基于时间戳、url以及额外的字符串或键值。这些函数在混淆的JS文件中定义,但通过观察发现,sign总是位,猜测为MD5加密。
通过在线加密验证,确认了该猜测的正确性。接着,实现解密过程,将hex转换为二进制字符,爱客影院源码 授权以获取视频地址。
然而,该网站存在一些问题。jiexi函数中的key值在JS文件中固定,但会随时间动态变化,给实际应用带来不便。此外,下载的视频质量较低,不值得继续深入研究。该网站对源码的保护也较为严格,存在一定的技术壁垒。
总结,尽管该网站提供了一种独特的加密策略,但其限制和质量问题,以及源码保护策略,使得进一步研究的彩虹代刷4.0源码兴趣减退。对于希望探索更多视频下载策略的开发者,可能需要寻找其他途径或平台,以实现更高效、兼容性更好的视频下载解决方案。
有哪些合适的开源软件推荐?
徐小夕分享了他最近开源的轻量级电子签名组件——react-sign2,让使用者能轻松实现电子签名,如合同签字、文稿签名、艺术签名等,并支持一键保存。
使用方法很简单,首先在npm上安装react-sign2。然后,一个简单的使用示例如下:
对于react-sign2,提供了许多可定制的属性,方便使用者灵活定制电子签名,php 图片网站源码包括线条颜色、线条宽度等。并且还提供了业务中常用监听事件,方便使用者灵活调用。
在设计组件时,作者明确设计需求并遵循健壮组件设计原则。对电子签名组件来说,最小化需求是满足线上签名并保存签名数据。为了满足这一需求,作者进一步分析了组件配置点,包括颜色、笔触粗细、平滑度、自定义事件等。基于此,制定了组件需求设计,并用typescript规范组件输入和输出。
组件的实现基于canvas技术,可以低成本封装,适用于React、Vue3、甚至原生JavaScript。代码结构清晰,画图部分涉及canvas的细节。完整源码已上传至GitHub,欢迎参考和提出反馈。
对于持续维护开源项目,作者分享了关于如何与时俱进、优化底层实现和增加新功能的思考,以适应更多场景和使用者需求。开源组件库的迭代优化是关键,这需要持续的技术进步和社区参与。
总之,react-sign2为电子签名提供了高效、灵活的解决方案。随着技术的发展和社区的反馈,相信这一组件会不断优化和扩展,满足更多场景和需求。希望对想要实现电子签名功能的开发者有所帮助。
php的openssl_sign($data,$sign,$private_key)这个函数的源码是什么?
PHP_FUNCTION(openssl_sign)
{
zval **key, *signature;
EVP_PKEY *pkey;
int siglen;
unsigned char *sigbuf;
long keyresource = -1;
char * data;
int data_len;
EVP_MD_CTX md_ctx;
zval *method = NULL;
long signature_algo = OPENSSL_ALGO_SHA1;
const EVP_MD *mdtype;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szZ|z", &data, &data_len, &signature, &key, &method) == FAILURE) {
return;
}
pkey = php_openssl_evp_from_zval(key, 0, "", 0, &keyresource TSRMLS_CC);
if (pkey == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "supplied key param cannot be coerced into a private key");
RETURN_FALSE;
}
if (method == NULL || Z_TYPE_P(method) == IS_LONG) {
if (method != NULL) {
signature_algo = Z_LVAL_P(method);
}
mdtype = php_openssl_get_evp_md_from_algo(signature_algo);
} else if (Z_TYPE_P(method) == IS_STRING) {
mdtype = EVP_get_digestbyname(Z_STRVAL_P(method));
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown signature algorithm.");
RETURN_FALSE;
}
if (!mdtype) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown signature algorithm.");
RETURN_FALSE;
}
siglen = EVP_PKEY_size(pkey);
sigbuf = emalloc(siglen + 1);
EVP_SignInit(&md_ctx, mdtype);
EVP_SignUpdate(&md_ctx, data, data_len);
if (EVP_SignFinal (&md_ctx, sigbuf,(unsigned int *)&siglen, pkey)) {
zval_dtor(signature);
sigbuf[siglen] = '\0';
ZVAL_STRINGL(signature, (char *)sigbuf, siglen, 0);
RETVAL_TRUE;
} else {
efree(sigbuf);
RETVAL_FALSE;
}
EVP_MD_CTX_cleanup(&md_ctx);
if (keyresource == -1) {
EVP_PKEY_free(pkey);
}
}
这个是函数的源码,C写的。源码可以在php官网下载一个php版本,解压打开里面的ext/openssl.c搜上面代码即可。
JS Spider——百度翻译sign加密
本文将解析百度翻译的sign加密过程,通过JavaScript Spider技术实现。
首先,分析翻译请求时,观察到sign参数是唯一变化的部分。在源代码中,sign生成函数位于大约行,与之相关的token信息紧随其后。我们设置断点,定位到生成sign的y函数,它关联着e函数,位于行。
执行到e函数时,注意到变量i在当前环境中未定义。通过观察,发现i是由window对象初始化的,并且有一个固定值。将这个值添加到JavaScript代码中进行测试。
然而,这一步并未完全解决问题,因为执行时又出现了错误。继续在js代码中寻找,幸运的是,n函数就在e函数的上方。将n函数以及关联的a函数复制下来,尽管此时a函数报错,但这是解决的关键。
将复制的代码执行后,我们终于得到了sign的解密。至此,JavaScript的破解工作已完成,接下来只需构造合适的headers和post参数,就可以进行简单的爬虫操作了。下面提供相关的代码示例。
python采集京东app端搜索商品数据(--)
一、技术要点:
1、通过使用charles工具从手机app端进行抓包,可以获取到cookie信息;
2、无需安装nodejs,整个项目采用纯python源码编写;
3、搜索商品数据的接口为:functionId=search;
4、clientVersion的值为".1.4",同时也兼容更高版本的app;
5、sign签名算法已经转换为python源码;
6、body部分需要经过uri编码处理;
7、sign签名所需的参数包括:
sign=service.get_st_sign_sv(data_json, functionId, uuid, clientVersion)
其中,data_json代表body内容;
functionId表示接口类型,此处为:functionId="search";
uuid为设备标识,可以通过抓包获取,例如:uuid="d5aada6cce";
clientVersion为app版本号,例如:clientVersion=".1.4"。
2024-11-30 10:22
2024-11-30 09:39
2024-11-30 09:28
2024-11-30 08:53
2024-11-30 08:41