您的位置:首页 > 其它

简单之局部函数保护,加密等预防措施(动态内存)

2015-08-26 14:06 344 查看
         这里介绍一种额~比较“原始”的函数保护方式,当然这里既可以针对局部范围函数保护措施(例如自定义函数,常见系统API等)也可以是全局代码范围地址空间重布局(无需PE重定位表);并针对对本身内部处理函数被HOOK防护有一定的解决方式。

#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截图)
完整全功能版会有某个特定的时间开源(支持任意函数,代码段与平台)……^-^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: