当前位置: 首页 > news >正文

mac 网站开发软件门户网站软文

mac 网站开发软件,门户网站软文,用sqlite3做网站,wordpress主题 插件下载失败二进制明文字符串加密:实现原理 背景 这里就不多做解释了,明文字符串暴露就是最好的逆向分析指引。无论是恶意攻击样本还是有一定安全需求的组件,直接暴露程序中的明文字符串会大幅降低外部的分析成本。所以需要在编译出的二进制中隐藏字符串。不过需要…

二进制明文字符串加密:实现原理

背景

这里就不多做解释了,明文字符串暴露就是最好的逆向分析指引。无论是恶意攻击样本还是有一定安全需求的组件,直接暴露程序中的明文字符串会大幅降低外部的分析成本。所以需要在编译出的二进制中隐藏字符串。不过需要明确下字符串加密的实现主要分两种,一种是借助llvm的pass去做的,另外一种是基于编译期模板的形式去做的,这里讨论的是后者。

常规的字符串表示

代码和16进制如下

printf("conventional...\n");

在这里插入图片描述

解决明文暴露的问题

首先考虑转换下写法,代码和16进制如下

char strArray[] = { 'c', 'o', 'n', 'v', 'e', 'n', 't','i', 'o', 'n', 'a', 'l', '.', '.', '.', '\n', '\0' };
printf(strArray);

在这里插入图片描述

这么写似乎和直接写字符串编译后没有区别?但是将字符串转为字符数组表示便于下面的加密逻辑

char strArray[] = { 'c' + 1, 'o' + 1, 'n' + 1, 'v' + 1, 'e' + 1, 'n' + 1, 't' + 1,'i' + 1, 'o' + 1, 'n' + 1, 'a' + 1, 'l' + 1, '.' + 1, '.' + 1, '.' + 1, '\n' + 1, '\0' + 1 };
for (unsigned int index = 0; index < sizeof(strArray); index++)
{strArray[index] -= 1;
}
printf(strArray);

在这里插入图片描述

可以看到实际每个字符以+1的模式存储,在使用前进行解密,从而实现明文字符串隐藏,同时这里的核心在于依靠编译器优化使得加密过程(这里指+1)在编译期可以直接算出加密后的结果,从而在编译完成的二进制中直接保存密文,而运行时进行解密从而使得实际结果保持不变。这里的两个需求非常重要,如果有一个不满足即会导致失败,这里将这两个总目标单独列出

  1. 编译期可以直接算出加密后的结果
  2. 运行时进行解密

实现上述过程

当然我们不可能每次隐藏字符串的时候都要手动去编写类似上述的代码,而希望有一个自动生成上述代码的方式。所以xorstr的核心目的就是如果将上面的写法用C++模板自动生成,并且确保总结出的两个核心目标{编译期可以直接算出加密后的结果}和{运行时进行解密}

两个开源实现如:andrivet/ADVobfuscator以及JustasMasiulis/xorstr

两个实现都稍显复杂,下面写个最小概念代码验证可行性

**我们需要的使用形式:**我们希望使用起来和正常字符串使用差不多,代码如下

#define Enc(str) EncryptString(str).decrypt()
printf(Enc("encrypt string?"));

因此我们需要EncryptString返回一个类的实例化对象,然后调用该对象的decrypt成员函数完成解密,代码如下

template<size_t N>
class EncryptString
{
public:template<size_t... Index>constexpr EncryptString(const char* plainString, std::index_sequence<Index...>): encBuffer{ (plainString[Index] + 1)... }{}__forceinline char* decrypt(){for (auto index = 0; index < N; index++){encBuffer[index] -= 1;}return encBuffer;}
private:char encBuffer[N];
};#define Enc(str) EncryptString<sizeof(str)>(str, std::make_index_sequence<sizeof(str)>{}).decrypt()printf(Enc("conventional...\n"));

在这里插入图片描述

可以看到上述代码成功实现了我们的预定目标,实现方式概述:编译期求解字符串数组长度利用模板技术生成一个该字符串数组的加解密类,类的构造函数使用C++变参模板展开和std::index_sequence的方法实现对字符串中每个元素的提取和加密,同时保障上述过程编译时完成。同时解释下为什么这里既然所有字符串的decrypt的逻辑都是一样的,为什么还要把他实现成类的成员函数呢?因为如果设计成统一的外部解密函数会被反编译引用查找的方式找到统一的入口,大大降低分析的难度

对抗

介绍完原理下篇文章会详细介绍下:xorstr的还原 & xorstr还原的对抗

http://www.hkea.cn/news/473461/

相关文章:

  • 房地产网站建设方案百度实名认证
  • 做外贸可以在哪些网站注册网络项目免费的资源网
  • 中国建设银行信用卡网站首页青岛关键词优化平台
  • 阿里云网站建设考试题目长沙网站推广服务公司
  • 甘肃建设项目审批权限网站俄罗斯搜索引擎yandex官网入口
  • 网站建设公司新员工培训ppt模板百度热门搜索排行榜
  • 仿魔客吧网站模板网址大全是ie浏览器吗
  • 网站产品后台界面怎么做湖南关键词排名推广
  • 网站数据每隔几秒切换怎么做的湖南百度seo排名点击软件
  • 网站制作先学什么百度新闻下载安装
  • 河南省网站建设哪家好免费观看行情软件网站进入
  • 粘合剂东莞网站建设体育热点新闻
  • 百度网站排名关键词整站优化培训网站建设
  • 网络平台代理seo外包 杭州
  • 东方头条网站源码免费推广软件工具
  • 北京网站建设公司分享网站改版注意事项流程优化四个方法
  • 案例学 网页设计与网站建设手机百度seo快速排名
  • 江门网站建设总部电话产品推广渠道有哪些
  • 网站建设全攻略站长之家ping检测
  • 导航网站 cmsgoogle chrome谷歌浏览器
  • wordpress看其他人博客优化师是做什么的
  • 现在哪个网站还做白拿2021小说排行榜百度风云榜
  • 网站流量seo提升seo排名的方法
  • 做html网站模板下载地址网站页面布局和样式设计
  • 公司网站邮箱费用磁力宅在线搜种子
  • wordpress 缺少临时文件夹刷关键词优化排名
  • 做网站要有什么团队淘宝关键词排名查询工具
  • 开源门户网站源码宁波谷歌seo
  • wordpress+一页一屏seo关键技术有哪些
  • 学校校园网站建设实施方案精准营销的案例