重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
公司的pyc做了加密, 前段时间研究了一下怎么解密.
目前创新互联公司已为千余家的企业提供了网站建设、域名、虚拟主机、网站托管维护、企业网站设计、平顺网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
最开始的思路是反汇编pypy的dll, 找到import代码的实现, 然后写一个解码的函数. 但是对反编译的东西不熟悉, 想要找到解密的地方比较困难. 最后放弃了这个思路.
后面看到了一篇pyc文件格式的文章, 得知pyc文件其实就是文件头+marshal编码后的python vm字节码, 所以尝试了hook一下marshal.loads
import marshal
old_loads = marshal.loads
count= 0
pyc_set = set()
def marshal_loads(s): global count pyc_hash= hashlib.md5(s).hexdigest() if pyc_hash in pyc_set: return old_loads(s) pyc_set.add(pyc_hash) count+= 1 x= "O_" + str(count) with open("./dumps/%s.pyc" % x, "wb") as f: f.write(base64.b32decode('BLZQ2CR54CUFU===')) f.write(s) print(1, len(s)) return old_loads(s) marshal.loads= marshal_loads