• 我们在哪一颗星上见过 ,以至如此相互思念 ;我们在哪一颗星上相互思念过,以至如此相互深爱
  • 我们在哪一颗星上分别 ,以至如此相互辉映 ;我们在哪一颗星上入睡 ,以至如此唤醒黎明
  • 认识世界 克服困难 洞悉所有 贴近生活 寻找珍爱 感受彼此

恶意代码技术理论:python语言恶意代码分析

基于语言 云涯 来源:鬼手56 3年前 (2021-05-12) 1698次浏览

pyinstaller打包成exe

  • –onefile 将结果打包成一个可执行文件
  • –onedir 将所有结果打包到一个文件夹中,该文件夹包括一个可执行文件和可执行文件执行时需要的依赖文件(默认)
  • –paths=DIR 设置导入路径
  • –distpath=DIR 设置将打包的结果文件放置的路径
  • –specpath=DIR 设置将spec文件放置的路径
  • –windowed 使用windows子系统执行,不会打开命令行(只对windows有效)
  • –nowindowed 使用控制台子系统执行(默认)(只对windows有效)
  • –icon=<FILE.ICO> 将file.ico添加为可执行文件的资源(只对windows有效)

pyc文件

pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。

pyo文件

pyo是优化编译后的程序

python -O 源文件即可将源程序编译为pyo文件

pyd文件

pyd是python的动态链接库

编译后exe

字符串特征

会看到__main__和__file__以及一堆以py开头的函数。

源码为:print(“hello word”), 明明只写了一个hello world,为什么会有这么多字符串呢?这是因为python是个解释型语言,pyinstaller打包的时候实际上是将python的解释器和py文件一起打包成了一个exe。所以这个字符串特征几乎是不可避免的

入口特征

在32位编译后exe第一个函数的else分支连续调用四个系统函数

编译器特征

可以看到hello.exe的编译器为VS14.0,这是因为python是基于VS14版本的,这也可以作为一个辨识的特征

反编译

首先由exe获取pyc文件,再由pyc获取py文件。

反编译python生成的exe需要用到pyinstaller库里的archive_viewer.py脚本。archive_viewer.py一共有四个可用命令:

U: go Up one level
O <name>: open embedded archive name
X <name>: extract name
Q: quit

由exe获取pyc

python archive_viewer.py C:\hello.exe

用pyinstaller打包后,pyc文件的前8个字节会被抹掉,所以最后要自己添加回去。前四个字节为python编译的版本,后四个字节为时间戳,时间戳可以任意,编译器版本python2.7 为03 f3 0d 0a,python3.4 为ee 0c 0d 0a

由pyc获取py

使用easy python decompiler将pyc转化为py文件

 

python代码混淆

python代码的混淆相对会比较简单,只是单纯利用宏替换的原理修改变量和函数名,这个网站是目前用的最多的python代码混淆工具:http://pyob.oxyry.com/,变量名被换掉了之外几乎没有任何改变。

替换变量名可修改混淆。


云涯历险记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:恶意代码技术理论:python语言恶意代码分析
喜欢 (1)