吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 6692|回复: 18

[源码] DLL另類劫持注入法

[复制链接]
Cmc5410 发表于 2015-1-10 20:51 | 显示全部楼层 |阅读模式

本帖最后由 Cmc5410 于 2015-1-10 21:11 编辑
  1. // Win32Project2.cpp : 定义 DLL 应用程序的导出函数。
  2. //爲什麼論壇沒有代碼高亮插件
  3. //下一篇發佈LOL人物基址特徵碼
  4. //求給力  求評分
  5. //以及利用基址  實現各種功能
  6. //
  7. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  8. /*

  9.                                    DLL名称劫持注入法

  10. 当游戏运行加载一个重要的的DLL模块时,我们让他来加载我们需要注入的DLL和原来那个必须加载的游戏DLL模块。

  11. 比如说一些游戏加载游戏本身DLL“client.dll”。
  12. 游戏DLL“client.dll”重命名为“client- original.dll”。
  13. 把我们需要注入的DLL重命名成“client.dll”,并把2个DLL放在一起。
  14. 把下面源码的client.exe更换成你需要注入的游戏的进程名。

  15. 原理:
  16. 游戏运行时先加载我们伪造的DLL“client.dll”,但由于关键函数还在原来的client.dll中。
  17. 所以先将自身复制为临时文件“client - temp.dll”
  18. 加载后然后卸载本身。替换原来的“client.dll”并加载。
  19. 然后,它运行一个bat脚本,将等待游戏退出,一旦游戏退出。
  20. bat脚本将复制临时文件“client - temp.dll”到“client.dll”,
  21. 这样它就会在下次游戏启动时继续加载。


  22. */
  23. #include "stdafx.h"
  24. #include "fstream"
  25. using namespace std;


  26. void 替换(char* szBuffer, size_t bufferSize, char* from, char* to)
  27. {
  28.         char* szpTemp,
  29.                 *szpTempBuffer,
  30.                 *szpCurrentBuffer;


  31.         szpCurrentBuffer = szBuffer;
  32.         szpTempBuffer = new char[bufferSize];

  33.         while (true)
  34.         {
  35.                 szpTemp = strstr(szpCurrentBuffer, from);

  36.                 if (szpTemp != NULL)
  37.                 {
  38.                         if (strlen(szBuffer) - strlen(from) + strlen(to) < bufferSize)
  39.                         {
  40.                                 strcpy(szpTempBuffer, szpTemp + strlen(from));

  41.                                 *szpTemp = '\0';
  42.                                 strcat(szpTemp, to);
  43.                                 szpCurrentBuffer = szpTemp + strlen(to);
  44.                                 strcat(szpTemp, szpTempBuffer);
  45.                         }
  46.                         else
  47.                                 break;
  48.                 }
  49.                 else
  50.                         break;
  51.         }

  52.         delete[] szpTempBuffer;
  53. }

  54. DWORD WINAPI ThreadMain(LPVOID lpvParam)
  55. {
  56.         MessageBox(0, "劫持注入成功", "hello", 0);

  57.         return 0;
  58. }

  59. BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpvReserved)
  60. {
  61.         BYTE* pCave;

  62.         ifstream in;

  63.         ofstream out;

  64.         BOOL bLoad;

  65.         FARPROC targetFunction;

  66.         HMODULE hTargetModule;

  67.         char* szpName;

  68.         char szFileName[MAX_PATH],
  69.                 szBuffer[MAX_PATH],
  70.                 szTempBuffer[MAX_PATH];

  71.         char* szpTargetModule;

  72.         STARTUPINFO si = { sizeof(STARTUPINFO) };

  73.         PROCESS_INFORMATION pi;

  74.         char szCmdLine[MAX_PATH];


  75.         bLoad = FALSE;


  76.         if (dwReason == DLL_PROCESS_ATTACH)
  77.         {
  78.                 GetModuleFileName(hModule, szFileName, sizeof(szFileName));
  79.                 strcpy(szBuffer, szFileName);

  80.                 // 判断自身是否为临时文件,如果不是临时文件将创建并加载
  81.                 if (strstr(szFileName, " - temp.dll") == NULL)
  82.                 {
  83.                         替换(szBuffer, sizeof(szBuffer), ".dll", " - temp.dll");

  84.                         if (CopyFile(szFileName, szBuffer, FALSE) != NULL)
  85.                         {
  86.                                 szpTargetModule = (char*)VirtualAlloc(NULL, 1024, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

  87.                                 strcpy(szpTargetModule, szBuffer);

  88.                                 hTargetModule = GetModuleHandle("Kernel32.dll");
  89.                                 targetFunction = GetProcAddress(hTargetModule, "LoadLibraryA");

  90.                                 pCave = (BYTE*)VirtualAlloc(NULL, 0x10, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  91.                                 *pCave++ = 0x68;
  92.                                 *(DWORD*)pCave = (DWORD)szpTargetModule;
  93.                                 pCave += 4;
  94.                                 *pCave++ = 0xe8;
  95.                                 *(DWORD*)pCave = (DWORD)((DWORD)targetFunction - (DWORD)pCave - 4);
  96.                                 pCave += 4;
  97.                                 *pCave++ = 0xc2;
  98.                                 *pCave++ = 0x04;
  99.                                 *pCave++ = 0x00;
  100.                                 pCave -= 13;

  101.                                 CreateThread(0, 0, (LPTHREAD_START_ROUTINE)pCave, 0, 0, 0);
  102.                         }
  103.                 }
  104.                 else
  105.                 {
  106.                         // 如果是临时的DLL
  107.                         替换(szBuffer, sizeof(szBuffer), " - temp.dll", ".dll");

  108.                         // 等待遊戲主進程是否佔用此DLL  等待寫入權限
  109.                         do
  110.                         {
  111.                                 in.open(szBuffer, ios::out);

  112.                                 if (in.is_open() == true)
  113.                                 {
  114.                                         in.close();
  115.                                         break;
  116.                                 }

  117.                                 Sleep(1000);
  118.                         } while (true);



  119.                         // 写一个bat脚本,一旦游戏退出,恢复自身文件名,下次可以继续加载
  120.                         ////  把下面的client.exe改成你需要注入的游戏进程名
  121.                         out.open("bat.bat", ios::out);

  122.                         if (out.is_open() == true)
  123.                         {
  124.                                 out << ":WAITLOOP" << endl;
  125.                                 out << "tasklist /FI "IMAGENAME eq Client.exe" 2>NUL | find /I /N "Client.exe">NUL" << endl;
  126.                                 out << "if "%ERRORLEVEL%"=="0" goto RUNNING" << endl;
  127.                                 out << "goto NOTRUNNING" << endl;

  128.                                 out << ":RUNNING" << endl;
  129.                                 out << "timeout /t 2" << endl;
  130.                                 out << "goto WAITLOOP" << endl;

  131.                                 out << ":NOTRUNNING" << endl;
  132.                                 out << "copy "" << szFileName << "" "" << szBuffer << """ << endl;
  133.                                 out.close();

  134.                                 strcpy(szTempBuffer, szFileName);
  135.                                 *strrchr(szTempBuffer, '\\') = '\0';

  136.                                 sprintf(szCmdLine, "cmd.exe /C "%s\\bat.bat"", szTempBuffer);

  137.                                 CreateProcess(NULL, szCmdLine, 0, 0, FALSE, CREATE_UNICODE_ENVIRONMENT, NULL, 0, &si, &pi);
  138.                         }

  139.                         替换(szFileName, sizeof(szFileName), " - temp.dll", " - original.dll");
  140.                         CopyFile(szFileName, szBuffer, FALSE);

  141.                         LoadLibrary(szBuffer);

  142.                         CreateThread(0, 0, ThreadMain, 0, 0, 0);
  143.                         bLoad = TRUE;
  144.                 }
  145.         }

  146.         return bLoad;
  147. }
复制代码


评分

参与人数 17HB +43 THX +15 收起 理由
消逝的过去 + 2
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
agan8888 + 1
ding520 + 1 &amp;lt;span class=&amp;quot;text2Link&amp;quot;&amp;gt;[吾爱汇编论坛&amp;lt;a target=&amp;quot;_blank&amp;quot;&amp;gt;52HB.COM&amp;lt;/a&amp;gt;]-软件反汇编逆向分析,软件安全必不可少!&amp;lt;/span&amp;gt;.
易子轩 + 2 + 1 虽然不懂 感觉很强大的样子
腐烂世界 + 1 + 1 感谢!新技能get√
雨季 + 1 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
暗组 + 1 + 1 论坛有你更精彩!感谢楼主!
Mrsin + 2 + 1 评分=感恩!简单却充满爱!感谢您的作品!
Scar-疤痕 + 4 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
Shark恒 + 10 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
Foezen + 1 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
寂寞、格式化 + 3 + 1 评分=感恩!简单却充满爱!感谢您的作品!
逍遥枷锁 + 3 + 1 评分=感恩!简单却充满爱!感谢您的作品!
十月 + 1 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
520Kelly + 1 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
yAxI丶9y + 10 + 1 教程非常易懂,对新人帮助极大!楼主大爱!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
yAxI丶9y 发表于 2015-1-10 21:05 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Desire 发表于 2015-1-10 21:09 | 显示全部楼层

yAxI丶9y 发表于 2015-1-10 21:05
么么哒  我居然是沙发~~

你跟楼主是什么关系,我C

评分

参与人数 1HB +1 THX +1 收起 理由
Cmc5410 + 1 + 1 剛剛編輯錯了 當你看到的時候 估計帖子廢了

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Desire 发表于 2015-1-10 21:15 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
520Kelly 发表于 2015-1-10 21:23 | 显示全部楼层

为什么没有E源码
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
我叫KK 发表于 2015-1-10 21:28 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Crook 发表于 2015-1-10 21:54 | 显示全部楼层

要是易语言的源码就更容易看懂了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
yAxI丶9y 发表于 2015-1-11 00:01 | 显示全部楼层

心有予悸 发表于 2015-1-10 21:09
你跟楼主是什么关系,我C

不能说的秘密- -
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
timmy 发表于 2015-1-11 00:07 | 显示全部楼层

感谢楼主无私奉献
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Foezen 发表于 2015-1-11 00:24 | 显示全部楼层

真心看不懂 感谢分享!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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