python逆向入门教程,python入门教程

发布时间:2018-11-15  栏目:Python  评论:0 Comments

本套教程15上(黑马程序员的讲课时到底的)

python逆向入门教程,python入门教程

学前环境搭建

1、开发条件

我们当Windows
10达到起来python逆向之同,首先初步搭建开发环境,python解释器使用最新的3.6.1,IDE使用PyCharm社区本2017.1.3,下载地址如下所示,下载就后一直双击安装包安装即可,随后设置PyCharm的Project
Interpreter为才设置之Python解释器就得了。

【Python】https://www.python.org/downloads/
【PyCharm】http://www.jetbrains.com/pycharm/download/\#section=windows

1-3 天内容也Linux基础命令

2、ctypes

率先介绍一下ctypes,它是一个用于Python的表函数库,提供了和C语言兼容的数据类型,允许调用动态链接库或联名享库中之函数,还足以包这些库。下面是ctypes中之数据类型与C语言、Python中的数据类型的呼应关系。

图片 1

ctypes中的数据类型全部通过class来兑现,在Python中加载C库涉及如下几单类似。

  1. class ctypes.CDLL
    加载共享库,使用标准C函数调用惯例即cdecl,返回路也int。
  2. class ctypes.OleDLL
    加载共享库,只用于Windows平台,使用stdcall函数调用惯例,返回路为HRESULT。
  3. class ctypes.WinDLL
    加载共享库,只用于Windows平台,使用stdcall函数调用惯例,返回路也int。
  4. class ctypes.PyDLL
    类似于CDLL,与眼前三个不同之凡,在函数调用期间不见面自由GIL,Global
    Interpreter Lock。
  5. class ctypes.LibraryLoader(dlltype)
    dlltype为CDLL、OleDLL、WinDLL、PyDLL,这个看似闹一个加载共享库的函数LoadLibrary。

加载C库更简明的计是以如下几个优先创建的好像实例。

ctypes.cdll
ctypes.oledll
ctypes.windll
ctypes.pydll
ctypes.pythonapi

方提到了函数调用惯例cdecl和stdcall,cdecl的意思是函数的参数从右侧为左依次压入栈内,函数的调用者在函数执行好以后承受函数的抵,常用于X86架构的C语言里,返回值存储于EAX寄存器中,从汇编代码的角度来拘禁,函数参数从右侧为左依次压栈,然后调用函数,最后修改栈指针ESP为本的职。stdcall,参数传递的逐条吗是于右边至左,不过栈的抵处理由函数自己就,而不是调用者,返回值同样存储于EAX中,也就是说,函数参数压栈、函数调用之后并未如cdecl一样的栈指针ESP移动。

下面的例子在Python中调用C的printf函数,printf属于“C:\Windows\System32\msvcrt.dll”,也就是Linux上的“libc.so”。

from ctypes import *

msvcrt = cdll.msvcrt
message = b"Hello World\n"
msvcrt.printf(b"Message is %s", message)

方的代码输出“Message is Hello
World”。另外,ctypes还允许在Python中定义结构以及一块等另高级功能,详细介绍请参考https://docs.python.org/3.6/library/ctypes.html?highlight=ctypes\#。

4-13 天内容吧Python基础教程

3、调试原理

采用调试器,能够针对程序进行动态跟踪及剖析,特别是涉嫌到exploit、fuzzer和病毒分析的时节,动态分析程序的能力就展示特别重要了。调试程序时,如果得以获源代码,调试起来就是便于有,也不怕是晶莹底白盒测试,如果没有源代码,也就是黑盒测试,想要博得可以之结果,那就必须怀有无瑕的逆向技术以及逆向工具的赞助。黑盒测试包括用户模式与基本模式简单种情形,两者发生异的权位。

CPU的寄存器能够对少量底多少进行快速的存取访问,在X86指令集里,一个CPU有八单通用寄存器:EAX、EDX、ECX、ESI、EDI、EBP、ESP和EBX,以及任何的寄存器,下面逐个介绍。
EAX:累加寄存器,除了用于存储函数的回来值外也用于实践计算的操作,许多优化的X86指令集都专门规划了对EAX寄存器的读写及测算指令。

