zoukankan      html  css  js  c++  java
  • [转组第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安全相关

  • 相关阅读:
    【总结】进程和线程的区别
    为什么要求数据链路层帧的长度必须限制在一定范围内?
    常用正交表
    用正交表设计测试用例
    测试中的杀虫剂困境
    作品集-1:淘宝支付宝登陆框
    # 36氪开放日 • 杭州 • 11月10日 # 谈谈参会感受
    《在你身边,为你设计》读后感
    抱怨的背后
    更快的方式实现PHP数组去重
  • 原文地址:https://www.cnblogs.com/nww-570/p/8971812.html
Copyright © 2011-2022 走看看