简单之局部函数保护,加密等预防措施(动态内存)
2015-08-26 14:06
344 查看
这里介绍一种额~比较“原始”的函数保护方式,当然这里既可以针对局部范围函数保护措施(例如自定义函数,常见系统API等)也可以是全局代码范围地址空间重布局(无需PE重定位表);并针对对本身内部处理函数被HOOK防护有一定的解决方式。
简介下作用:
第一个模式:例如:预防游戏远程CALL,使用后程序员可将原始地址的所有数据充填掉(返回的新地址是随机的)。
第二个模式:例如:第一个模式 + HOOK导出函数无效。
第三个模式:例如:服务器发过来的代码也可做到到本地兼容哦。
等等等……
printf原数据:
printf新数据
可以看到函数在不同的地址正常运作,作用和ASLR类似。(以上是x86截图)
完整全功能版会有某个特定的时间开源(支持任意函数,代码段与平台)……^-^
#include "stdafx.h" #include "DefendFuns.h" typedef int (WINAPI *lpMessageBoxA)( _In_opt_ HWND hWnd, _In_opt_ LPCSTR lpText, _In_opt_ LPCSTR lpCaption, _In_ UINT uType); static void __cdecl _MainEntry(void) { printf("MainEntry it'OK!\r\n"); } typedef int(__cdecl *lprintf)(_In_z_ _Printf_format_string_ const char * _Format, ...); int _tmain(int argc, _TCHAR* argv[]) { CDefendFuns dfun; if (dfun.InitDll() == (-1)) return 0; if (dfun.InitCheck() == (-1)) return 0; //自定义反调试入口,进入后将无法返回原地址 //dfun.DefendStart((LONG_PTR)_MainEntry); lprintf MyPint; //这种模式适应于内部函数也就是属于模块本身EXE的功能 MyPint = (lprintf)dfun.DefendFunctionSection(NULL, NULL, NULL, (const unsigned long *)printf, 0, CDefendFuns::_ordinary_mode, 1); MyPint("NewPint it'OK! %08x\r\n",0x0FFF00000); lpMessageBoxA Mymsg; //这种模式适应于导出函数也就是外部模块DLL的功能 Mymsg = (lpMessageBoxA)dfun.DefendFunctionSection("MessageBoxA", "C:\\WINDOWS\\SysWOW64\\user32.dll", NULL, (const unsigned long *)MessageBoxA, 0, CDefendFuns::_control_mode, 0); Mymsg(NULL, NULL, NULL, NULL); return 0; }
简介下作用:
第一个模式:例如:预防游戏远程CALL,使用后程序员可将原始地址的所有数据充填掉(返回的新地址是随机的)。
第二个模式:例如:第一个模式 + HOOK导出函数无效。
第三个模式:例如:服务器发过来的代码也可做到到本地兼容哦。
等等等……
printf原数据:
printf新数据
可以看到函数在不同的地址正常运作,作用和ASLR类似。(以上是x86截图)
完整全功能版会有某个特定的时间开源(支持任意函数,代码段与平台)……^-^
相关文章推荐
- java 源代码例子
- Swift_UIButton
- adb 详细使用方法介绍
- .Net 项目代码风格规范
- UIScrollView控制图片滑动 NSTimer UIPageControl
- 封装
- Android 调用已安装市场,进行软件评分的功能实现
- vmstat 监控工具
- java 读excel包括不同版本读取,读合并单元格和读公式
- Fox Pro Access数据库知识点总结
- Ubuntu下sublime text3的安装+破解+汉化+中文输入
- ASP.NET MVC 如何在一个同步方法(非async)方法中等待async方法
- hiho 光棍节
- 海量数据处理系列之:用C++实现Bitmap算法
- linux查看主板型号,cpu,内存,内存条数量,网卡等
- iOS 第三方开源库
- hdu(3555)——Bomb(不要49)
- Android基础入门教程——5.1 Fragment基本概述
- 网上文章常见的几种读取.properties文件的方式
- Restore versus recovery