跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

渗透基金会——使用Unicode编码混淆字符串

精选回复

发布于

0x00 前言

在渗透测试中,关键代码(如shellcode)经常被混淆,以对抗静态检测和分析。

最近看到一个有趣的样本,用盲文图案(盲文模型)混淆字符串,给静态分析造成很大困难。

如下图

2-1.png

2-2.png

示例地址:

https://www . virus total . com/GUI/file/06f 90 a 471 f 65 de 9 f 9805 a 9 e 907d 365 a 04 f 4 ebed 1 BF 28 b 458397 ad 19 AfDB 9 AC 00/detection

本文将介绍这种利用Unicode编码混淆字符串的方法,并通过程序实现盲文图案(盲文图案模型)的编码和解码,并将编码和解码的思路分享给其他Unicode字符列表。

0x01 简介

本文将介绍以下内容:

样本字符的实现原理

用程序实现编码。

解码由程序实现。

关于使用其他Unicode字符表进行编码和解码的思考

0x02 样本字符的实现原理

基础知识1:Unicode

Unicode是一种编码方案,它的产生是为了解决传统字符编码方案的局限性。它为每种语言中的每个字符设置了统一的、唯一的二进制代码,以满足跨语言、跨平台的文本转换和处理的要求。

简单理解:我们在电脑中看到的任何一个字符都对应一个唯一的Unicode编码。

与上面提到的样本相对应,虽然使用了盲文图案(盲文图案模型),人工分析有一定难度,但如果把每个字符都转换成Unicode编码,这个问题是可以克服的。

基础知识2:Braille Patterns(盲文点字模型)

是盲人读写的一种文字符号。

盲文有64个字符,即每个字符有64种样式。

盲文模型在Unicode编码表中有256个位置,即256个Unicode编码对应盲文模型。

为了支持更多的字符,在通信中使用了以下方法:

英文字母对应单个Unicode代码。

阿拉伯数字对应两个Unicode编码,第一个Unicode编码固定为U283C。

英文大写字母对应两个Unicode编码,第一个Unicode编码固定为U2820。

注:

英文小写字母也对应两个Unicode编码。第一个Unicode代码固定为U2830,但第一个Unicode代码通常会被省略。

在代码混淆的过程中,我们可以不遵循上面的语法来提高代码分析的难度。

例如,代码采用base64编码(共64个字符),然后随机对应盲文图案中的256个位置。

综上,我们可以得到实现原理:把要加密的字符转换成Unicode码,再把Unicode码转换成实际的符号。

所以解密也很简单:不需要考虑符号的复杂程度,先转换成Unicode码,再分析。

为了提高效率,下面介绍程序编码和解码的方法。

为了直观理解,程序实现采用盲文一级码,即逐字母转换,不包括缩写等词。

0x03 通过程序实现编码

对于编码的实现,优先考虑简单实用,所以我们选择通过网页实现编码。

可用信息:

http://www.byronknoll.com/braille.html

本网站支持盲文1级编码。

查看源代码可以发现,http://www.byronknoll.com/braille.html通过js脚本实现盲文一级编码。

所以我们只需要简单的修改(修复一些转码bug,去掉一些功能)。

要检查转码过程中是否存在bug,我们需要知道每个盲文字符对应的Unicode码和HTML码。可供参考的资料有:

https://www.ziti163.com/uni/2800-28ff.shtml?id=83#

Unicode和英文字符的对应关系可以参考以下信息:

http://www.doc88.com/p-695153826363.html

原代码分别支持大小写字母、数字和一些特殊符号,在特殊符号的处理上有一些bug,比如和!的转换不正确。

我修改的代码已经上传到github,可以直接访问进行编码。地址如下:

https://3gstudent.github.io/tool/BrailleGenerator.html

支持以下字符:1234567890 abcdefghijklmnopqrstuvwxyzabcdefgijklmnoqrstuvwxyz)!/-.$

测试下图

3-1.png

注:

我的代码只是作为开发的模板,所以用!的转换错误未修复,并且=

0x04 通过程序实现解码

为了和利用模式结合(比如在内存中加载PE文件),这里用的是C调。

关于在内存中加载PE文件的详细信息,请参考之前的文章《通过.NET实现内存加载PE文件》。

程序流程如下:

1.从BrailleGenerator.html获得的盲文字符存储在一个数组中。

2.要将盲文字符转码为Unicode字符,需要注意的是,阿拉伯数字和大写字母占用两个Unicode字符。

3.通过对应将Unicode字符转换为实际字符。

代码已经上传到github,地址如下:

https://github . com/3g student/home-of-C-Sharp/blob/master/brailletoascii . cs

支持以下字符:1234567890 abcdefghijklmnopqrstuvwxyzabcdefgijklmnoqrstuvwxyz)!/-.$

支持。Net3.5和更高版本

按如下方式编译该命令:

C:\Windows\Microsoft。NET \ Framework \ v 3.5 \ CSC . exe brailletoascii . cs

或者

C:\Windows\Microsoft。NET \ Framework \ v 4 . 0 . 30319 \ CSC . exe brailletoascii . cs

0x05 使用其他Unicode字符表编码和解码的思路

1.编码

将代码转换成Unicode代码,通过自定义的映射关系生成新的Unicode代码,最后转换成相应的符号。

可供参考的代码:

https://github . com/3g student/3g student . github . io/blob/master/tool/braille generator . html

2.解码

按照使用中的加密映射关系解密就好了。

如果是分析代码的混淆样本,可以在代码加载过程之前设置断点,获取解码后的内容。

0x06 小结

以盲文图案(盲文图案模型)为例,介绍了用Unicode编码混淆字符串的基本方法,并用程序实现了盲文图案(盲文图案模型)的编码和解码,并简要介绍了用其他Unicode字符表进行编码和解码的思路。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。