护网行动中的小坑,这次是py3的编码,有时候还需要打印中文
# python3 编码小结
缘由: 公安部组织的护网行动期间,蓝方攻击小队也允许在一定范围内以邮件方式投递payload。可能免杀不过关吧,蓝队会直接将payload加密,而在正文中给出密码。对于这种异常的投递方式,我们的想法是先识别出来,然后通过安全人员追加提醒邮件,确认是否已经解压执行。(fireeye还是领先一步的,沙箱已经实现了密码自提取后执行功能)。
# gb2312
工作过程中发现需要对多个设备,邮件网关、PA墙、APT设备识别可疑邮件,然后就发现了这么1种格式
=?gb2312?B?cHl0aG9uIGNvZGUgdGVzdCE==?=
google后知道,它是1种gb2312编码 后再base64编码的组合编码方式。起初是自己手工,切头切尾strip("=?gb2312?B?").strip("=?=")。 然后再按两种方式进行解码。
#method-1
import base64
a = 'cHl0aG9uIGNvZGUgdGVzdCE='
a = (base64.b64decode(a))
a = a.decode('gb2312')#此处a为bytes,在py3中不需要再编码了,直接转为gb2312就可以。
print(a)
结果:
python code test!
后面才知道这是smtp等协议里面常见的编码方式。已经在email库里面实现好了。
#method-2
import email
def gb2312(txt):
dh = email.header.decode_header(txt)
if type(dh[0][0]) == type(bytes()):
return (dh[0][0]).decode('gb2312')
在pa墙中,有时候你会遇到不是以=?=结尾的,所以如果使用method-1来解码,还需要判断下。
txt = txt + ("=?=" if not txt.endwith("=?=") else "")