【PC/脱壳】07.修复IAT——重定向

共计1325字,阅读大约5分钟。

占坑,待写。

图片[1]-【PC/脱壳】07.修复IAT——重定向-galgame

方法一:最笨最实在最原始法——手动修复重定向法

根据前面我们说的,有IID的情况下,把IAT填写好,写成正确的函数的起始头。然后使用scylla进行fix dump的时候就能识别到,然后就能把重定向的解决了。

栈顶(堆栈窗口最上面那个)就是ESP

首先我们先来认识一下什么是寄存器

认识寄存器

通用寄存器(General Purpose Registers)

  1. EAX(累加寄存器,Accumulator Register)
    • 通常用于算术运算和逻辑运算。
    • 在函数调用中,一般用来保存返回值。
  2. EBX(基址寄存器,Base Register)
    • 常用于基址寻址。
    • 可以用来存储数据和指针。
  3. ECX(计数寄存器,Count Register)
    • 常用于循环计数和字符串操作。
  4. EDX(数据寄存器,Data Register)
    • 常用于存放扩展的算术运算结果,如乘法和除法的结果。
    • 在32位系统中与EAX结合进行64位的运算。

指针与索引寄存器(Pointer and Index Registers)

  1. ESI(源索引寄存器,Source Index)
    • 通常用于字符串操作,指向源数据地址。
  2. EDI(目标索引寄存器,Destination Index)
    • 通常用于字符串操作,指向目标数据地址。
  3. ESP(堆栈指针寄存器,Stack Pointer)
    • 指向当前堆栈的顶部。
    • 用于堆栈操作,如PUSH和POP指令。
  4. EBP(基址指针寄存器,Base Pointer)
    • 通常用于保存栈帧的基址,便于访问局部变量和函数参数。

段寄存器(Segment Registers)

  1. CS(代码段寄存器,Code Segment)
    • 保存当前代码段的基址。
  2. DS(数据段寄存器,Data Segment)
    • 保存当前数据段的基址。
  3. SS(堆栈段寄存器,Stack Segment)
    • 保存当前堆栈段的基址。
  4. ES(额外段寄存器,Extra Segment)
    • 通常用于字符串操作的额外段。
  5. FS和GS
    • 附加的段寄存器,可以用于任意用途。

EIP(指令指针寄存器,Instruction Pointer)

  • EIP 指向下一条将要执行的指令的地址。
  • 不可直接修改,通常通过控制流指令(如JMP、CALL、RET)间接改变。
  • 对于程序的控制流至关重要。

标志寄存器(Flags Register)

  • EFLAGS 保存了CPU的状态信息,包括条件码和控制标志。
    • ZF(Zero Flag):结果为零时置位。
    • CF(Carry Flag):进位或借位时置位。
    • SF(Sign Flag):结果为负时置位。
    • OF(Overflow Flag):溢出时置位。
    • IF(Interrupt Enable Flag):中断使能位。

温馨提示:
本文最后更新于2024-09-07 20:49:22,本文具有时效性,若有错误或已失效,请在下方留言或联系站长
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容