【笔记】汇编引擎-Keystone实用手册
# 前言本文就是写写Keystone咋用的
不涉及原理层面
# 地址
官方网站
https://www.keystone-engine.org/
Github
https://github.com/keystone-engine/keystone
我的博客(欢迎来踩)
https://kdajv.com/2021/07/21/capstoneengine/
# 介绍
Keystone是一个轻量级的多平台多架构的汇编框架,可以提供不少独特功能:
- 支持多框架:Arm, Arm64 (AArch64/Armv8), Ethereum Virtual Machine, Hexagon, Mips, PowerPC, Sparc, SystemZ & X86 (包括 16/32/64bit)。
- 干净/简单/轻量级/直观的API,同时不依赖任何架构。
- 以C/C++实现,可在众多语言里使用:Java、Masm、C#、PowerShell、Perl、Python、NodeJS、Ruby、Go、Rust、Haskell、VB6 和 OCaml。
- 原生支持Windows和\*nix系统(以下系统已确认支持:Mac OSX, Linux, \*BSD, Solaris)
- 线程安全的设计。
- 开源,具有双重许可证
# 使用
## 编译ShellCode(X86)
### Input
```python
from keystone import *
import sys
Shellcode_instruction = '''
xor eax, eax
push eax
push 0x68732f2f
push 0x6e69622f
mov ebx, esp
push eax
push ebx
mov ecx, esp
mov al, 0xb
int 0x80
'''
KS = Ks(KS_ARCH_X86, KS_MODE_64)
code, count = KS.asm(Shellcode_instruction)
print(f"Source\t{code}")
print(f"Bytes\t{b''.join(map(lambda x: x.to_bytes(1, sys.byteorder), code))}")
print(f"Count\t{count}")
```
### Output
```python
Source
Bytes b'1\xc0Ph//shh/bin\x89\xe3PS\x89\xe1\xb0\x0b\xcd\x80'
Count 11
```
## 编译ShellCode(X86-64)
### Input
```python
from keystone import *
import sys
Shellcode_instruction = '''
xor rdx, rdx
mov rbx, 0x68732f6e69622f2f
shr rbx, 0x8
push rbx
mov rdi, rsp
push rax
push rdi
mov rsi, rsp
mov al, 0x3b
syscall
'''
KS = Ks(KS_ARCH_X86, KS_MODE_64)
code, count = KS.asm(Shellcode_instruction)
print(f"Source\t{code}")
print(f"Bytes\t{b''.join(map(lambda x: x.to_bytes(1, sys.byteorder), code))}")
print(f"Count\t{count}")
```
### Output
```python
Source
Bytes b'H1\xd2H\xbb//bin/shH\xc1\xeb\x08SH\x89\xe7PWH\x89\xe6\xb0;\x0f\x05'
Count 10
``` 感谢,最近需要shellcode的生成
页:
[1]