1.php的游戏源码openssl_sign($data,$sign,$private_key)这个函数的源码是什么?
2.electron 打包实现代码混淆和加密
3.逆向入门cocos2d游戏逆向分析
4.JS Spider——百度翻译sign加密
5.python采集京东app端搜索商品数据(2023-11-15)
6.有哪些合适的开源软件推荐?
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搜上面代码即可。
electron 打包实现代码混淆和加密
实现electron代码混淆和加密的游戏源码技术方案在开发流程中至关重要。在构建阶段,游戏源码计划排产源码对asar压缩包中的游戏源码js文件进行混淆加密,可以大大增加逆向工程的游戏源码难度,保护应用的游戏源码知识产权。具体操作步骤如下:
首先,游戏源码在electron应用的游戏源码构建脚本中加入混淆加密的步骤。在afterSign文件中实现这一功能,游戏源码这是游戏源码构建流程中处理签名文件的最后阶段。
接着,游戏源码使用asarmor工具对asar压缩包进行防解压加密。游戏源码asarmor是一个强大的工具,它能在文件系统层面进行加密,阻止恶意用户轻易解压和访问敏感代码。加密过程通常涉及在文件名或内容中插入特定字符,以此来混淆原始结构。
在afterSign文件的实现中,关键步骤是彩虹城堡源码定位到asar包内的js文件,并应用asarmor进行加密。这一步骤确保了源代码在打包过程中的安全,提升了应用的防护级别。
然而,需要注意的是,上述提到的加密方法仅提供有限的保护。它们无法完全阻止所有类型的逆向工程或破解尝试。因此,开发者还需结合其他安全策略,如定期更新依赖库、使用HTTPS通信、实现权限控制等,以构建多层次的安全防护体系。
总之,通过在electron应用构建流程中应用代码混淆和加密技术,能够有效提高应用的保护水平,抵御部分攻击手段,为开发者提供一种相对安全的代码防护方法。但同时,开发者还需持续关注安全威胁的最新动态,不断完善安全策略,tkphp星座源码以确保应用始终处于安全状态。
逆向入门cocos2d游戏逆向分析
深入剖析cocos2d-x游戏逆向分析
cocos2d-x是一个开源的移动2D游戏框架,它底层支持各种平台,核心用c++封装了各种库,外部则提供了lua和c++接口。关键代码可能隐藏在lua脚本中,许多安卓游戏的逻辑也主要在lua脚本里运行。通过官网示意图了解从c++进入lua世界的路径。
探索cocos2d-x的lua虚拟机相关代码,包括CCLuaEngine.h和CCLuaStack.h。在应用结束加载中进入lua虚拟机,具体由applicationDidFinishLaunching函数调用engine->executeScriptFile("main.lua")实现。
在luaLoadBuffer函数中,使用xxtea_decrypt解密了lua脚本,并通过luaL_loadbuffer加载解密后的脚本内容。因此,通过hook这个函数,可以将(char*)content字符dump出来,获取解密后的lua脚本。
然而,luaL_loadbuffer的皮皮支付源码源码无法直接获取,它位于编译过的库cocos2d-x\external\lua\luajit\prebuilt\android\armeabi-v7a\libluajit.a中。要找到实现细节,需要下载luajit源代码进行深入分析。
总结关键点:
1. 从c++进入lua世界的调用逻辑。
2. 使用xxtea加密算法,sign和key为XXTEA和2dxlua。
3. 无论是否加密,都会调用luaL_loadbuffer函数,通过hook这个函数获取解密后的lua脚本,但需运行游戏一次。
4. cocos2d-x\external\xxtea\xxtea.cpp中有加密解密算法,逻辑清晰,可使用python脚本本地解密或hook获取key、sign或解密后脚本。
实战案例:
以某捕鱼游戏为例,下载apk后内部集成十余款小游戏。通过分析游戏源码,找到luac加密文件,解密key和sign。使用ida打开libqpry_lua.so,定位到AppDelegate::applicationDidFinishLaunching函数,博胡源码找到加密调用。对比源码,解密后可直接运行游戏。
深入lua脚本分析,如子弹击中鱼的逻辑,直接查找src\views\layer\BulletLayer.luac文件。通过修改相关函数参数,实现特定功能。其他功能逻辑获取源码后易于理解,修改代码后重新加密,实现游戏破解。
思考如何实现cocos2d-x反逆向,从浅至深可采用以下方法:
1. 修改xxtea的key和sign,需分析so文件。
2. 直接修改xxtea算法,增加逆向难度。
3. 更改luajit源码,调整字节码指令顺序或数据读取顺序。
4. 将关键代码封装到其他cpp或so文件,增加解密步骤。
5. 使用ollvm混淆代码,需分析混淆或vm。
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"。
有哪些合适的开源软件推荐?
徐小夕分享了他最近开源的轻量级电子签名组件——react-sign2,让使用者能轻松实现电子签名,如合同签字、文稿签名、艺术签名等,并支持一键保存。
使用方法很简单,首先在npm上安装react-sign2。然后,一个简单的使用示例如下:
对于react-sign2,提供了许多可定制的属性,方便使用者灵活定制电子签名,包括线条颜色、线条宽度等。并且还提供了业务中常用监听事件,方便使用者灵活调用。
在设计组件时,作者明确设计需求并遵循健壮组件设计原则。对电子签名组件来说,最小化需求是满足线上签名并保存签名数据。为了满足这一需求,作者进一步分析了组件配置点,包括颜色、笔触粗细、平滑度、自定义事件等。基于此,制定了组件需求设计,并用typescript规范组件输入和输出。
组件的实现基于canvas技术,可以低成本封装,适用于React、Vue3、甚至原生JavaScript。代码结构清晰,画图部分涉及canvas的细节。完整源码已上传至GitHub,欢迎参考和提出反馈。
对于持续维护开源项目,作者分享了关于如何与时俱进、优化底层实现和增加新功能的思考,以适应更多场景和使用者需求。开源组件库的迭代优化是关键,这需要持续的技术进步和社区参与。
总之,react-sign2为电子签名提供了高效、灵活的解决方案。随着技术的发展和社区的反馈,相信这一组件会不断优化和扩展,满足更多场景和需求。希望对想要实现电子签名功能的开发者有所帮助。