钩取的流程:
1.使用反汇编/调试器把握程序的结构和工作原理.
2.开发需要的"钩子"代码,用于修改Bug,修改程序功能.
3.灵活操作可执行文件与进程内存,设置"钩子"代码.
使用场景: 程序无源代码或难以修改.
API: Application Programming Interface,应用程序编程接口.用户无法直接使用系统资源,必须通过API向内核申请资源.因而要加载很多系统进程
只有某些特定的系统进程(例如,smss.exe)不会加载 kernel32.dll库, kernel32.dll 会加载ntdll32.dll .而在GUI应用程序中 uer32.dll 和 gdi32.dll 是必需的库.
通过API钩取可以实现对某些API调用过程的拦截,并获得相应的控制权限.
修改IAT处的函数地址: 实现简单,但无法钩取动态加载并使用DLL时的API.
代码修改: ①使用JMP指令修改其实代码②覆写函数局部③修改局部的局部.
修改EAT: 将DLL中的EAT地址改为钩取函数地址.但是不容易做到.
调试也包含自己编写的程序,通过调试API附加到目标进程.
注入包含DLL注入和代码注入.