【APT】响尾蛇(SideWinder)Hta文件自动解密C2
前言
一个用于从SideWinder APT组织常用的hat文件中解密C2链接地址的Python脚本,示例代码对一些老的hat文件效果比较好,新的样本可能需要根据实际情况修改下,最初是用于对VT上命中的大量样本进行批量提取C2地址用的

示例代码
# -*- coding: utf-8 import base64
import re
import sys def myXor(key, data):
out = ""
i = 0
datalen = len(data)
while i < datalen:
for j in range(len(key)):
tmp = ord(data[i]) ^ ord(key[j])
out += chr(tmp)
i += 1
if i >= len(data):
break
return out def myBase64Decode(key, string):
#某些情况下会出问题:“asEqf170rcEU” -> “|abx|oeq” -> 正确结果应该是“|abx|oeq|”
result = []
string = string.strip("=")
binstr = ""
bin6list = []
bin8list = []
#key = "JXaYOjSNTet1dDrHsVlc0m5EknG7Ko6qibhFBuyzQUwxWCp4ZLf23gAvMR8PI9+/" for ch in string:
bin6list.append("{:>06}".format(str(bin(key.index(ch)).replace("0b", "")))) binstr = "".join(bin6list) for i in range(0, len(binstr), 8):
bin8list.append(binstr[i:i + 8]) for item in range(len(bin8list) - 1):
result.append(chr(int(bin8list[item], 2)))
return "".join(result) def myBase64Decode2(key, string):
STANDARD_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
CUSTOM_ALPHABET = key
ENCODE_TRANS = str.maketrans(STANDARD_ALPHABET, CUSTOM_ALPHABET)
DECODE_TRANS = str.maketrans(CUSTOM_ALPHABET, STANDARD_ALPHABET)
return base64.b64decode(string.translate(DECODE_TRANS)) def myGetb64(data):
b64 = re.search("var b64 = \"(.+)\";", data).group(1)
return b64 def myGetkeeeeKey(data):
keeee = re.search("var keeee = .+?\(\"(.+)\",", data).group(1)
return keeee def myGetkeeeeData(data):
keeee = re.search("var keeee = .+\((.+)\)\);", data).group(1)
keeee = keeee.replace("\"+\"", "")
keeee = keeee.replace("\"", "")
return keeee def myGetkeeee(data):
key = myGetkeeeeKey(data)
str = myGetkeeeeData(data)
keeee = bytes.decode(myBase64Decode2(b64, str))
return myXor(key, keeee) def myGetaUrl(data):
url = re.search("var aUrl = .+?\((.+)\)\+x;", data).group(1)
url = url.replace("\"+\"", "")
url = url.replace("\"", "")
return url def myDecodeUrl(keeee, data):
return myXor(keeee, data) if __name__ == '__main__': if 1 >= len(sys.argv):
print("输入文件路径参数后重试")
exit(1)
try:
f = open(sys.argv[1], 'r')
data = f.read()
f.close() b64 = myGetb64(data).replace("=", "")
keeee = myGetkeeee(data)
encodeUrl = myGetaUrl(data) strurl = bytes.decode(myBase64Decode2(b64, encodeUrl))
url = myDecodeUrl(keeee, strurl)
print(url)
except:
print("文件不支持或其它错误:(")
感兴趣的小伙伴可以根据样本自己修改下
3e14d22a63775a59878a71d80ea17bfd
4dc475b2055b5a880cbd67526b0f6e3c
94ae178768482ead9b0c0612325a9eeb
354a7e51b5ae982ce24b588c12f34ae1
884e404b0d8b34e98f90809909171e90
1333fb41972e81a99ada7e2df5ba014f
69737cb11c6596298a5bf1958f5d1ad3
484214759657cc28daa61de086d526f2
ca90bf0bc5771caf82f991641b316562
f158bffa5f876619aa745e23a2800c9d
【APT】响尾蛇(SideWinder)Hta文件自动解密C2的更多相关文章
- 文件自动备份和同步bypy和syncthing
http://blog.csdn.net/pipisorry/article/details/52464402 Linux定时备份数据到百度云盘 sudo pip3 install requestss ...
- 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间
[源码下载] 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间 作者:webabcd 介绍速战速决 之 PHP 动态地创 ...
- CocoaPods 导入第三方库头文件自动补齐
使用了一段时间CocoaPods来管理Objective-c的类库,方便了不少.但是有一个小问题,当我在xcode输入import关键字的时候,没有自动联想补齐代码的功能,需要手工敲全了文件名,难以适 ...
- Code笔记之:对使用zend加密后的php文件进行解密
对使用zend加密后的php文件进行解密 使用zend加密后的php文件用notpad++打开会出现类似的乱码 下面使用解密工具进行解密 http://pan.baidu.com/s/1i3n4ysX ...
- linux环境下给文件加密/解密的方法
原文地址:linix环境下给文件加密/解密的方法 作者:oracunix 一. 利用 vim/vi 加密:优点:加密后,如果不知道密码,就看不到明文,包括root用户也看不了:缺点:很明显让别人知 ...
- 为js和css文件自动添加版本号
web应用必然要面对缓存问题,无论前台后台都会涉足缓存.特别是对于前端而言,缓存利用的是否得当直接关系到应用的性能. 通常情况下,我们会倾向于使用缓存,因为缓存一方面可以减少网络开销,一方面可以减轻服 ...
- ◆linux分区的加密与自动解密◆——Super孟再创辉煌
首先制作分区的加密挂载: 分区的自动解密:
- gulp下livereload和webserver实现本地服务器下文件自动刷新
一.前言 node从v0.10.26升级(为了匹配autoprefixer)到v5.3.0后出现了gulp插件兼容问题,在nodejs下各种新的插件出现问题,需要重新配置.livereload实现ch ...
- CVS 文件自动移 tag 的 Python 脚本
CVS 文件自动移 tag 的 Python 脚本 背景 工作中使用的版本管理工具是 CVS,在两次发布中,如果修改的文件比较少,会选择用移 Tag 的方式来生成一个新 Tag 发布.文件比较少的情况 ...
- CocoaPods导入第三方库头文件自动补齐
使用了一段时间CocoaPods来管理Objective-c的类库,方便了不少.但是有一个小问题,当我在xcode输入import关键字的时候,没有自动联想补齐代码的功能,需要手工敲全了文件名,难以适 ...
随机推荐
- 谷歌云|机密 GKE 节点可在计算优化的 C2D 虚拟机上使用
机密 GKE 节点可用于计算优化的 C2D 虚拟机. 许多公司已采用 Google Kubernetes Engine (GKE) 作为其应用程序基础架构中的关键组件.在某些情况下,使用容器和 Kub ...
- const char* str和const char str[]的区别
首先,字符串常量是存储在flash中的.假设字符串常量在flash中的地址是0x8003fb8. 第一种方式,str等价于str的内存单元的地址,str的内存单元存储着字符串常量的地址 第二种方式,s ...
- main(调用一个公共组件)
app.vue <template> <div> <Student/> <School></School> </div> < ...
- iOS基础 - SceneDelegate
前言 1 - 自从 Xcode11 发布以来,当你使用新 XCode 创建一个新的 iOS 项目时 SceneDelegate 会被默认创建 2 - 在 iOS 13 后 SceneDelegate ...
- 1.PS基本操作
1.图片颜色变淡 1.新建一个白色的画板 什么尺寸都可以 只要能装得下你这张图 2.把这张图拖进去放到画板上 3.在右边找到这张图的图层 更改透明度到你觉得合适的程度 (我初步估计可能20%左右吧)
- jmeter 添加断言和查看断言结果
在对应的请求下添加响应断言,这里我们添加响应文本来作为检查点,来检查上面的这个请求是否成功 断言和断言结果是成对出现的,是为了检查我们添加的断言是否验证成功,如下图,如果成功,里面就会有对应的结果,且 ...
- AI大模型学习了解
# 百度文心 上线时间:2019年3月 官方介绍:https://wenxin.baidu.com/ 发布地点: 参考资料: 2600亿!全球最大中文单体模型鹏城-百度·文心发布 # 华为盘古 上线时 ...
- httpclint的传值和访问https
一.StringContent与FormUrlEncodedContent 可参考这篇文章写的非常好: https://blog.csdn.net/lxrj2008/article/details/7 ...
- vue-用户管理系统
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- laravel常用集合的使用
创建集合: //数组1 $connection = collect([ ['name'=>'jack','age'=>'18','email'=>'ceshi@qq.com'], [ ...