首页 > 其他分享 >Unicorn备忘录

Unicorn备忘录

时间:2023-01-31 17:58:55浏览次数:45  
标签:ERR HOOK MEM PROT 备忘录 MODE Unicorn UC

摘自https://bbs.kanxue.com/thread-224330.htm#msg_header_h3_7_,个人存档用

from unicorn import * - 加载Unicorn库。包含一些函数和基本的常量。

from unicorn.x86_const import* - 加载 X86 和X64架构相关的常量

所有unicorn模块中的常量

UC_API_MAJOR                UC_ERR_VERSION              UC_MEM_READ                 UC_PROT_ALL
UC_API_MINOR                UC_ERR_WRITE_PROT           UC_MEM_READ_AFTER           UC_PROT_EXEC
UC_ARCH_ARM                 UC_ERR_WRITE_UNALIGNED      UC_MEM_READ_PROT            UC_PROT_NONE
UC_ARCH_ARM64               UC_ERR_WRITE_UNMAPPED       UC_MEM_READ_UNMAPPED        UC_PROT_READ
UC_ARCH_M68K                UC_HOOK_BLOCK               UC_MEM_WRITE                UC_PROT_WRITE
UC_ARCH_MAX                 UC_HOOK_CODE                UC_MEM_WRITE_PROT           UC_QUERY_MODE
UC_ARCH_MIPS                UC_HOOK_INSN                UC_MEM_WRITE_UNMAPPED       UC_QUERY_PAGE_SIZE
UC_ARCH_PPC                 UC_HOOK_INTR                UC_MILISECOND_SCALE         UC_SECOND_SCALE
UC_ARCH_SPARC               UC_HOOK_MEM_FETCH           UC_MODE_16                  UC_VERSION_EXTRA
UC_ARCH_X86                 UC_HOOK_MEM_FETCH_INVALID   UC_MODE_32                  UC_VERSION_MAJOR
UC_ERR_ARCH                 UC_HOOK_MEM_FETCH_PROT      UC_MODE_64                  UC_VERSION_MINOR
UC_ERR_ARG                  UC_HOOK_MEM_FETCH_UNMAPPED  UC_MODE_ARM                 Uc
UC_ERR_EXCEPTION            UC_HOOK_MEM_INVALID         UC_MODE_BIG_ENDIAN          UcError
UC_ERR_FETCH_PROT           UC_HOOK_MEM_PROT            UC_MODE_LITTLE_ENDIAN       arm64_const
UC_ERR_FETCH_UNALIGNED      UC_HOOK_MEM_READ            UC_MODE_MCLASS              arm_const
UC_ERR_FETCH_UNMAPPED       UC_HOOK_MEM_READ_AFTER      UC_MODE_MICRO               debug
UC_ERR_HANDLE               UC_HOOK_MEM_READ_INVALID    UC_MODE_MIPS3               m68k_const
UC_ERR_HOOK                 UC_HOOK_MEM_READ_PROT       UC_MODE_MIPS32              mips_const
UC_ERR_HOOK_EXIST           UC_HOOK_MEM_READ_UNMAPPED   UC_MODE_MIPS32R6            sparc_const
UC_ERR_INSN_INVALID         UC_HOOK_MEM_UNMAPPED        UC_MODE_MIPS64              uc_arch_supported
UC_ERR_MAP                  UC_HOOK_MEM_VALID           UC_MODE_PPC32               uc_version
UC_ERR_MODE                 UC_HOOK_MEM_WRITE           UC_MODE_PPC64               unicorn
UC_ERR_NOMEM                UC_HOOK_MEM_WRITE_INVALID   UC_MODE_QPX                 unicorn_const
UC_ERR_OK                   UC_HOOK_MEM_WRITE_PROT      UC_MODE_SPARC32             version_bind
UC_ERR_READ_PROT            UC_HOOK_MEM_WRITE_UNMAPPED  UC_MODE_SPARC64             x86_const
UC_ERR_READ_UNALIGNED       UC_MEM_FETCH                UC_MODE_THUMB              
UC_ERR_READ_UNMAPPED        UC_MEM_FETCH_PROT           UC_MODE_V8                 
UC_ERR_RESOURCE             UC_MEM_FETCH_UNMAPPED       UC_MODE_V9

一些unicorn.x86_const中的常量

