IDA Pro使用前先修内容

第一章、反汇编简介

在传统的软件开发模型中,程序员使用编译器、汇编器和链接器中的一个或几个创建可执行程序,使用来撤销反汇编、汇编和编译过程的工具叫做反汇编器和反编译器


机器语言——反汇编--》汇编语言———反编译--》高级语言



动态分析是指在严格控制的环境中执行恶意程序并使用系统控制检测实用工具记录所以所有行为。静态分析指通过浏览程序代码来理解程序行为


widows使用的可移植执行程序(portableexecutable ,pe)

unix使用的可执行和链接格式(executableand linking format,elf)


intel x86是指令长度可变的指令集


确定进行反汇编的代码区域-》读取指令起始地址(或文件偏移量)所包含的值并执行表查找,将二进制操作码的值与它的反汇编语言助记符对应-》对其汇编语言等价格式进行格式化并在反汇编代码中输出


汇编语言源代码主要采用两种语法:intelat&t


两种主要的反汇编算法:线性扫瞄(linearsweep)和递归下降(recursivedescent)


线性扫瞄的缺点:没有考虑到代码中可能混有数据

优点:完全覆盖所有代码段


如果CPU首先存储一个多字节值的最高有效字节,则称该CPU为大端CPU(big-endian)

如果CPU首先存储最低有效字节,则称为小端CPUlittele-endian)


递归下降算法强调控制流,根据一条指令是否被另一条指令引用来决定是否对其进行反汇编

顺序流指令,如算术操作add,寄存器与内存之间传输mov,栈操作push,pop


无条件分支指令(只有程序确实在运行时,eax寄存器才会包含一个值)

条件分支指令如jnz


函数调用指令-返回指令(反汇编器不具备访问栈的能力)


递归下降算法的优点:具有区分代码与数据的强大能力

缺点:无法处理间接代码路径,如利用指针来查找目标地址的跳转或调用

(通过采用一些用于识别指向代码的指针的启发式扫瞄(heuristics),递归下降反编译器能够提供所有代码,并清楚地区分代码与数据)




第三章、逆向与返汇编工具

幻数:一些文件格式规范所要求的特殊标签值,它表示文件符合这种规范

ms-dos的可执行文件头中的mz指令,java.class文件的幻数为十六进制数0xcafebase


用户可以将一个进程的内存映像存储到某个文件中


链接器通过两种方法解析对库函数的调用:静态链接staticlinking和动态链接dynamiclinking


静态链接会将应用程序的目标文件和所需的库文件组合起来,生成一个可执行文件(运行时不需确定库代码位置,因已经包含)

优点:函数调用快,发布二进制文件容易

缺点:生成可执行文件大,一旦库文件变换,须重新链接


动态链接:只需将对所需库(.so.dll)的引用插入到最终的可执行文件中

缺点:需要更加复杂的加载过程


为名称完全相同的函数生成唯一名称的过程叫做名称改造(namemangling)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值