郁金香外挂技术-郁金香灬老师

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

郁金香终身VIP管理员QQ150330575项目合作(有实力的+)视频教程+每月更新+QQ群
飞郁视频分享(每周更新)
查看: 1372|回复: 0

一段 HOOK 取得 EBP 寄存器 人造基址的代码

[复制链接]
发表于 2016-8-12 23:22:18 | 显示全部楼层 |阅读模式
本帖最后由 郁金香灬老师 于 2016-8-12 23:24 编辑

//代码中 使用了Detours3.1   库

BOOL hookApi(PVOID oldApi,PVOID newApi)//oldApi为 保存之前函数指针的地址&g_oldApi
{
BOOL br=FALSE;
DetourRestoreAfterWith();
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
//这里可以连续多次调用DetourAttach,表明HOOK多个函数
//DetourAttach(&(PVOID&)OldCreateMutexA,NewCreateMutexA);
//DetourAttach(&(PVOID&)oldApi,newApi); //这样写不行
DetourAttach(&(PVOID&)*(DWORD*)oldApi,newApi); //获取 oldApi地址
br=DetourTransactionCommit();
if (br==NO_ERROR)
{
  br=TRUE;
  //MessageBoxA(0,0,"OK",0);
  DbgPrintf_("hookApi:oldApi=%08X Commit OK",*(DWORD**)oldApi);
}else
{
  br=FALSE;
  //MessageBoxA(0,0,"ERROR",0);
  DbgPrintf_("hookApi:oldApi=%08X Commit Error",*(DWORD**)oldApi);
}
return br;
}
BOOL unhookApi(PVOID oldApi,PVOID newApi)
{
BOOL br=FALSE;
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
//这里可以连续多次调用DetourDetach,表明撤销多个函数HOOK
DetourDetach(&(PVOID&)*(DWORD*)oldApi,newApi);
br=DetourTransactionCommit();
if (br==NO_ERROR)
{
  DbgPrintf_("unhookApi:oldApi=%08X Commit OK",*(DWORD**)oldApi);
  br=TRUE;
}else
{
  DbgPrintf_("unhookApi:oldApi=%08X Commit Error",*(DWORD**)oldApi);
  br=FALSE;
}
return br;
}
void myCode(void)
{
//添加自己的代码
return;
}
int g_EBP=-1; //人造基址
PBYTE g_old_send=(BYTE*)LoadLibraryA("XXGUI.dll")+0x336677;
PBYTE g_old_send_5=g_old_send+5;
void __declspec(naked) new_send(void)
{
__asm
{
  mov g_EBP,ebp
     pushad
  pushf
  //添加自己的代码在此处
  call myCode
  popf
  popad
  jmp g_old_send_5
}
}
BOOL hooksend(BOOL isHook)  //isHook=FALSE解出HOOK 其它情况 HOOK
{
BOOL br=FALSE;
if (isHook)
{
  br= hookApi(&g_old_send,new_send);
}else
{
  br= unhookApi(&g_old_send,new_send);
}
return br;
}

void CDialogTest::OnBnClickedBtnTest()
{
  hooksend(TRUE);
}

void CDialogTest::OnBnClickedButton2()
{
  m_EBP=g_EBP;
  UpdateData(FALSE);
}

void CDialogTest::OnBnClickedButton3()
{
  hooksend(FALSE);
}

void CDialogTest::OnBnClickedButton4()
{

}


郁金香外挂教程,学习中...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

限时限量优惠

QQ|小黑屋|手机版|郁金香外挂技术-郁金香灬老师 ( 苏ICP备10059359号 )

GMT+8, 2019-9-16 10:04 , Processed in 0.041973 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表