EDX:数据寄存器,本质上是EAX寄存器的拉开,辅助EAX寄存器完成再多复杂的乘除操作。
ECX:计数寄存器,用于循环操作,计算是通往下而休是进步的,由大减到有些。
ESI:Source
Index,源操作数指针,存储在输入的数据流的职,用于读,高效地拍卖循环操作的多少。
EDI:Destination
Index,目的操作数指针,存储了匡结果存储的职,用于形容,高效地处理循环操作的数目。
ESP:Stack
Pointer,栈指针,负责函数的调用和仓库的操作,函数调用时压栈参数与归地址,指为栈顶即返地址。
EBP:Base
Pointer,基指针,负责函数的调用和库房的操作,函数调用时压栈参数和归地址,指为栈底。
EBX:唯一一个尚未特殊用途的寄存器,作为额外的多少存储器。
EIP:Instruction Pointer,指令指针,总是指于这要实行的下令。

习调试器的情侣等都明白断点,断点其实就是是一个调节事件,其它事件一经经的段落错误(Segment
Fault)等。断点包括软件断点、硬件断点和外存断点,用于暂停为实践顺序。

软件断点:一个单字节的命令,将控制权转移给调试器的断点处理函数。汇编指令是CPU执行之通令的高等代表法,如下面的汇编指令MOV
EAX,
EBX,告诉CPU把仓储于EBX寄存器里之事物放EAX寄存器,然而CPU并无晓得这汇编指令,必须换车为可知被CPU识别的操作码8BC3,假而即等同操作有在地址0x44332211,为了当此地方设置断点,暂停CPU,需要从2单字节的操作码8BC3遭易发一个单字节的操作码,这个单字节的操作码也即是3声泪俱下中断指令,INT3,一长能给CPU暂停的下令,对应之操作码为0xCC,具体而下面的代码有所示。当调试器被告知在目标地址设置一个断点时,它首先读取目标地点之首先只字节的操作码然后保存起来,同时把地址存储在里的中断列表中,接着,调试器把3号中断指令对应的操作码0xCC写及刚刚之地址,当CPU执行到替换后底操作码的时段,CPU暂停,并碰一个INT3事件,此时调试器就能捕捉到者事件,然后调试器通过EIP判断这个中断地址是否是咱安的断点,如果是,就把相应之操作码写回因恢复程序的正常化运行。软件断点包括一次性断点和持续性断点,前者生效一不好,后者直接生效,不奏效后用那从中断列表移除。需要小心的是,当我们改变了被调试程序的内存数据常常,同时更改了运行时软件之CRC即循环冗余代码校验和,CRC是一样种校验数据是否让转移的体制,广泛应用于文件、内存、文本、网络数据包等另想监视数据的地方,它将肯定范围外之数量进行hash计算,然后以hash值同以前之hash值进行比较,判断数是否改变,为了以这种特别之状下为克调试程序,就要采取下介绍的硬件断点了。

地址: 操作码 汇编指令
0x44332211: 8BC3 MOV EAX, EBX
0x44332211: CCC3 MOV EAX, EBX

硬件断点:在微片区域外安断点,属于CPU级别,使用了DR0到DR7共八单突出的调节寄存器,这些寄存器专门用来管理硬件断点。DR0到DR3存储硬件断点地址,意味着同一时间内最为多只能有4单硬件断点,DR4和DR5保留,DR6是状态寄存器,说明为断点触发的调节事件的门类,DR7凡开关寄存器,同时也蕴藏了断点的例外档次,包括指令执行时刹车、数据足以写副常暂停、有数据读或写不过无实施时停顿。硬件断点使用1号中断指令INT1,负责硬件中断和步进事件。硬件断点的表征是同一时间只能设置四个断点,而且断点起作用的区域只有来四只字节,如果想要跟一非常块内存数据,请动下介绍的内存断点。

内存断点:用于大块区域,不是的确的断点,而是改变了内存中某个块或者页的权位。一个外存页是操作系统处理的无限小的内存单位,一个内存页被提请成功后,就有着了一个权限集,如可执行页、可读页、可写页,这些决定了外存该如何被访问,任何针对保护页的造访都见面引发那个,之后页面恢复访问前的状态。

以上就是是本文的全部内容,希望对大家之学有帮助,也想大家多多支持帮客之寒。

http://www.bkjia.com/Pythonjc/1294210.htmlwww.bkjia.comtruehttp://www.bkjia.com/Pythonjc/1294210.htmlTechArticlepython逆向入门教程,python入门教程 1、开发条件
我们以Windows
10达到开始python逆向之一起,首先开始搭建开发条件,python解释器使用时的3.6.1,…

14-15 天内容为 飞机大战项目演练

直接上图吧

图片 2

有点大,总共有19G差不多!

用的留言我作你。

留下评论

网站地图xml地图