记得之前在freebuf看过一篇文章,《Python黑客学习笔记:从HelloWorld到编写PoC》,应该是翻译稿~
里面好像有一篇写到,python脚本转exe,免去环境的苦恼~~
感觉大学都白学了C了,很多东西没有用C实现。
windows下的服务器环境上传nc或者其他的反弹shell脚本又显得很麻烦。
所以如果用python打造出一款简单粗暴,又免环境困扰的小工具还是不错的。
00x1 使用PyInstaller生成可以执行程序
python脚本编译成windows下可执行文件,它可以让你的python脚本跨平台去运行,并且不需要去安装python解释器。首先我们需要下载依赖包。
装最新版本的 pywin32:
https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/pywin32-221.win32-py2.7.exe/download
下载pyinstaller并解压(可以去官网下载最新版):
https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/pywin32-221.win-amd64-py2.7.exe/download
安装PIL-1.1.7.win32-py2.7的时候,无法在注册表中识别出来python2.7
方法:新建一个register.py 文件,把一下代码贴进去,保存
http://effbot.org/zone/python-register.htm
显示“python 2.7 is already registered”
再安装setuptools的时候,就能自动识别出来python2.7了。
win7是 64的原因,在安装python(32位)时,如果选择只为当前用户,以上问题是不会出现的,如果选择所有用户,那就用上面的方法解决吧。
安装完环境之后进入cmd ,运行python pyinstaller.py
如果没有安装pywin32的环境
就会提示如下的错误,安装好就会提示usage。
以下是pyinstall的参数列表:
指定打包后只生成一个exe格式的文件
然后我们在用以下python代码生成exe文件:
#encoding:utf-8
import os
import re
remote_port = os.popen('REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber')
port = remote_port.read()
get = re.compile('0x.*?\S+')
port = get.findall(port)
port = port[0]
port = int(port,16)
print """
Read the RDP port
--by vaf
"""
if get:
print " port is:"+str(port)
else:
print " read fair"
原理就是读取注册表中的值
我建议用32位的python环境生成,我以上附的下载链接是64位的,用32位的环境生成的好处就是几乎可以在所有的windows环境运行。正常来说都是向下支持。