楼主: olly
收起左侧

[原创工具] 显示所有文件

  [复制链接]
R.T
发表于 2009-12-13 00:06:24 | 显示全部楼层
支持了
小小梦
发表于 2009-12-13 06:30:28 | 显示全部楼层
原创就是得支持呀~
zxjzwy
发表于 2009-12-13 08:55:28 | 显示全部楼层
支持,希望继续发扬光大,出一个像xt的作品
gxrsprite
头像被屏蔽
发表于 2009-12-13 10:22:37 | 显示全部楼层
不错的东西,放不放源码啊??
实用价值稍低吧,清理了病毒后啥都能干了,懒得清理病毒的时候倒是很实在
(学校怎么总是带毒 做备份呢。。。)
su-54
发表于 2009-12-13 15:01:13 | 显示全部楼层
都是高人啊
狮子王
发表于 2009-12-13 22:00:49 | 显示全部楼层
回复 1# olly


    楼主能不能讲一下具体的原理,比如怎么注入?试着用了用发现挺好用的!可是就是想学习一下,先谢谢了!
lszx02010
发表于 2009-12-13 22:28:50 | 显示全部楼层
谢谢分享了
pengning
发表于 2009-12-14 20:58:38 | 显示全部楼层
恩恩  很经典   很实用  down
无产阶级
发表于 2009-12-14 21:31:45 | 显示全部楼层
回复 1# olly


    支持
olly
 楼主| 发表于 2009-12-14 21:55:18 | 显示全部楼层
本帖最后由 olly 于 2009-12-14 22:08 编辑

