当前位置: 首页 > news >正文

网站设计制作方案百度seo公司哪家强一点

网站设计制作方案,百度seo公司哪家强一点,wordpress主题 b2c,专业提供建站模板的公司HOOK的目的是用我们自己的代码取代一些函数的代码以改变程序的行为。 静态HOOK:在进程运行前挂钩,采用用户级进程即可完成。比如:有些程序会在启动时需要原光盘,如果我们修改获取驱动类型的函数则可以从硬盘启动。 动态HOOK:挂钩系统进程(如服务)时要动态挂钩(运行时挂钩…

HOOK的目的是用我们自己的代码取代一些函数的代码以改变程序的行为。
静态HOOK:在进程运行前挂钩,采用用户级进程即可完成。比如:有些程序会在启动时需要原光盘,如果我们修改获取驱动类型的函数则可以从硬盘启动。
动态HOOK:挂钩系统进程(如服务)时要动态挂钩(运行时挂钩)。

静态HOOK即运行前挂钩

这里修改我们想要修改函数来自的物理模块(大多数时候是.exe或.dll)。在这里我们至少有3种可能的做法。
第一种可能是找到函数的入口点然后重写它的代码这会因为函数的大小而受限制,但只要能动态加载其它一些模块(API LoadLibrary)就足够了。内核函数(kernel32.dll)是通用的,Windows中每个进程都有其拷贝,如果知道哪些模块在某版本中会修改,就可以在一些API如LoadLibraryA中直接使用指针(因为相同Windows版本中kernel模块在内存中地址是固定的)。
第二种可能是在模块中被代替的函数只是原函数的扩展。可以选择修改开始的5个字节(CPU跳转指令长度)为跳转指令或者改写IAT。如果改跳转指令,那么将会改变指令执行流程转为执行我们的代码。如果调用了IAT记录被修改的函数,我们的代码能在调用结束后被执行。
第三种是修改整个模块。即创建自己的模块版本,它能够加载原始的模块并调用原始的函数,当然我们对这个不感兴趣,但重要的函数都是被更新的。这种方法对于有的模块过大有几百个导出函数的很不方便。

动态HOOK即运行时挂钩

在运行前挂钩通常都非常特殊,并且是在内部面向具体的应用程序(或模块)。如果我们更换了kernel32.dll或ntdll.dll里的函数(只在NT操作系统里),我们就能完美地做到在所有将要运行的进程中替换这个函数。但说来容易做起来却非常难,不但得考虑精确性和需要编写比较完善的新函数或新模块,更主要的问题是只有即将运行的进程才能被挂钩(要挂钩所有进程只能重启电脑)。另一个问题是如何进入这些文件,因为NT操作系统保护了它们。比较好的解决方法是在进程运行时挂钩(只针对能够写入它们内存的进程)。为了能写入进程可使用API函数WriteProcessMemory

使用IAT挂钩本进程

这里有很多种可能性。首先介绍如何用改写IAT挂钩函数的方法。接下来这张图描述了PE文件的结构:
这里写图片描述

这里比较重要的是.idata部分的导入地址表(IAT:Import Address Table)。这个部分包含了导入的相关信息和函数地址。有一点很重要,我们必须知道PE文件是如何创建的。当在编程语言里间接调用任意API(这意味着我们是用函数的名字来调用它,而不是用它的地址),编译器并不直接把调用连接到模块,而是用jmp指令连接调用到IAT,IAT在系统把进程调入内存时时会由进程载入器填满。这就是我们可以在两个不同版本的Windows里使用相同的二进制代码的原因,虽然模块可能会加载到不同的地址。进程载入器会在程序代码里调用所使用的IAT里填入直接跳转的jmp指令。所以只要能在IAT里找到想要挂钩的指定函数,就能很容易改变那里的jmp指令并重定向代码到新的地址。完成之后每次调用都会执行新的代码了。这种方法的缺点是经常有很多函数要被挂钩(比如:要在搜索文件的API中改变程序的行为就得修改函数FindFirstFileFindNextFile,但这些函数都有ANSI和UNICODE版本,所以就不得不修改FindFirstFileAFindFirstFileWFindNextFileAFileNextFileW的IAT地址。但还有其它类似的函数如FindFirstFileExA和它的UNICODE版本FindFirstFileExW,也都是由前面提到的函数调用的。我们知道FindFirstFileW调用FindFirstFileExW,但这是直接调用,而不是使用IAT。再比如说ShellAPI的函数SHGetDesktopFolder也会直接调用FindFirstFilwWFindFirstFileExW)
我们通过使用imagehlp.dll里的ImageDirectoryEntryToData来很容易地找到IAT。

    PVOID ImageDirectoryEntryToData(IN LPVOID           Base,    IN BOOLEAN      MappedAsImage,    IN USHORT           DirectoryEntry,    OUT PULONG      Size    );

在这里Base参数可以用我们程序的Instance(Instance通过调用GetModuleHandle获得):
hInstance = GetModuleHandleA(NULL);
DirectoryEntry我们可以使用恒量IMAGE_DIRECTORY_ENTRY_IMPORT

 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1

函数的结果是指向第一个IAT记录指针。IAT的所有记录是由IMAGE_IMPORT_DESCRIPTOR定义的结构。所以函数结果是指向IMAGE_IMPORT_DESCRIPTOR的指针。

 typedef struct _IMAGE_THUNK_DATA {
http://www.fp688.cn/news/142124.html

相关文章:

  • 网站开发的计划书久久seo综合查询
  • 做温泉机的企业网站站长之家关键词查询
  • 网站显示数据vivo应用商店
  • 淄博网站制作杭州搜索推广公司
  • 呼和浩特网站建设电话广告代运营
  • 如何做网站收录汕头seo管理
  • 灰色行业老域名做网站不收录重庆seo小潘大神
  • 哈尔滨网站建设优化公司线上拓客渠道有哪些
  • 网站侧栏软件排行榜怎么做的市场监督管理局职责范围
  • 快速建立平台网站开发设计建站流程西安网站制作推广
  • 网站建设制作设计营销 大连微信营销和微博营销的本质区别
  • 怎么做网站像淘宝这样的宁德市蕉城区
  • 东营微信网站制作竞价推广外包
  • 兰州市做网站的公司有哪些免费自建网站有哪些
  • 网站 优化 关键字电商运营培训
  • 如需锦州网站建设新浪nba最新消息
  • 百度糯米做网站多少钱上海百度seo优化
  • 牡丹江做网站建设网络营销方式方法
  • 一屏一屏的网站怎么做网店买卖有哪些平台
  • 网站首页需求地推app
  • 做算命网站挣钱么数字营销是干啥的
  • wordpress里验证谷歌站长seo在线推广
  • 金山区做网站公司关键词优化分析工具
  • 广告设计图片网站seo教学平台
  • 建立网站兴田德润电话多少音乐接单推广app平台
  • 做网站交易装备可以么电商网站上信息资源的特点包括
  • 信阳公司做网站上海最新发布
  • 重庆网站建设套餐百度推广app下载
  • 做旅游视频网站销售培训课程
  • 海口建设局网站seo外链在线工具