图1::Immunity主界面

注意事项:最下方的PyCommands窗格既可以执行调试命令也可以执行python脚步文件。

1、PyCommands学习

在 Immunity 中执行 Python 的方法即使用 PyCommands。PyCommands 就是一个个 python 脚本文件,存放在 Immunity 安装目录的 PyCommands 文件夹里。每个 python 脚本都执行一 个任务(hooking,静态分析等待),相当于一个 PyCommand。每个 PyCommand 都有一个 特定的结构。以下就是一个基础的模型:

from immlib import *
def main(args):
# Instantiate a immlib.Debugger instance
imm = Debugger()
return "[*] PyCommand Executed!"

PyCommand 有两个必备条件。一个 main()函数,只接收一个参数(由所有参数组成的 python 列表)。另一个必备条件是在函数执行完成的时候必须返回一个字符串,最后更新在 调试器主界面的状态栏。执行命令之前必须在命令前加一个感叹号。

!<scriptname>

2、PyHooks

Immunity 调试器包含了 13 总不同类型的 hook。每一种 hook 都能单独实现,或者嵌入 PyCommand。

BpHook/LogBpHook

当一个断点被触发的时候,这种 hook 就会被调用。两个 hook 很相似,除了 BpHook 被 触发的时候,会停止被调试的进程,而 LogBpHook 不会停止被调试的进程。

AllExceptHook

所有的异常的都会触发这个 hook。

PostAnalysisHook

在一个模块被分析完成的时候,这种 hook 就会被触发。这非常有用,当你在在模块分 析完成后需要进一步进行静态分析的时候。记住,在用 immlib 对一个模块进行函数和基础 块的解码之前必须先分析这个模块。

AccessViolationHook

这个 hook 由访问违例触发。常用于在 fuzz 的时候自动化捕捉信息。

LoadDLLHook/UnloadDLLHook

当一个 DLL 被加载或者卸载的时候触发。

CreateThreadHook/ExitThreadHook

当一个新线程创建或者销毁的时候触发。

CreateProcessHook/ExitProcessHook

当目标进程开始或者结束的时候触发。

FastLogHook/STDCALLFastLogHook

这两种 hook 利用一个汇编跳转,将执行权限转移到一段 hook 代码用以记录特定的寄存 器,和内存数据。当函数被频繁的调用的时候这种 hook 非常有用;第六章将详细讲解。

以下的 LogBpHook 例子代码块能够作为 PyHook 的模板。

from immlib import *
class MyHook( LogBpHook ):
def init ( self ):
LogBpHook. init ( self )
def run( regs ):
# Executed when hook gets triggered

我们重载了 LogBpHook 类,并且建立了 run()函数(必须)。当 hook 被触发的时候,所 有的 CPU 寄存器,以及指令都将被存入 regs,此时我们就可以修改它们了。regs 是一个字 典,如下访问相应寄存器的值:

regs["ESP"]

hook 可以定义在 PyCommand 里,随时调用。也可以写成脚本放入 PyHooks 目录。每 次启动 Immunity 都会制动加载这些目录。接下来看些实例。

Immunity Debugger学习笔记的更多相关文章

  1. Immunity Debugger学习

    1.Immunity Debugger简介 Immunity Debugger软件专门用于加速漏洞利用程序的开发,辅助漏洞挖掘以及恶意软件分析.它具备一个完整的图形用户界面,同时还配备了迄今为止最为强 ...

  2. Immunity Debugger学习 二

    1.Exploit开发 发现漏洞只是一个开始,在你完成利用程序之前,还有很长一段路要走.不过Immunity专门为了这项任务做了许多专门设计,相信能帮你减少不少痛苦.接下来我们开发一些PyComman ...

  3. gulp学习笔记4

    gulp系列学习笔记: 1.gulp学习笔记1 2.gulp学习笔记2 3.gulp学习笔记3 4.gulp学习笔记4 之前的任务都是单个的,比较简单.接下去我们开始引用多个插件,一次性把任务搞定,省 ...

  4. python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容

    python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...

  5. Dynamic CRM 2013学习笔记(十六)用JS控制Tab可见,可用

    一个Form里经常会有好几个Tab,有时要根据一些条件设置哪些Tab可用,可见.下面就介绍下如何用JS对Tab进行控制. 1. 控制可见   function setTabVisableByName( ...

  6. Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能

    前面介绍过如何克隆一条当前的记录: Dynamic CRM 2013学习笔记(十四)复制/克隆记录 , 主要是通过界面上加一个字段,单击form上的clone 按钮时,改变这个字段的值以触发插件来实现 ...

  7. EPROCESS 进程/线程优先级 句柄表 GDT LDT 页表 《寒江独钓》内核学习笔记(2)

    在学习笔记(1)中,我们学习了IRP的数据结构的相关知识,接下来我们继续来学习内核中很重要的另一批数据结构: EPROCESS/KPROCESS/PEB.把它们放到一起是因为这三个数据结构及其外延和w ...

  8. 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式

    正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...

  9. Windows phone 8 学习笔记(6) 多任务

    原文:Windows phone 8 学习笔记(6) 多任务 Windows phone 8 是一个单任务操作系统,任何时候都只有一个应用处于活跃状态,这里的多任务是指对后台任务的支持.本节我们先讲讲 ...

随机推荐

  1. Linux rm的一次误用

    今天在Linux下误用了一次rm -rf,经历惨痛,记录一下. 原因是我删除了一个文件到回收站,然后点错了将home下的所有东西都删到了回收站,然后我又从回收站拷贝回home目录而不是使用恢复,因为h ...

  2. L2-003. 月饼(贪心)

    L2-003. 月饼 简单的结构体和排序应用题 #include<iostream> #include<stdio.h> #include<algorithm> u ...

  3. MySQL错误代码

    常见: 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败 1010:不能删 ...

  4. pandas DataFrame 索引(iloc 与 loc 的区别)

    Pandas--ix vs loc vs iloc区别 0. DataFrame DataFrame 的构造主要依赖如下三个参数: data:表格数据: index:行索引: columns:列名: ...

  5. kafka集群安装,配置

    1.安装+配置(集群) 192.168.0.10.192.168.0.11.192.168.0.12(每台服务器kafka+zookeeper) # kafka依赖java环境,需要提前安装好jdk. ...

  6. 在intent-filter中的配置

    1.scheme约束和mimetype的数据类型,这些都可以自己去定义. 2.但是由于在MainActivity却不能直接将这两个参数分开来写,例如setdata和settype,这样会互相删除. 因 ...

  7. CF1142E/1143B Lynyrd Skynyrd

    CF1142E/1143B Lynyrd Skynyrd 开始读错题了,以为是连续的一段,敲完后才发现是 \(subsequence\) ... 考虑对于 \(a\) 中的每个 \(a_i\) 找到它 ...

  8. CTF-练习平台-Misc之 细心的大象

    十五.细心的大象 打开图片属性 发现备注里有短信息,看着也不像flag,仔细观察里面只有只有大小写字母和数字应该是base64编码,解密后得到:MSDS456ASD123zz 好像也不是flag,题目 ...

  9. HDU1423 Greatest Common Increasing Subsequence

    题意 如标题. \(|s1|,|s2| \leq 500\) 分析 既然是dp问题的组合,那么考虑dp. 定义状态f(i,j)表示对第一个序列s1的前i个和第二个序列s2的前j个元素求最长上升公共子序 ...

  10. 偶尔用得上的Git操作

    Git 工作流 一个不错的工作流图示 创建一个空分支 git checkout --orphan 分支名 删除远程分支和tag git push origin :<branchName> ...