一种保护应用程序的方法模拟windowspe加载

一种保护应用程序的方法模拟windowspe加载

ID:30397599

大小:108.85 KB

页数:47页

时间:2018-12-29

一种保护应用程序的方法模拟windowspe加载_第1页
一种保护应用程序的方法模拟windowspe加载_第2页
一种保护应用程序的方法模拟windowspe加载_第3页
一种保护应用程序的方法模拟windowspe加载_第4页
一种保护应用程序的方法模拟windowspe加载_第5页
资源描述:

《一种保护应用程序的方法模拟windowspe加载》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、一种保护应用程序的方法模拟WindowsPE加载某天睡觉醒来,我发现我会开机了~方法,过程,目标,成就是时候起兵作反了~不要太多感情posts-787,comments-225,trackbacks-0,articles-1【转载】一种保护应用程序的方法模拟WindowsPE加载器,从内存资源中加载DLL编程2008-07-2721:23:47阅读3751、前言目前很多敏感和重要的DLL(Dynamic-linklibrary)都没有提供静态版本供编译器进行静态连接(.lib文件),即使提供了静态版本也因为兼容性问题导致无

2、法使用,而只提供DLL版本,并且很多专业软件的授权部分的API,都是单独提供一个DLL来完成,而主模块通过调用DLL中的接口来完成授权功能。虽然这些软件一般都采用了加壳和反调试等保护,但是一旦这些功能失去作用,比如脱壳,反反调试,HOOKAPI或者干脆写一个仿真的授权DLL(模拟授权DLL的所有导出函数接口),然后仿真的DLL再调用授权DLL,这样所有的输入首先被仿真DLL截获再传递给授权DLL,而授权DLL的输出也首先传递给仿真DLL再传递给主程序,这样就可以轻易的监视二者之间的输入输出之间的关系,从而轻易的截获DLL中

3、的授权信息进行修改再返回给主程序。2、目前隐式调用敏感DLL中可能存在的安全隐患以下通过两个软件的授权DLL来说明这种问题的严重性。如下是两个软件中授权DLL的部分信息,如下图所示:(图1)通过工具OllyICE可以轻易的看出IoMonitor.exe调用授权DLL(XKeyAPI.DLL),这样就很容易在调用这些API的地方设置断点,然后判断输入输出的关系,从而达到破解的目的。(图2)通过工具OllyICE可以轻易的看出sfeng.DLL中导出了很多函数,其中含义也很明显。GetHDID获取硬盘的ID,GetCpuId获

4、取cpu的ID,WinAntiDebug反调试接口。而这些都是主程序需要调用的,比如:主程序通过GetHDID来获取硬盘编码,以这个硬盘ID的伪码来生成授权码,破解者很容易修改这些接口的输出值或者干脆写一个sfeng.DLL来导出跟目标sfeng.DLL一模一样的导出函数,而主程序却完全不知晓。只要用户有一套授权码就可以让GetHDID不管什么机器都返回一样的值,从而达到任何机器都可以使用同一套授权码。(图3)如上图所示,直接修改DLL中函数GetHDID(RVA地址:0093FF3C开始)的实现,让它直接返回固定的硬盘I

5、D就可以达到一个授权到处使用的目的。其中:"WD-Z=AM9N086529ksaiy"为需要返回的已经授权的硬盘ID,我们直接返回这个值即可。把原来0093FF3C部分的代码用nop替换掉,添加Call008FFF60,后面添加字符串"WD-Z=AM9N086529ksaiy",Call008FFF60之后,ESP=Call后的返回地址(Call指令的下一行),也就是字符串"WD-Z=AM9N086529ksaiy"的首地址,然后popEAX后,返回值就是字符串的首地址,通过这种简单的修改就可以达到破解的目的,说明这种隐式

6、的调用是非常危险的。3、模拟WindowsPE加载器,从资源中加载DLL本文主要介绍将DLL文件进行加密压缩后存放在程序的资源段,然后在程序中读取资源段数据进行解压和解密工作后,从内存中加载这个DLL,然后模拟PE加载器完成DLL的加载过程。本文主要以VisualC++6.0为工具进行介绍,其它开发工具实现过程与此类似。这样作的好处也很明显,DLL文件存放在主程序的资源段,而且经过了加密压缩处理,破解者很难找到下断点的地方,也不能轻易修改资源DLL,因为只有主程序完成解压和解密工作,完成PE加载工作后此DLL才开始工作。我

7、们知道,要显式加载一个DLL,并取得其中导出的函数地址一般是通过如下步骤:(1)用LoadLibrary加载DLL文件,获得该DLL的模块句柄;(2)定义一个函数指针类型,并声明一个变量;(3)用GetProcAddress取得该DLL中目标函数的地址,赋值给函数指针变量;(4)调用函数指针变量。这个方法要求DLL文件位于硬盘上面,而我们的DLL现在在内存中。现在假设我们的DLL已经位于内存中,比如通过脱壳、解密或者解压缩得到,能不能不把它写入硬盘文件,而直接从内存加载呢?答案是肯定的,方法就是完成跟WindowsPE加载

8、器同样的工作即可。加载过程大致包括以下几个部分:1、调用API读取DLL资源数据拷贝到内存中2、调用解压和解密函数对内存中的DLL进行处理3、检查DOS头和PE头判断是否为合法的PE格式4、计算加载该DLL所需的虚拟地址空间大小5、向操作系统申请指定大小的虚拟地址空间并提交6、将DLL数据复制到所分配的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。