[转组第5天] | 天枢分享Reverse入门

Posted nww-570

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转组第5天] | 天枢分享Reverse入门相关的知识,希望对你有一定的参考价值。

2018-04-28

  天枢reverse分享:

   字节序:大端模式:高低低高;小端模式:高高低低

  技术分享图片

   函数传参方式:

    Windows

      – 32位: 参数从右至左按顺序压栈

      – 64位:前四个参数通过rcx、rdx、r8、r9寄存器传参,剩余参数从右至左按顺序压栈。 

    Linux

      – 32位:参数从右至左按顺序压栈

      – 64位:前六个参数通过rdi、rsi、rdx、rcx、r8、r9寄存器传参,剩余参数从 右至左按顺序压栈

   函数调用约定:

    cdecl  - 主要在C语言中使用,调用者负责处理栈。

    stdcall   - 常用于Win32API,该方式由被调用者清理栈。

    fastcall  - 与stdcall方式类似,在函数传参时,前两个参数会通过寄存器ECX、EDX传。

   代码混淆:

    jz/jnz花指令:重新反汇编jz/jnz要跳转的地址处的指令,修改后,patch掉花指令,重新生成伪代码。

    call+pop花指令:也是调整地址处指令,patch掉花指令,重新解析。

      call $+5 指令,call指令占5字节,所以这句实际就是执行下一条指令,常用于执行加密或解密代码。

    SMC(Self-Modifying Code)代码混淆,1.直接调试到解密完的步骤;2. idapython进行恢复。

    idapython例子(伪代码):  //主要是静态分析用。

    from idc import *

    from idaapi import *

    for i in range(start,end):

      temp = Byte(i)

      PatchByte(i, temp^0x45) 

    IDA F5常见错误处理:

    please position the cursor within a function; 花指令,按上面处理花指令的方法。

    position sp value has been found; 堆栈平衡问题,多半存在一个恶意指令修改了堆栈,IDA general可以设置查看堆栈平衡。将恶意指令干掉或者其他。

    call analysis failed. 函数参数个数分析错误,修正函数参数个数。

    OD断点介绍:

      INT 3断点:

       - 改变断点地址处的第一个字节为0xCC

       - OD快捷键F2

       硬件断点:

         - 依赖于DRX调试寄存器

         - DR0~DR3四个寄存器用来存放断点地址

         - DR6和DR7用来控制断点的大小和触发断点的时机

         - OD快捷键F4、F8

       内存断点:

       - 改变内存分页的属性

          - 内存访问断点,通常是将内存属性设为PAGE_NOACCESS

        - 内存写入断点,通常是将内存属性设为PAGE_EXECUTE_READ

        - 由于分页粒度的限制,最小改变一页的属性

  总结:

    基础知识很重要

  预计明天:

    android安全相关

以上是关于[转组第5天] | 天枢分享Reverse入门的主要内容,如果未能解决你的问题,请参考以下文章

[转组第7天] | 函数的工作原理

[转组第9天] | 数组和指针的寻址

[转组第8天] | 变量在内存中的位置和访问方式

[转组第2天] | baby_mips和android xss的调研

[转组第10天] | Android6.0.0_r1源码编译和POC程序的编译

Reverse入门[不断记录]