您的位置:首页 > 编程语言 > C语言/C++

c++实现DLL注入的几种方式

2018-01-10 21:06 183 查看
  经过几天的折腾,找到了几个dll注入的方法,但是不意外的是,都暂时没法注入到LOL中,毕竟有进程保护在那,OpenProcess这一步就直接被拒绝了,提升Debug权限也没用,下面记录一些代码,希望能够得到大牛指导,一个人学习有点蒙。目前实测了CreateRemoteThread,QueueUserApc,和ReflectInject三种注入方式,具体可以参考https://zhuanlan.zhihu.com/p/28537697,文章中给了N种注入方式,以及github地址:https://github.com/fdiskyou/injectAllTheThings,应该都没法直接注入到League
.exe中,且不说之后的tp检测,其中第三种反射注入最为隐蔽,利用dll自己load自己到入口处,而且可以多次注入,已经在其他程序比如sublime_text.exe,mspaint.exe(win10自带画图)等上测试成功,前两种无法多次注入,估计是main只被加载了一次的原因。

  另外说一下开发中遇到的一些问题:

  注意32位和64位,LoadLibraryA和LoadLibraryW分别为char和w_char类型,这点在注入dll路径的时候需要注意,我在这里白白浪费了一天。另外一般使用32位注入32位,64注入64位。

  另外注意EnableDebugPriv()即开启Debug权限函数,虽然我用了也没什么卵用,QQ.exe注入即崩溃,League of legend.exe还是拒绝访问,getLastError()=5,网上查了,TP是ring0级别的,太鸡贼了,如有大神会做外挂希望赐教啊,撸了一周代码,想搞个脚本自己刷刷,屁产出都没有,神魔恋!!!!

   dll(反射注入的dll去github,见源码,那个相对复杂点,需要在dll中导出load自身的函数ReflectiveLoader):extern "C" BOOL APIENTRY DllMain(HMODULE /* hModule */, DWORD ul_reason_for_call, LPVOID /* lpReserved */)
{
using namespace std;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
cout << "load from dll main" << endl;
//ShowImage2();
MessageBox(NULL, TEXT("dll proc attached"), NULL, MB_ICONINFORMATION | MB_YESNO);
break;
case DLL_THREAD_ATTACH:
//MessageBox(NULL, TEXT("dll thread attached"), NULL, MB_ICONINFORMATION | MB_YESNO);
break;
case DLL_THREAD_DETACH:
//MessageBox(NULL, TEXT("dll thread detached"), NULL, MB_ICONINFORMATION | MB_YESNO);
break;
case DLL_PROCESS_DETACH:
MessageBox(NULL, TEXT("dll proc detached"), NULL, MB_ICONINFORMATION | MB_YESNO);
break;
}
return TRUE;
}
  希望能够有人一起学习,大公司的产品防护真的严密,既然这条路暂时行进困难,目前在考虑利用图像识别opencv库来搞一搞,如果能够成功,可以说是100%防封,但是功能相对没那么强大。

  mail:496812133@qq.com,希望能够有人一起学习
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c 脚本 dll注入