zoukankan      html  css  js  c++  java
  • [3.13]anti内存断点

    ---恢复内容开始---

    看了两篇帖子,在大牛们的引导下,有所感悟,遂以文记。

    1.OD中内存访问断点的原理

    内存访问断点:OD将目标内存所在的页面(范围圆整为1000h的倍数)设置为PAGE_NOACCESS,当被调试程序对这个内存进行任何“读、写或运行”操作时,都会触发异常。
    内存写入断点:OD将目标内存所在的页面(范围圆整为1000h的倍数)设置为PAGE_EXECUTE_READ,当被调试程序对这个内存进行“写”操作时触发异常。

    触发异常被捕捉到之后,OD停下来,就起到了“内存断点”的作用。

    2.如何反内存断点?

    使用VirtualProtect函数改变内存属性,没有异常触发,OD就不会段下来了。

    没事就VirtualProtect((LPVOID)段始, 段长, PAGE_EXECUTE_READWRITE, (LPDWORD)..),使段属性可读刻写可执行。

    仿照大牛的代码,自己改写了一个anti的示例代码:

    #include<windows.h>
    #include <stdio.h>
    
    char szAppName [] = "Anti memory break point!";
    char szText[] = "Hi! try to set a memory break point here! Success?";
    
    int main()
    {
    	printf("[+] 请在0x%X处下内存访问断点!
    ",szText);
    	printf("[+] 如果成功了,程序会断在lstrlen函数中,请返回到程序领空
    ");
    	
       DWORD dwOldProtect;
       int nLen = lstrlen( szText );
       printf("[+] 已返回到程序领空!VirtualProtect函数马上改写内存页属性!
    ");
    	if (VirtualProtect( &szText,nLen,PAGE_READWRITE,&dwOldProtect))
    	{
    		printf("%s
    ",szText);
    		MessageBoxA(NULL,"恭喜!
    如果你下了内存断点,并执行到这里,那么VirtualProtect()帮你anti了内存断点",szAppName,MB_OK);
    	}
    
       nLen++;
       return 0;
    } 
    

      

    3.进一步的启发,如何反内存断点?

      只要在代码一直掉用这个函数,那么内存断点就不起作用了。

    思路:对于加壳软件来说,可以在段即将跳转的时候,给每个段中都使用vp函数,就可以达到anti的效果。

  • 相关阅读:
    JavaScript的系统函数学习
    Web开发过程中要注意的问题 [转]
    试图运行项目时出错:无法在web服务器上启动项目得解决办法
    不错的函数
    js 学习笔记
    [转载]学习英语之写作篇 (兼考拉回国杂记之八)
    [转载]学习英语之阅读篇 (兼考拉回国杂记之七)
    转载 在WPF中使用Microsoft Chart Controls (MSchart)
    word excel ppt 简单实用总结
    (转)深入浅出WPF(1)——什么是WPF
  • 原文地址:https://www.cnblogs.com/Rrouned/p/3598341.html
Copyright © 2011-2022 走看看