教程APIHOOK(图)
APIAPI是指一个DLL链接库中对外揭露的子程序函数.如上节写入用的钩子DLL 钩子DLL接口 这个子程序即是 揭露 的揭露特点.有揭露特点的DLL函数才干被其它外部的程序调用.到达拓展 程序的功用.虽然各种高档言语都供给林林总总的库函数给程序员运用。削减程序员去声明某DLL的一些API函数费事,但这些高档言语编出来的EXE或DLL文件,终究仍是得去调用操作体系中的那些API函数功用.体系的一些常用的DLL的API函数,其功用,构造,参数,返回值基本上都是一样的,也即是说XP与2003里的同一个DLL中同一个API函数, 通常都是一样的,只需极少数的会被调整改动过。而这些API都是微软已界说的,若想运用体系中这些API功用,就必需得依照微软所设定的标准去调用。本节讲的主题是去阻拦一个软件调用一个API功用时所传递的参数还有返回值等的技能.这种技能被称为HOOKAPI。阻拦API的功用不论是在 规划还有其它的各种旁门技能中是常用的。能够阻拦对API调用的技能有许多,这儿只讲其间两种.输入表 或称导入表,函数导入表等,英文名IAT表.用户编写的程序,许多功用终究都将调用体系的API。调用的进程通常是用户代码 → 输入表 → API函数输入表中保存着某需求被引证的API在进程内存中的地址,这种地址被称为函数进口.当用户代码需求调用某API时,在输入表中找到该API的函数进口,然后会转到该进口处往下履行API函数代码。假如,咱们在程序的输入表中找到那个API的进口地址,把该进口地址修正为咱们自已所编的一个子程序,终究当用户代码从输入表中查找那个API地址 调用时,会调用咱们的子程序,而不是那个API。。此刻若咱们的子程序的参数和返回值的规划与那个API是一样的话,就能得到用户调用那个API时的一切 参数数据,到达一种监督接收作用。
下面来规划一个程序,该程序运用上面的钩子DLL技能,把一个DLL文件刺进方针程序。在DLL中规划一个能够修正IAT输入表中某个API地址的功用。这儿咱们要演示的是阻拦 gdi32.dll 这个DLL文件中的 SetTextColor API函数,该API是用来操控显现的文本内容字体色彩.有关这个API的声明格局还有参数与返回值等构造能够参阅 Win32API 方面的文档,引荐咱们看 新编Windows32 API 参阅大全 这个电子书.gdi32.dll 中的API函数 SetTextColor 阐明.有关这个 SetTextColor 在VBAPI文档中的声明格局,该API在 gdi32.dll 中,该DLL是体系DLL文件.SetTextColor 共有两个整数型参数,一个整数型返回值VB言语里的 long 数据类型是4字节长,等于易言语里的整数型.这个VBAPI文档咱们能够在网上下载到,别的也能够去下载易言语网站上的那个 易用API 软件.也能够在易言语 菜单->东西->履行易导游->API帮手.exe 里找到这个API的声明格局易导游里的 API帮手.exe 程序先规划一个EXE程序,把DLL写入进方针程序里.由该DLL中完成阻拦 SetTextColor 的功用.EXE代码.用装置钩子DLL()来写入钩子DLL代码.留意红框部份的代码.在程序集变量或全局变量里,声明 类_APIHOOK 这个功用.以后就能够进行装置IATHOOK了,需求留意装置IATHOOK时的API称号大小写要准确.由于IATHOOK,一次装置后直到该进程被停止前会一向有用.所以只需求在退出时再康复就行了.见 SetTextColor接口 这个子程序要与API的参数,返回值等一样,在这儿能够处理截获的参数,与供给返回值.注,在装置了IATHOOK功用以后,在不需求该HOOK时需求调用康复IATHOOK,别的,在DLL退出时,也一定要调用康复IATHOOK,否则的话,在钩子DLL卸载时会发生非法操作或内存格局过错等意外的……IATHOOK比如运转作用图.把计算器上的显现的字体都变成了赤色.装置钩子DLL写入到方针进程空间后,会进行IATHOOK阻拦SetTextColor这个API函数的调用,该API函数的作坊是设置文本前景色,即文本色彩.阻拦到该API调用时,把前景色彩替换为 赤色.下面再介绍第二种方法,APIHOOK.上面是在IAT输入表中修正其API地点的内存地址进行阻拦,但有些时候,程序在调用API时并不一定经过IAT输入表。程序能够在运转进程中动态的去获取指定API在内存中的地址,然后去调用,这么的话,运用IATHOOK也就落空了。很显然,不论程序代码是不是会经过IAT输入表,但其终究仍是得从那个API在内存的地址处履行。假如用IAT阻拦不到的 话,那么,咱们能够在那个API地点的内存地址处,用机器码修正其进口前几字节进行强行跳转到咱们自界说的子程序去。只需跳到了咱们的子程序里就能得到程 序调用该API时所传递过去的参数了。。下面有个测验程序.exe测验程序.exe 每秒会更改一次修正框中的值.关于易言语来说,运用 修正框1.内容=“????????” 就能把一些文本数据设置到修正框上显现出来,看似对修正框控件的内容特点进行赋值,事实上,程序正在悄悄的调用了 SetWindowTextA 这个API把文本内容设置到修正框里的。本节的比如,是在 SetWindowTextA 的内存进口处,修正,使程序在调用该API时会被强行跳转到咱们自界说的子程序上。这么咱们的子程序就能得到原程序调用该API函数时所传递过去的参数内容SetWindowTextA 这个API原VB声明的格局该API在VB中的声明格局,作用是能够设置某个窗口的标题或一个控件的内容特点.该API共有两个参数与一个整数型返回值参数一是整数型,指定要设置的那个窗口句柄参数二是文本型,要设置到参数一所指定的那个窗口的标题内容文本.下面编写一个EXE与DLL.把该DLL写入进测验程序里,阻拦 SetWindowTextA 这个API并进行相应的改变.钩子DLL的代码.当DLL被写入到方针进程时就装置APIHOOK进行阻拦指定的DLL中的指定API调用在DLL退出时要记得把该APIHOOK进行康复.本例要阻拦的这个API功用是给指定的窗口或控件设置标题内容用的.共有两个参数与一返回值上面的 SetWindowText接口 子程序,把阻拦到的参数二内容后边再加上些自界说的文本内容然后先进行康复这个APIHOOK,再去调用体系中的这个API,完成后,再次加载该APIHOOK功用.最终把原体系API调用后的返回值返回给原程序调用方.这是钩子DLL的源代码,留意,这儿运用了 康复APIHOOK 与 加载APIHOOK原来在指定的API进口处运用了HOOK,所以在咱们自已若要再调用该API的话,就得先康复这个APIHOOK后才干调用该API……在调用以后,能够运用 加载APIHOOK,使该HOOK能够持续工作在DLL卸载退出时牢记一定要调用 康复APIHOOK,把一切已装置的APIHOOK全卸载掉。运转作用.点击下载本节源代码留意,通常情况下,若运用IATHOOK能完成意图,则不要再运用APIHOOK..由于IATHOOK不需求重复的康复与重复的加载稳定与功率上有长处.
以前看帖从不回帖,后来发现, 这样不但会用掉我的海币, 而且还不厚道。 以前看帖从不回帖,后来发现, 这样不但会用掉我的海币, 而且还不厚道。 以表达我对楼主的谢意, 把帖子顶起来 以表达我对楼主的谢意, 把帖子顶起来 以前看帖从不回帖,后来发现, 这样不但会用掉我的海币, 而且还不厚道。
以前看帖从不回帖,后来发现, 这样不但会用掉我的海币, 而且还不厚道。
页:
[1]