基于隐藏可执行镜像并注入dll保护镜像代码的方法_4

文档序号:9751202阅读:来源:国知局
:直接使用Debugger加载Cry stalLoader的时候,会检查到当前进程是由 Debugger启动的。
[0185] 图8为:被线程注入之后的结果。
[0186] 图9为:在保护线程中启动子进程。
[0187] 图10为:保护进程主动加载一个IAT被Hook过的Dl 1动态链接库。
[0188]图11为:在保护进程运行中,植入Debugger后的结果。
[0189] 图12为:保护程序在windows 10中运行。
[0190] 图13为:保护程序在windows 8.1中运行。
[0191 ] 图14为:保护程序在windows xp中运行。
[0192] 图15为:保护程序在windows 2003中运行。
[0193] 图16为:保护前和保护后程序运行速度。
【具体实施方式】
[0194] 下面结合实例对本发明做进一步说明:
[0195] 实施例:
[0196] 使用的平台为Wind〇ws764bit版本,使用的调试器为OllyDbg V2.01版本。
[0197] 测试的步骤如下:
[0?98] 使用01 lyDbg加载AppTestWin32 · vpe这个保护镜像:
[0199] 如图4所示,反汇编器无法分析这个镜像文件,在打开的16进制编辑器中,也无法 看见熟悉的PE镜像格式。
[0200] 去掉Debugger检测保护,在已经加载的镜像模块中,如图5所示,找不到受保护的 镜像模块,所以Dumper也无法准确抓去内存镜像文件。打开本进程的内存Map,也找不到可 疑的区段。受保护的模块对于操作系统是隐藏的。
[0201 ] 加上全部的保护,再次使用01 lyDbg加载CrystalLoader.exe,发现会直接如图7的 错误,当前系统已经发现自己是由一个Debugger加载的,就提示错误并且拒绝执行。
[0202] 测试线程注入:
[0203] 运行CrystalLoader.exe使用loader的形式注入一个dll,如图8所示。
[0204 ]当保护d 11检测到一个未记录的线程被添加进来的时候,会直接报错。
[0205]测试子进程保护:
[0206] 关闭防止线程注入保护,在受保护的进程中,创建一个新的进程。
[0207] 如图9所示,可以看见CrystalProtector.dll成果注入子进程空间中,对子进程开 始执行保护代码。
[0208] 测试dll保护验证:
[0209] 在受保护的镜像代码中,主动加载一个IAT被修改的dll。
[0210] 如图10所示,进程主动提示dll是被修改过的,是不合法的。
[0211] 在受保护镜像运行的时候,植入Debugger进程,如图11所示,会同时提示系统被 Debugger注入和系统检测到线程注入。
[0212] 图 12到图 15,分别给出 了保护程序在windowslO,windows 8 · 1,windows xp, windows2003这几个主流平台上运行的例子。
[0213]图16给出了对比测试。图片上面是未经过保护的原始程序运行的结果,图片下面 是进过保护后,程序执行的结果。两段程序都执行的是蒙特卡洛算法求圆周率,枚举的范围 从0到OxFFFFFF,为了防止CPU Cache对时间的准确性的影响,先将程序预先加载一次,然后 在依次执行保护和未保护的程序。可以看到,由于加载器对做了足够的优化并且选择性模 拟cruntime library的功能,使得程序能在受保护情况下,得到更加高效的执行结果。
【主权项】
1. 基于隐藏可执行镜像并注入dl 1保护镜像代码的方法,该方法包括以下步骤: 1) 将目标镜像在内存中解密: 将加密镜像读取到内存,读取文件首部的文件头(例如文件前16字节)来判断判断目标 镜像是否是加密镜像(例如判断Magic值是否和预设值相同),1.1)如果不是指定的加密镜 像,则放弃加载;1.2)如果是指定的加密镜像,则执行对应的解密,然后判断解密后的数据 是否是一个合法PE镜像,1.2.1)如果不是一个合法PE镜像,则退回到待解密状态,1.2.2)如 果是一个合法PE镜像,则执行第2步; 2. PE镜像的加载: 装载程序所需要的dll文件,执行镜像重定位,最后执行OEP,如果上面的过程有出错, 则返回到本步骤2的待装载状态(即PE镜像的待加载状态),如果上面的过程都没有出错,就 执行第3步; 3) 检查exe模块的IAT是否被劫持: 该步骤包括以下两个子步骤:3.1)获取IAT中的dl 1带入列表,对其中每一个API地址做 一次检查,看记录的API地址和实际的API是否一致,如果有不同的,则可以认为该exe模块 的IAT被做了改动(例如,可能是被Hook过的),接着,3.2)对每个导入的系统dl 1做一次镜像 Hash检查,使用的Hash函数是zlib中的Adler32函数,如果内存镜像的Hash值和本地文件的 Hash不同,则可以认为这个dl 1的内存镜像被修改过, 如果发现上面几个子步骤存在问题,则返回至步骤3.1)的初始状态或返回到步骤2,如 果上面子步骤都没问题,则执行第4步; 4) 主动劫持 LoadLibrary 和 LoadLibraryEx: 劫持LoadLibrary和LoadLibraryEx,它们分别包含多字节版本和Unicode版本,所以需 要劫持的API实际上有4个,对加载成果的dll镜像执行上述步骤3中的操作,如果判定有异 常,则返回步骤2或步骤3,如果判定没有异常,则执行第5步;和 5) 劫持 CreateProcess 函数: 劫持CreateProcess函数,并且在创建子进程同时,注入本保护dll。2. 根据权利要求1所述的方法,其中所述方法进一步包括以下步骤 6) 防止线程注入: 通过远程线程注入,在Ring3环境下注入被保护的目标进程,防止恶意加载器的线程注 入; 7) 建立保护线程: 建立一个优先度比较底的线程(THREAD_PRIORITY_BEL0W_N0RMAL),做死循环检查,其 中检查的内容包括或是:是否是Debugger加载;优选的是,每一秒检查一次。3. 根据权利要求1所述的方法,其中在步骤1中加密镜像的扩展名使用*.vpe,和/或, 执行对应的解密是指:解密的算法基于快速的xor算法,将文件头Null作为解密Key,对 文件进行解密。4. 根据权利要求1、2或3所述的方法,其中步骤2包括以下子步骤:2.1)加载器会模拟操 作系统的加载器,依次修改PE镜像的区段的属性,并且对齐区段,2.2)执行预加载函数(比 如TLS回调函数),加载IAT中对应的dl 1动态链接库,然后获取到0EP,和2.3)注入保护dl 1, 执行入口点函数,从而完成PE镜像的加载。5. 根据权利要求4所述的方法,其中所加载的受保护的PE镜像是基于加载器进程执行 的,即,受保护的PE镜像对于操作系统来说是不可见的;优选的是,在受保护的PE镜像执行 时既不是加载器的子进程,又不是加载器的代码段,只是堆上一块可执行区段,dumper无法 将这个区段准确提取出来。6. 根据权利要求1-5中任何一项所述的方法,其中在步骤4中,每当Exe模块主动调用一 个dll时,必定会使用到LoadLibrary或者是LoadLibraryEx,对这两个API做劫持,每当加载 一个dl 1镜像时,使用步骤3中的方法,对dl 1的IAT做一次检查,如果有导入函数的地址和原 本的地址不同,就认为这个dll的IAT被做了修改。7. 根据权利要求1-6中任何一项所述的方法,其中在步骤5中,主要的方式是在创建进 程的时候,先保存原来的创建f lag,为创建f lag中添加 CREATE_SUSPEND的f lag进行创建;优 选的是,在建立子进程的时候,劫持EIP,保存CPU的Context,注入ShellCode来加载内存保 护dll,最后释放ShellCode的内存,并且恢复CPU的Context。8. 根据权利要求2-7中任何一项所述的方法,其中在步骤6中,需要防止的线程注入是: 恶意加载器在远程调用以下三种CreateRemoteThreacUVirtualAlloc和LoadLibrary相关 的API (如LoadLibraryEx)完成线程注入。9. 根据权利要求2-8中任何一项所述的方法,其中在步骤7中,直接从BYTE Ptr fs: [3 0 ] + 2处获取到一个B Y T E长度的数据,如果检测到F 1 a g为1,则使用 SetUnhandledExceptionFilter设置一个Filter函数,函数中输出一些出错信息,然后返回 EXCEPT I0N_EXE⑶TE_HANDLER,表明当前的异常已经处理,程序直接退出。
【专利摘要】基于隐藏可执行镜像并注入dll保护镜像代码的方法,该方法包括以下步骤:1)将目标镜像在内存中解密;2)PE镜像的加载:装载程序所需要的dll文件,执行镜像重定位,最后执行OEP;3)检查exe模块的IAT是否被劫持;4)主动劫持LoadLibrary和LoadLibraryEx,对加载成果的dll镜像执行上述步骤3中的操作,如果判定没有异常,则执行第5步;5)劫持CreateProcess函数,并且在创建子进程同时,注入本保护dll;6)通过远程线程注入,在Ring3环境下注入被保护的目标进程,防止恶意加载器的线程注入;和7)建立一个优先度比较底的线程(THREAD_PRIORITY_BELOW_NORMAL),做死循环检查,检查它是否属于Debugger加载,每一秒检查一次。
【IPC分类】G06F21/51
【公开号】CN105512548
【申请号】CN201510873591
【发明人】欧阳建权, 陈灵锋, 刘任任, 唐欢容
【申请人】湘潭大学
【公开日】2016年4月20日
【申请日】2015年12月2日
当前第4页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1