zoukankan      html  css  js  c++  java
  • GS 原理及破解 《0day安全》

    1.原理:

      在main函数之前,会调用__security_init_cookie函数(win10,vs2017,release,x86);

      

      进入__security_init_cookie函数内部:

      __security_cookie(随机数,产生于ntdll.dll的函数,通过栈回溯,下.data+4的硬件断点,可以追踪,看的我头疼,不想弄)

      存在当前程序.data段的第4个字节,并将它按位取反,放入了.data的第0个字节。

      

      进入main函数:

      从.data+4的位置把__security_cookie取出来与当前栈的esp进行异或,得到的结果放入[ebp-4](这个位置不是固定的,不过都距离栈底较近)

      

      当函数返回之前:

      将[ebp-4]中的数据取出来,与esp异或,比较得到的结果与[.data+4]中的数据是否一致,来判断[ebp-4]的位置是否被修改过。

           

      

    2.GS的优点与缺陷(不考虑DEP,ALSR,优化等)(源于<<0day安全>>)

      ①修改栈帧中函数返回地址的经典攻击将被 GS 机制有效遏制;

      ② 基于改写函数指针的攻击,如 C++虚函数的攻击,GS 机制仍然很 难防御;

      ③ 针对异常处理机制的攻击,GS 很难防御;

      ④GS 是对栈帧的保护机制,因此很难防御堆溢出的攻击。

    3.方法

      可以修改.data+4的数据(如果可以的话),人工计算向栈内填值,骗过__security_check_cookie函数

  • 相关阅读:
    今天过节提前下班
    作控件也挺郁闷啊!
    使用Windows XP的主题
    这几天关心加密的人很多
    多普达515,好爽啊!
    515看电影
    我要定计划
    龙芯II发布了,好事儿!
    转:关于星际与XP的结对编程
    昨天参加了一个微软的会
  • 原文地址:https://www.cnblogs.com/jf-blog/p/12357344.html
Copyright © 2011-2022 走看看