热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

线程注入、HOOKAPIs(附VC6源码)

工作关系,想HOOK并修改一些API,使得不支持某些设备的第三方工具可以正常运行,因此花时间写了这么个工具。比如ReadFile时,某些设备不支持指定的缓存大小(如512KB),可以HOOKRe

  工作关系,想HOOK并修改一些API,使得不支持某些设备的第三方工具可以正常运行,因此花时间写了这么个工具。比如ReadFile时,某些设备不支持指定的缓存大小(如512KB),可以HOOK ReadFile,把缓存大小修改为更小,可能ReadFile就能正常工作,第三方工具也能正常使用。其实,只是想借工作这个契机,学习远程线程注入和HOOK API。工作上测试的设备和第三方工具运行在64位机上,还没有时间在64位机上修改并编译。

  运行DEMO说明:

  首先进入TestExe目录,打开MFCDialogApplication.exe,8个按钮分别简单的调用8个API,可一一点击查看效果,标题栏显示进程ID:


  打开DllImport.exe,弹出Console,以下显示的是我输入并HOOK完的界面:


  首先输入需要HOOK的进程ID,这里输入对话框进程ID12600。然后提示选择需HOOK的API,每个API有FLAG值,占一位,可以用位组合,这里输入511,即9个API都需HOOK。然后选择是HOOK还是UNHOOK,这里当然输入1。然后这个程序向对话框程序注入线程,调用DllExport.dll,DllExport.dll中HOOK这9个API。结果全部成功,见上图。HOOK对话框后,会在对话框进程中弹出一个Console窗口,用以显示相关信息,见下图:


  然后在对话框上一一点击各个按钮,并随时查看弹出的Console窗口中内容,单击完后,见下图:


  每点击一个按钮后,在Console中会显示相关信息。这些信息是HOOK时打印的,我只设置了打印简单的信息。还要注意,HOOK MessageBoxA和MessageBoxW时,改变了弹出消息框的标题、文字等。

  然后再打开DllImport.exe,把HOOK的API还原,并从对话框进程中卸载DllExport.dll,输入顺序与HOOK一致,只是第三步时需指定0,见下图:


  UNHOOK API时我选择的全部还原。完后,9个API不再被HOOK,正常执行,之前显示信息的Console关闭,对话框正常运行。所有API UNHOOK后,DllExport.dll被卸载,可改名、删除等。此时,再点击对话框按钮,就不再有任何显示显示。注意点击两个MessageBox后,消息框的标题与文字。

  编译说明:

  MFCDialogApplication是生成被注入的对话框工程;DllWorkspace中,DllExport生成需注入的DllExport.dll,DllImport生成执行注入操作的DllImport.exe。

  DllWorkspace工作空间中,两个项目都是用的安全字符串操作函数,如果出现找不到头文件,需要更新SDK,我的VC6 Include路径包括“C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include”和“C:\Program Files\Microsoft Visual Studio 9.0\VC\include”,即可编译通过。

  DllWorkspace下的两个项目,ANSI、UNICODE编译均可,既四种组合的编译,都可正常注入并HOOK。

  注入及HOOK代码简要说明:
  注入主要代码如下:

var cpro_id = "u6885494";

推荐阅读
author-avatar
友爱锦锦_950
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有