UC_X86_REG_EAX
UC_X86_REG_RIP
UC_X86_REG_RAX

mu = Uc(arch,mode) - 获取Uc实例。在这里指定目标架构,例如:

  • mu = Uc(UC_ARCH_X86,UC_MODE_64) - 获取X86-64架构的实例。
  • mu = Uc(UC_ARCH_X86,UC_MODE_32) - 获取X86-32架构的实例。

mu.mem_map(ADDRESS,4096) - 映射一片内存区域

mu.mem_write(ADDRESS,DATA) - 向内存中写入数据

tmp = mu.mem_read(ADDRESS,SIZE) - 从内存中读取数据

mu.reg_write(UC_X86_REG_ECX,0X0) - 设置ECX值。

r_esp = mu.reg_read(UC_X86_REG_ESP) - 读取ESP的值。

mu.emu_start(ADDRESS_START,ADDRESS_END) - 开始执行模拟。

命令追踪:

def hook_code(mu, address, size, user_data): 
    print('>>> Tracing instruction at 0x%x, instruction size = 0x%x' %(address, size)) 
 
mu.hook_add(UC_HOOK_CODE, hook_code)

这段代码添加了一个HOOK(向Unicorn引擎中),我们定义的函数会在执行每一条命令之前被执行。参数含义如下:

  • Uc实例
  • 指令的地址
  • 指令的长度
  • 用户定义数据(通过hook_add()函数传递)

标签:ERR,HOOK,MEM,PROT,备忘录,MODE,Unicorn,UC
From: https://www.cnblogs.com/Here-is-SG/p/17080045.html

相关文章

  • 备忘录——win10系统中SVNClient 连接超时
    问题:win10笔记本使用华为SVNClient连接超时解决方案1.设备管理器-->网络适配器-->SVNAdapterV1.0,右键选择禁用设备.2.进入C:\Windows\System32\drivers目录下,替......
  • 22.(行为型模式)java设计模式之备忘录模式
    一、什么是备忘录模式(MementoPattern)定义:在不破坏封闭的前提下,捕获⼀个对象的内部状态,保存对象的某个状态,以便在适当的时候恢复对象,⼜叫做快照模式,属于⾏为模式。备......
  • 学习记录-备忘录模式
    备忘录模式备忘录模式(MementoPattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。介绍意图:在不破坏封装性的前提下,捕获一个对象的内......
  • Oracle11g Rman备份备忘录
    0x00 rman是什么RecoveryManager(RMAN) rman就是oracle官方推出的一种物理备份工具,以oracleblock为读取单位可以结合expdp使用做备份,可以实现更小粒度的备份。rman......
  • 怎么把抖音图片上的文字符号提取出来?用手机备忘录轻松提取文字
    谈起新媒体渠道,短视频平台是不可忽视的,而抖音就是短视频平台的代表之一。现在很多年轻人都喜欢通过抖音来分享有趣的日常生活,不过有的网友在刷抖音视频的时候,发现视频中显......
  • 使用Python制作自动推送微信消息提醒的备忘录功能
    日常工作生活中,事情一多,就会忘记一些该做未做的事情。即使有时候把事情记录在了小本本上或者手机、电脑端备忘录上,也总会有查看不及时,导致错过的尴尬。如果有一款小工具,可......
  • 华为手机上的备忘录内容如何导出到电脑
    说起国产手机的代表,很多人想到的都是华为手机,而华为手机凭借着流畅的系统、强悍的性能、时尚的外观设计、优秀的摄影摄像获得了广大消费者的青睐,所以现在使用华为手机的用......
  • 可以显示字数的记事本APP哪个好用?网上很火的备忘录
    有不少网友表示自己在手机上使用的记事本APP虽然可以编辑文字内容保存,但是不支持实时统计字数,在写作时非常不方便。此外对于上班族来说,在手机和电脑上都需要随手记事,而手......
  • 备忘录模式
    java//Caretaker.javapackageshiyan20;publicclassCaretaker{   privateMemento[]array=null;   privateintindex;   privateMementomemento;  ......
  • .net 基础服务开源战略规划备忘录
    .net开源技术方向战略备忘记录公司现状1.技术人员水平限制:基础研发人员技术细节,性能处理能力不足,技术视野不够开阔;甚至一些高可用,高性能方案......