首页
社区
课程
招聘
[原创]温故而知新-自构造api反hook
发表于: 2019-10-7 08:40 4957

[原创]温故而知新-自构造api反hook

2019-10-7 08:40
4957
国庆在家翻  [2019国庆礼物]《看雪论坛精华16》
传送门: https://bbs.pediy.com/thread-254820.htm

里面都是整理后的精华文章,看着很爽很过瘾


 翻到一个前辈的文章有个兴趣点
 所以深入分一下 [自己构造ZwSetContextThread,和ZwGetContextThread]
  传送门: https://bbs.pediy.com/thread-202048.htm


经过原理分析,调试 ,用delphi7编译.win10测试ok
考虑到还有用处然后封装成一个函数SetKernelFunBind.
直接上码

program Project2;

uses
  Windows;

procedure SetKernelFunBind(TargetModule, TargetProc: string; MyProc: pointer);
var
  OldProtect: longword;
  KerFunProc: pointer;
  ret: dword; addr: Integer; jmp: Byte;
begin
  //api地址
  KerFunProc := GetProcAddress(LoadLibrary(pchar(TargetModule)), pchar(TargetProc));

  //如果被断直接退吧
  if byte(KerFunProc^) = $CC then Exit;

  //修改MyProc的内存保护方式
  VirtualProtect(MyProc, 10, PAGE_EXECUTE_READWRITE, OldProtect);

    //复制系统api函数的前5字节覆盖到本地
  WriteProcessMemory($FFFFFFFF, MyProc, KerFunProc, 5, ret);

   //谢入跳转数据   修改本地函数执行流程
  jmp := $E9;
  WriteProcessMemory($FFFFFFFF, pointer(longword(MyProc) + 5), @jmp, 1, ret);
  addr := longword(KerFunProc) - longword(MyProc) - 5;
  WriteProcessMemory($FFFFFFFF, pointer(longword(MyProc) + 5 + 1), @addr, 4, ret);

    //恢复保护方式
  VirtualProtect(MyProc, 10, OldProtect, OldProtect);
end;

function msgbox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;
begin
  MessageBoxA(0, '要上班啦!', 0, 0);
   //因为SetKernelFunBind判断CC断点,所以这里也可以做一下简单的端点检测
end;

begin
  msgbox(0, '国庆快乐', 0, 0); //这里尚未绑定api函数,所以只会弹出 要上班啦!
  SetKernelFunBind('user32.dll', 'MessageBoxA', @msgbox); //绑定函数msgbox到系统api函数的MessageBoxA
  msgbox(0, '国庆快乐', 0, 0); //以MessageBoxA来执行参数,弹出  国庆快乐
end.



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 2
支持
分享
最新回复 (2)
雪    币: 3935
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
打破0回复~~
2019-10-7 10:13
0
雪    币: 1316
活跃值: (5174)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2019-10-9 11:29
0
游客
登录 | 注册 方可回帖
返回
//