【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )
生活随笔
收集整理的這篇文章主要介紹了
【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、創建 Capstone 反匯編解析器實例對象
- 二、設置 Cs 匯編解析器顯示細節
一、創建 Capstone 反匯編解析器實例對象
使用 Capstone 反匯編框架 ,
首先創建 Capstone 反匯編解析器對象 , 即 Cs 類實例對象 ;
構造函數原型如下 :
class Cs(object):def __init__(self, arch, mode):創建 Capstone 實例對象代碼 : 下面代碼創建的是 x86 架構的 32 位模式的 Cs 對象 , 也就意味著反匯編的 ELF 文件是 32 位 x86 CPU 架構的動態庫 ;
Cs(CS_ARCH_X86, CS_MODE_32)第一個參數是 CPU 架構 , 第二個參數是 CPU 位數模式 ;
CPU 架構選擇 : 有如下可選項 ; 99% 的情況下使用的是 CS_ARCH_ARM , CS_ARCH_ARM64 , CS_ARCH_X86 這三種情況 ; 其中 Android 逆向中 , CS_ARCH_ARM 和 CS_ARCH_ARM64 用的最多 ;
# architectures CS_ARCH_ARM = 0 CS_ARCH_ARM64 = 1 CS_ARCH_MIPS = 2 CS_ARCH_X86 = 3 CS_ARCH_PPC = 4 CS_ARCH_SPARC = 5 CS_ARCH_SYSZ = 6 CS_ARCH_XCORE = 7 CS_ARCH_M68K = 8 CS_ARCH_TMS320C64X = 9 CS_ARCH_M680X = 10 CS_ARCH_EVM = 11 CS_ARCH_MAX = 12 CS_ARCH_ALL = 0xFFFFCPU 位數模式 : 每種 CPU 架構都分 32 位 , 64 位 模式 ;
# disasm mode CS_MODE_LITTLE_ENDIAN = 0 # little-endian mode (default mode) CS_MODE_ARM = 0 # ARM mode CS_MODE_16 = (1 << 1) # 16-bit mode (for X86) CS_MODE_32 = (1 << 2) # 32-bit mode (for X86) CS_MODE_64 = (1 << 3) # 64-bit mode (for X86, PPC) CS_MODE_THUMB = (1 << 4) # ARM's Thumb mode, including Thumb-2 CS_MODE_MCLASS = (1 << 5) # ARM's Cortex-M series CS_MODE_V8 = (1 << 6) # ARMv8 A32 encodings for ARM CS_MODE_MICRO = (1 << 4) # MicroMips mode (MIPS architecture) CS_MODE_MIPS3 = (1 << 5) # Mips III ISA CS_MODE_MIPS32R6 = (1 << 6) # Mips32r6 ISA CS_MODE_MIPS2 = (1 << 7) # Mips II ISA CS_MODE_V9 = (1 << 4) # Sparc V9 mode (for Sparc) CS_MODE_QPX = (1 << 4) # Quad Processing eXtensions mode (PPC) CS_MODE_M68K_000 = (1 << 1) # M68K 68000 mode CS_MODE_M68K_010 = (1 << 2) # M68K 68010 mode CS_MODE_M68K_020 = (1 << 3) # M68K 68020 mode CS_MODE_M68K_030 = (1 << 4) # M68K 68030 mode CS_MODE_M68K_040 = (1 << 5) # M68K 68040 mode CS_MODE_M68K_060 = (1 << 6) # M68K 68060 mode CS_MODE_BIG_ENDIAN = (1 << 31) # big-endian mode CS_MODE_MIPS32 = CS_MODE_32 # Mips32 ISA CS_MODE_MIPS64 = CS_MODE_64 # Mips64 ISA CS_MODE_M680X_6301 = (1 << 1) # M680X HD6301/3 mode CS_MODE_M680X_6309 = (1 << 2) # M680X HD6309 mode CS_MODE_M680X_6800 = (1 << 3) # M680X M6800/2 mode CS_MODE_M680X_6801 = (1 << 4) # M680X M6801/3 mode CS_MODE_M680X_6805 = (1 << 5) # M680X M6805 mode CS_MODE_M680X_6808 = (1 << 6) # M680X M68HC08 mode CS_MODE_M680X_6809 = (1 << 7) # M680X M6809 mode CS_MODE_M680X_6811 = (1 << 8) # M680X M68HC11 mode CS_MODE_M680X_CPU12 = (1 << 9) # M680X CPU12 mode CS_MODE_M680X_HCS08 = (1 << 10) # M680X HCS08 mode二、設置 Cs 匯編解析器顯示細節
創建完 Capstone 匯編解析器 Cs 對象后 ,
一定要設置匯編解析器實例對象的 detail 為 true , 作用是 表示需要顯示細節 , 打開后 , 會標明每條匯編代碼中對寄存器的影響 ; 如 : 本條匯編代碼中 , 會讀寫哪些寄存器 ;
# 創建 Capstone 實例對象x86 = Cs(CS_ARCH_X86, CS_MODE_32)# 此處設置為 true , 表示需要顯示細節 , 打開后 , 會標明每條匯編代碼中對寄存器的影響# 如 : 本條匯編代碼中 , 會讀寫哪些寄存器x86.detail = True總結
以上是生活随笔為你收集整理的【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】使用 Pytho
- 下一篇: 【Android 逆向】使用 Pytho