当前位置:   article > 正文

【软件逆向-自动化】逆向工具大全

逆向工具

目录

一、逆向工具大全

二、IDAPython

2.1、简介:

2.2、使用:

三、PythonGdb

3.1、简介:

3.2、使用:

四、pydbg

4.1、简介:

4.2、使用:

五、Angr

5.1、简介:

5.2、使用:


一、逆向工具大全

Python arsenal for REicon-default.png?t=M5H6https://pythonarsenal.com/



二、IDAPython

2.1、简介:

IDAPython集成了Python解释器,提供了Python功能,使用这个插件还可以编写实现IDC脚本语言的所有Python脚本

优势:拥有Python强大的数据处理能力及所有的Python模块,具有IDA SDK的大部分功能,与IDC相比,使用它可以编写功能更加强大的脚本


IDAPython由三个独立模块组成:

idc,它是封装IDA的IDC函数的兼容性模块

idautils,这是IDA里的一个高级实用功能模块

idaapi,它允许访问更加底层的数据

2.2、使用:

默认安装的IDA中已经内置了IDAPython插件,因此我们只需要通过菜单栏选择File→Script file,然后选择要执行的Python脚本即可运行

能调用到的接口位于idaapi、idautils和idc三个模块中


文档:https://www.hex-rays.com/products/ida/support/idapython_docs/icon-default.png?t=M5H6https://www.hex-rays.com/products/ida/support/idapython_docs/



三、PythonGdb

3.1、简介:

Gdb本来就支持自定义脚本辅助调试,但因为自定义脚本的语法比较老,借助Python,可以把数据变得更好看,可以将重复的工作变成一个命令,可以更快的调试bug

3.2、使用:

断点功能

class OnBreakpoint(gdb.Breakpoint):
        def __init__(self, loc, callback):
                if isinstance(loc, int):
                        loc = '*'+hex(loc)
                super(OnBreakpoint, self).__init__(loc, gdb.BP_BREAKPOINT, internal=False)
                self.callback = callback
def stop(self):
                self.callback()
                return False


寄存器和内存操作

def get_reg(reg):
        return int(gdb.parse_and_eval("$"+reg))
        def set_reg(reg, value):
        return gdb.execute("set $"+reg+" "+str(value))
def read_mem(address, length):
        inferior = gdb.selected_inferior()
        return inferior.read_memory(address, length)
def write_mem(address, value):
        inferior = gdb.selected_inferior()
        return inferior.write_memory(address, value)


文档:

PythonGdbTutorial - GDB Wiki (sourceware.org)icon-default.png?t=M5H6https://sourceware.org/gdb/wiki/PythonGdbTutorial



四、pydbg

4.1、简介:

基于Python实现的一个Windows调试器框架,可以实现对Windows下程序的自动化调试。

使用PyDbg只需要构建一个用户模式的回调函数,当收到一个调试事件的时候,回调函数执行我们定义的操作。操作完成后,再将权限交还给调试器,回复被调试的进程

4.2、使用:

一个pydbg的模板如下,通过bp_set可以在程序的任意点设置断点,并添加对应的处理函数

from pydbg import *
from pydbg.defines import *
def handler1(dbg):
        # some code here
        return DBG_CONTINUE
def main():
        target = './reverse0.exe'
        dbg = pydbg()
        dbg.load(target, create_new_console=True)
        #set a break point
        dbg.bp_set(0x00415fad, handler=handler1)
        dbg.run()
main()



五、Angr

5.1、简介:

是一个多架构的二进制分析平台,具备对二进制文件的动态符号执行能力和多种静态分析能力


文档

README - angr Documentationicon-default.png?t=M5H6https://docs.angr.io/

5.2、使用:

Angr脚本步骤:

(1)使用angr.Project加载要分析的二进制程序

通常会将选项auto_load_libs设置为false,使angr不加载动态链接库:
p = angr.Project('./vul', load_options={"auto_load_libs": False})


(2)建立程序的一个初始化状态

使用factory.entry_state直接在程序入口点建立一个初始化状态

如果程序需要传递符号化的输入,还需要在建立初始化状态时,进行符号化:
argv1 = claripy.BVS("argv1", 100 * 8)
initial_state = p.factory.entry_state(args=["./program", argv1])

也可使用factory.black_state在程序的任意指定地址建立一个状态。可以通过memory.store对状态中的部分内存进行符号化:
s = p.factory.blank_state(addr=0x401084)
s.memory.store(0x402159, s.solver.BVS("ans", 8*40))


(3)从初始化状态开始进行动态符号执行,使用explore进行路径的探索,通过find参数指定需要到达的地址,avoid参数则指定不要到达的地址:

sm = proj.factory.simulation_manager(initial_state)
sm.explore(find=0x400830, avoid=0x400850)


(4)找到之后,通过约束求解器得到flag:
found = sm.found[0]
flag = found.solver.eval(argv1, cast_to=bytes)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/90592
推荐阅读
相关标签
  

闽ICP备14008679号