PyEmu源码阅读笔记

三大COVID-19肺部CT开源数据集评测与应用指南 本文深度评测了COVID-19肺部CT影像分析领域三大主流开源数据集:COVID-CT-Dataset、CC-CCII和SARS-COV-2。文章从数据规模、标注质量、来源异质性等核心维度进行对比,并提供了从数据选择、下载、预处理到模型训练的一站式实战指南与避坑技巧,旨在帮助研究者和开发者高效启动医学影像AI项目。 阅读详情
PyEmu是一个用python编写的x86指令仿真器,所谓仿真器就是个类似沙盒或虚拟机的东西,在仿真器下运行的程序将被完全掌控,所有代码由仿真器模拟执行,具有极强的可控性并且恶意软件一般也无法对机器造成伤害
PyEmu由于作者的精心编写以及python语言本身的优点使得PyEmu源码具有极强的可读性

This is a short readme describing the layout of PyEmu.

PyContext.py: A module containing a class for defining a context to pass between modules in the emulator
PyCPU.py: The CPU class implements each instruction and is responsible for executing and maintaining state
PyDebug.py: A simple class to ease some debugging tasks
PyEmu.py: The user facing class that implements the public methods available for use.  Also is responsible for initiating the memory and cpu classes
PyInstruction.py: A helper class for providing abstracted access to the pydasm instruction structures
PyMemory.py: A module containing the memory managers responsible for fetching and storing memory
PyOS.py: A rough implementation of needed OS specific structures for process creation and control.
lib/
    pefile.py: Ero Carrera's pefile implementation
    pydasm.pyd: Ero Carrera's libdasm python wrapper
    ctypes/_ctypes.pyd: Ctypes library needed for PyOS.py

这是PyEmu的README文件,简短的描述了代码的文件组织、结构,其中lib目录中是3个库文件,一个是python标准库ctypes,用来让python拥有像c语言一样的底层控制能力,pefile文件则包含一些对于pe格式文件的结构定义、操作。pydasm则是反汇编引擎libdasm库,作为一个仿真器在仿真之前首先要做的就是理解x86机器码的意图,所以一个反汇编引擎是必须的。
再看PyEmu仿真器主要由3个子系统构成:PyCPU、PyMemory、PyEmu,也是3个主要类的名字。其中PyCPU是最为核心的一个类,负责大量复杂的工作,从上W行的代码量就可以看出,所以暂时不去管它
PyEmu就是一个仿真器的抽象,负责处理任何来自用户的意图,并负担起指挥PyCPU,PyMemory运行的重则,而在其之上继承出了3个子类PyDbgPyEmu、IDAPyEmu、PEPyEmu用以支持PyDbg,IDA,以及独立使用的仿真器,整体结构如下:

PyCPU                    PyMemory
    |                              |
    |                              |
    |________  ________|                
                    |
                PyEmu

其实如果去看源码的话会发现,暂时不去考虑PyCPU和PyMemory的话PyEmu这个类是非常好理解的,它利用PyCPU和PyMemory的强大能力,提供了一系列的字典用来存储各种调试器中的各种内存,堆栈,代码,异常断点处理例程功能给用户使用,达到和调试器一样的效果,然后一些信息的获取就是简单地封装了底层PyCPU和PyMemory类的方法
下面贴出PyEmu源代码的缩略版,以便更清楚的观察PyEmu的实现,根据名字就可以简单地判断函数的功能:


#!/usr/bin/env python

########################################################################
#
# PyEmu: scriptable x86 emulator
#
#
# License: None
#
########################################################################


sys.path.append(r'C:\Program Files\IDA\python')

from PyCPU import PyCPU
from PyContext import PyContext
from PyMemory import *
from PyOS import *

'''
PyEmu:

    The main emulator class.  This class implements the public methods
    for controlling the emulator.  This includes handlers, and initialization.
'''
class PyEmu:
    DEBUG = 0
   
    def __init__(self):


    #
    # raise_exception: This method gets called when an exception happens
    #
    def raise_exception(self, exception, address):
    #
    # debug: A public method for setting global debug levels
    #
    def debug(self, level):
    
   
    #
    # execute: A public method for executing instructions
    #
    def execute(self, steps=1, start=0x0, end=0x0):
   
    #
    # get_register: A public method to retrieve a register for the user
    def get_register(self, register):
   
    #
    # set_register: A public method for setting a registers value
    #
    def set_register(self, register, value, name=""):
   
    #
    # get_stack_variable: A public method for setting stack local variables
    #
    def get_stack_variable(self, offset, size=0):
   
    #
    # set_stack_variable: A public method for setting a local stack variable
    #
    def set_stack_variable(self, offset, value, size=0, name=""):
   
    #
    # get_stack_argument: A public method to get a functions stack argument
    #
    def get_stack_argument(self, offset, size=0):
   
    #
    # set_stack_argument: A public method to set up a stack argument
    #
    def set_st
逆向工程与模拟器:PyEmu的使用 本文介绍了如何使用PyEmu模拟器进行逆向工程。首先,展示了如何设置EIP寄存器以指向函数的入口点,并设置函数调用的参数。接着,通过编写retn指令处理器来分析函数调用的结果。此外,本文还探讨了使用PEPyEmu来解压UPX打包的可执行文件,并详细说明了解压过程中的每一步操作,包括如何通过模拟器运行解包例程以及如何检测解包完成后的跳转指令。最后,本文演示了如何将解压后的二进制文件转储到磁盘上,以便进行进一步的静态分析。 阅读详情

相关推荐

PyEMU

PyEMU

熬夜整理出的资源,这里有123个黑客必备的Python工具

熬夜整理出的资源,这里有123个黑客必备的Python工具

Python单行客的博客 1542

pyemu-0.0.2.zip

pyemu,python实现的仿真器,能够仿真windows平台下的程序运行

关于Code Virtualizer pcode解密的一种方法

原文链接:http://bbs.pediy.com/showthread.php?t=137265 【详细过程】   1.VM的解密算法    一般情况下Code Virtualizer的解密有三个运算:add,sub,xor,有如下计算;      loads/b/w/d

学习........ 2052

探索模型不确定性与数据价值:PyEMU,Python的不确定性和数据价值分析利器

探索模型不确定性与数据价值:PyEMU,Python的不确定性和数据价值分析利器 项目介绍 PyEMU(Python Environmental Modeling Uncertainty)是一个强大的Python库,专门用于模型独立的首阶二乘法(First-Order, Second-Moment)不确定性分析和数据价值评估。它还支持非线性不确定性的处理,并与PEST和PEST++接口无缝集成。P...

gitblog_00013的博客 507

如何成为一名黑客?带你走进黑客世界

黑客攻防是一个极具魅力的技术领域,但成为一名黑客毫无疑问也并不容易。你必须拥有对新技术的好奇心和积极的学习态度,具备很深的计算机系统、和操作系统知识,并乐意不断地去学习和进步。一、选择如果想成为一名黑客,肯定需要一门精通的高级语言。这里推荐使用入门.当然这只是我个人的意见。是一种面向对象、直译式电脑,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。

2401_85026291的博客 2179
上一篇: 《程序员密码学》之大数算数&Eratosthenes素数筛选
下一篇: uva 565 Pizza Anyone?
stackoverlow
博客等级 码龄16年 40粉丝 58原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值