回复 26# 狮子王
代码写的很乱,所以本来不打算贴上来的(太烂了)~~~
注入的话是使用CreateRemoteThread注入的,很古老了= =
以下是注入的代码
  1. VOID RaisePrivilege()
  2. {
  3.         HANDLE hToken;
  4.         TOKEN_PRIVILEGES tp;
  5.         tp.PrivilegeCount = 1;
  6.         tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  7.         if(::OpenProcessToken(::GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken))
  8.         {
  9.                 if(::LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid))
  10.                 {
  11.                         ::AdjustTokenPrivileges(hToken,FALSE,&tp,NULL,NULL,0);
  12.                 }
  13.         }
  14.         if(hToken)
  15.                 ::CloseHandle(hToken);
  16. }

  17. DWORD FindTarget( LPCTSTR lpszProcess )
  18. {
  19.     DWORD dwRet = 0;
  20.     HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
  21.     PROCESSENTRY32 pe32;
  22.     pe32.dwSize = sizeof( PROCESSENTRY32 );
  23.     Process32First( hSnapshot, &pe32 );
  24.     do
  25.     {
  26.         if ( lstrcmpi( pe32.szExeFile, lpszProcess ) == 0 )
  27.         {
  28.             dwRet = pe32.th32ProcessID;
  29.             break;
  30.         }
  31.     } while ( Process32Next( hSnapshot, &pe32 ) );
  32.     CloseHandle( hSnapshot );
  33.     return dwRet;
  34. }

  35. ULONG GetModuleHandleByName(ULONG pid,char *szModuleName)
  36. {
  37.         /*
  38.         该函数相当于GetModuleHandle()函数的增强版,可以用于查找其它进程中的模块信息
  39.         */
  40.         HANDLE hProcess=NULL;
  41.         HMODULE hMods[1024];
  42.         char szModName[MAX_PATH];
  43.         DWORD cbNeeded=0;
  44.         ULONG i;
  45.         char *p;
  46.         ULONG ModuleBase=0;
  47.         hProcess=OpenProcess(PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,FALSE,pid);
  48.         if (!hProcess)
  49.         {
  50.                 return 0;
  51.         }
  52.         if( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
  53.         {
  54.                 for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ )
  55.                 {
  56.                         if ( GetModuleFileNameEx( hProcess, hMods[i], szModName,sizeof(szModName)))
  57.                         {
  58.                                 p=strrchr(szModName,'\\')+1;
  59.                                 if (!stricmp(p,szModuleName))
  60.                                 {
  61.                                         ModuleBase= (ULONG)hMods[i];
  62.                                 }

  63.                         }
  64.                 }
  65.         }
  66.         CloseHandle( hProcess );
  67.         return ModuleBase;
  68. }

  69. BOOL RemoteLoadLibrary( DWORD dwProcessID, LPCSTR lpszDll )
  70. {
  71.     // 打开目标进程
  72.     HANDLE hProcess = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE , FALSE, dwProcessID );

  73.     // 向目标进程地址空间写入DLL名称
  74.     DWORD dwSize, dwWritten;
  75.     dwSize = lstrlenA( lpszDll ) + 1;

  76.     LPVOID lpBuf = VirtualAllocEx( hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE );
  77.     if ( NULL == lpBuf )
  78.     {
  79.         CloseHandle( hProcess );
  80.         return FALSE;
  81.     }
  82.     if ( WriteProcessMemory( hProcess, lpBuf, (LPVOID)lpszDll, dwSize, &dwWritten ) )
  83.     {
  84.         // 要写入字节数与实际写入字节数不相等,仍属失败
  85.         if ( dwWritten != dwSize )
  86.         {
  87.             VirtualFreeEx( hProcess, lpBuf, dwSize, MEM_DECOMMIT );
  88.             CloseHandle( hProcess );
  89.             return FALSE;
  90.         }
  91.     }
  92.     else
  93.     {
  94.         CloseHandle( hProcess );
  95.         return FALSE;
  96.     }
  97.     // 使目标进程调用LoadLibrary,加载DLL
  98.     DWORD dwID;
  99.         LPVOID pFunc = ::GetProcAddress(::LoadLibraryA("kernel32.dll"), "LoadLibraryA");
  100.     HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpBuf, 0, &dwID );
  101.     // 等待LoadLibrary加载完毕
  102.     WaitForSingleObject( hThread, INFINITE );
  103.     // 释放目标进程中申请的空间
  104.     VirtualFreeEx( hProcess, lpBuf, dwSize, MEM_DECOMMIT );
  105.     CloseHandle( hThread );
  106.     CloseHandle( hProcess );
  107.     return TRUE;
  108. }

  109. BOOL RemoteFreeLibrary( DWORD dwProcessID, LPCSTR lpszDll )
  110. {
  111.     // 打开目标进程
  112.     HANDLE hProcess = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, dwProcessID );
  113.     // 向目标进程地址空间写入DLL名称
  114.     DWORD dwSize, dwWritten;
  115.     dwSize = lstrlenA( lpszDll ) + 1;
  116.     LPVOID lpBuf = VirtualAllocEx( hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE );
  117.     if ( NULL == lpBuf )
  118.     {
  119.         CloseHandle( hProcess );
  120.         return FALSE;
  121.     }
  122.     if ( WriteProcessMemory( hProcess, lpBuf, (LPVOID)lpszDll, dwSize, &dwWritten ) )
  123.     {
  124.         // 要写入字节数与实际写入字节数不相等,仍属失败
  125.         if ( dwWritten != dwSize )
  126.         {
  127.             VirtualFreeEx( hProcess, lpBuf, dwSize, MEM_DECOMMIT );
  128.             CloseHandle( hProcess );
  129.             return FALSE;
  130.         }
  131.     }
  132.     else
  133.     {
  134.         CloseHandle( hProcess );
  135.         return FALSE;
  136.     }
  137.     // 使目标进程调用GetModuleHandle,获得DLL在目标进程中的句柄
  138.     DWORD dwHandle, dwID;
  139.         dwHandle = GetModuleHandleByName(dwProcessID, "show.dll");
  140.     // 使目标进程调用FreeLibrary,卸载DLL
  141.         LPVOID pFunc = ::GetProcAddress(::LoadLibraryA("kernel32.dll"), "FreeLibrary");
  142.     HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, (LPVOID)dwHandle, 0, &dwID );
  143.     // 等待FreeLibrary卸载完毕
  144.     WaitForSingleObject( hThread, INFINITE );
  145.     CloseHandle( hThread );
  146.     CloseHandle( hProcess );
  147.     return TRUE;
  148. }

  149. int CALLBACK MainDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
  150. {
  151.     static DWORD dwProcessID;
  152.     switch ( uMsg )
  153.     {
  154.     case WM_INITDIALOG:
  155.         {
  156.             dwProcessID = 0;
  157.             SendDlgItemMessage( hDlg, IDC_EDT_TARGET, EM_LIMITTEXT, MAX_PATH, 0 );
  158.         }
  159.         break;
  160.     case WM_COMMAND:
  161.         {
  162.             switch ( LOWORD( wParam ) )
  163.             {
  164.             case IDC_BTN_EXIT:
  165.                 {
  166.                     EndDialog( hDlg, 0 );
  167.                 }
  168.                 break;
  169.             case IDC_BTN_INSERT:
  170.                 {
  171.                     //TCHAR szTarget[MAX_PATH];
  172.                     //GetDlgItemText( hDlg, IDC_EDT_TARGET, szTarget, MAX_PATH );
  173.                                        
  174.                     dwProcessID = FindTarget( _T("explorer.exe"));
  175.                     if ( 0 == dwProcessID )
  176.                     {
  177.                         MessageBox( hDlg, _T("找不到目标进程。"), _T("错误"), MB_ICONINFORMATION );
  178.                         break;
  179.                     }
  180.                                         if (GetModuleHandleByName(dwProcessID, "show.dll")) {
  181.                                                 MessageBox( hDlg, _T("目标dll已加载。"), _T("错误"), MB_ICONINFORMATION );
  182.                                                 break;
  183.                                         }
  184.                                         CHAR szDllPath[MAX_PATH];
  185.                                         ::GetCurrentDirectoryA(MAX_PATH, szDllPath);
  186.                                         lstrcatA(szDllPath, "\\show.dll");
  187.                                         if (!PathFileExistsA(szDllPath)) {
  188.                                                 MessageBox( hDlg, _T("Dll不存在,请确定show.dll存在于本程序目录。"), _T("错误"), MB_ICONINFORMATION );
  189.                                                 break;
  190.                                         }
  191.                                        
  192.                     if ( !RemoteLoadLibrary( dwProcessID, szDllPath ) ) {
  193.                         MessageBox( hDlg, _T("远程DLL加载失败。"), _T("错误"), MB_ICONINFORMATION );
  194.                     }

  195.                                         if (GetModuleHandleByName(dwProcessID, "show.dll")) {
  196.                                                 MessageBox( hDlg, _T("执行完毕"), _T("提示"), MB_ICONINFORMATION );
  197.                                         } else {
  198.                                                 MessageBox( hDlg, _T("执行失败"), _T("提示"), MB_ICONINFORMATION );
  199.                                         }
  200.                 }
  201.                 break;
  202.             case IDC_BTN_DETACH:
  203.                 {
  204.                                         dwProcessID = FindTarget( _T("explorer.exe"));
  205.                     if ( 0 == dwProcessID )
  206.                     {
  207.                         MessageBox( hDlg, _T("找不到目标进程。"), _T("错误"), MB_ICONINFORMATION );
  208.                         break;
  209.                                         }        
  210.                                        
  211.                                         if (!GetModuleHandleByName(dwProcessID, "show.dll")) {
  212.                                                 MessageBox( hDlg, _T("目标dll未加载。"), _T("错误"), MB_ICONINFORMATION );
  213.                                                 break;
  214.                                         }

  215.                     if ( !RemoteFreeLibrary( dwProcessID, "show.dll" ) )
  216.                     {
  217.                         MessageBox( hDlg, _T("远程DLL卸载失败。"), _T("错误"), MB_ICONINFORMATION );
  218.                     }

  219.                                         MessageBox( hDlg, _T("执行完毕"), _T("提示"), MB_ICONINFORMATION );
  220.                 }
  221.                 break;
  222.             }
  223.         }
  224.         break;
  225.     case WM_CLOSE:
  226.         {
  227.             EndDialog( hDlg, 0 );
  228.         }
  229.         break;
  230.     }
  231.     return 0;
  232. }

  233. int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd )
  234. {
  235.         RaisePrivilege();
  236.     return DialogBox( hInstance, MAKEINTRESOURCE( IDD_MAIN_DLG ), NULL, MainDlgProc );
  237. }
复制代码
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-5-14 13:02 , Processed in 0.096185 second(s), 14 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

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