找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 391|回复: 0

新手也可以用c/c++写黑科技

[复制链接]

113

主题

235

回帖

733

积分

高级会员

积分
733
发表于 2019-8-31 03:11:14 | 显示全部楼层 |阅读模式
"\u003Cdiv\u003E\u003Cp\u003E你看完了这篇文章 这个黑科技黑科技——windows电脑开机密码咱们自己就可以完整用C\u002FC++写出来。下面我们开始\u003C\u002Fp\u003E\u003Cp\u003E#include <Windows.h>\u003C\u002Fp\u003E\u003Cp\u003E#include <stdio.h>\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F提升进程权限\u003C\u002Fp\u003E\u003Cp\u003EBOOL EnableDebugPriviliage;\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F根据进程名获取进程句柄\u003C\u002Fp\u003E\u003Cp\u003EHANDLE GetProcessHandleByName(const CHAR* szName);\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002FMSDN\u003C\u002Fp\u003E\u003Cp\u003Etypedef int(__stdcall *pNtQueryInformationProcess)(HANDLE, DWORD, PVOID, ULONG, PULONG);\u003C\u002Fp\u003E\u003Cp\u003Eint main\u003C\u002Fp\u003E\u003Cp\u003E{\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F1.提升进程权限\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F获取上一次失败\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002FGetLastError\u003C\u002Fp\u003E\u003Cp\u003Eif (FALSE == EnableDebugPriviliage)\u003C\u002Fp\u003E\u003Cp\u003E{\u003C\u002Fp\u003E\u003Cp\u003Eprintf(\"调整进程权限失败.错误代码:%d\", GetLastError);\u003C\u002Fp\u003E\u003Cp\u003Ereturn 0;\u003C\u002Fp\u003E\u003Cp\u003E}\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F2.根据进程名获取进程句柄 lsass.exe\u003C\u002Fp\u003E\u003Cp\u003EHANDLE hLassHandle = GetProcessHandleByName(\"lsass.exe\");\u003C\u002Fp\u003E\u003Cp\u003Eif (hLassHandle == NULL)\u003C\u002Fp\u003E\u003Cp\u003E{\u003C\u002Fp\u003E\u003Cp\u003Eprintf(\"通过进程名获取进程句柄失败.错误代码:%d\", GetLastError);\u003C\u002Fp\u003E\u003Cp\u003Ereturn 0;\u003C\u002Fp\u003E\u003Cp\u003E}\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F3.判断操作系统的版本\u003C\u002Fp\u003E\u003Cp\u003EOSVERSIONINFO osvi = {0};\u003C\u002Fp\u003E\u003Cp\u003Eosvi.dwOSVersionInfoSize = sizeof(osvi);\u003C\u002Fp\u003E\u003Cp\u003EGetVersionEx(&osvi);\u003C\u002Fp\u003E\u003Cp\u003Eif (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)\u003C\u002Fp\u003E\u003Cp\u003Eprintf(\"这是Windows XP\\n\");\u003C\u002Fp\u003E\u003Cp\u003Eelse if (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1)\u003C\u002Fp\u003E\u003Cp\u003Eprintf(\"这是Windows 7\\n\");\u003C\u002Fp\u003E\u003Cp\u003Eelse if (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 2)\u003C\u002Fp\u003E\u003Cp\u003Eprintf(\"这是Windows 8\\n\");\u003C\u002Fp\u003E\u003Cp\u003Eelse if (osvi.dwMajorVersion == 10 && osvi.dwMinorVersion == 0)\u003C\u002Fp\u003E\u003Cp\u003Eprintf(\"这是Windows 10\\n\");\u003C\u002Fp\u003E\u003Cp\u003Ereturn 0;\u003C\u002Fp\u003E\u003Cp\u003E}\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F提升进程权限\u003C\u002Fp\u003E\u003Cp\u003EBOOL EnableDebugPriviliage\u003C\u002Fp\u003E\u003Cp\u003E{\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F打开与进程相关的访问令牌\u003C\u002Fp\u003E\u003Cp\u003EHANDLE hToken;\u003C\u002Fp\u003E\u003Cp\u003Eif (FALSE == OpenProcessToken(\u003C\u002Fp\u003E\u003Cp\u003EGetCurrentProcess, \u002F\u002F当前要修改权限的进程句柄\u003C\u002Fp\u003E\u003Cp\u003ETOKEN_ALL_ACCESS, \u002F\u002F指定你要进行的操作\u003C\u002Fp\u003E\u003Cp\u003E&hToken \u002F\u002F放回访问令牌指针\u003C\u002Fp\u003E\u003Cp\u003E))\u003C\u002Fp\u003E\u003Cp\u003E{\u003C\u002Fp\u003E\u003Cp\u003Ereturn FALSE;\u002F\u002F失败\u003C\u002Fp\u003E\u003Cp\u003E}\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F查看系统权限特权值\u003C\u002Fp\u003E\u003Cp\u003ELUID luid;\u003C\u002Fp\u003E\u003Cp\u003Eif (FALSE == LookupPrivilegeValue(\u003C\u002Fp\u003E\u003Cp\u003ENULL, \u002F\u002F要查看的系统,NULL本地系统\u003C\u002Fp\u003E\u003Cp\u003ESE_DEBUG_NAME, \u002F\u002F指定特权名称\u003C\u002Fp\u003E\u003Cp\u003E&luid \u002F\u002F用来接收所返回的指定特权名的信息\u003C\u002Fp\u003E\u003Cp\u003E))\u003C\u002Fp\u003E\u003Cp\u003E{\u003C\u002Fp\u003E\u003Cp\u003Ereturn FALSE;\u003C\u002Fp\u003E\u003Cp\u003E}\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F调整访问令牌的权限\u003C\u002Fp\u003E\u003Cp\u003ETOKEN_PRIVILEGES tkp;\u003C\u002Fp\u003E\u003Cp\u003Etkp.PrivilegeCount = 1;\u003C\u002Fp\u003E\u003Cp\u003Etkp.Privileges[0].Luid = luid;\u003C\u002Fp\u003E\u003Cp\u003Etkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;\u003C\u002Fp\u003E\u003Cp\u003Eif (FALSE == AdjustTokenPrivileges(\u003C\u002Fp\u003E\u003Cp\u003EhToken, \u002F\u002F包含特权的访问令牌\u003C\u002Fp\u003E\u003Cp\u003EFALSE, \u002F\u002F是够禁用所有特权标志\u003C\u002Fp\u003E\u003Cp\u003E&tkp, \u002F\u002F新的特权信息\u003C\u002Fp\u003E\u003Cp\u003Esizeof(tkp), \u002F\u002F缓冲区大小\u003C\u002Fp\u003E\u003Cp\u003ENULL, \u002F\u002F用来被接受改变特权当前状态Buffer\u003C\u002Fp\u003E\u003Cp\u003ENULL \u002F\u002F缓冲区大小\u003C\u002Fp\u003E\u003Cp\u003E))\u003C\u002Fp\u003E\u003Cp\u003E{\u003C\u002Fp\u003E\u003Cp\u003Ereturn FALSE;\u003C\u002Fp\u003E\u003Cp\u003E}\u003C\u002Fp\u003E\u003Cp\u003Ereturn TRUE;\u003C\u002Fp\u003E\u003Cp\u003E}\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F根据进程名获取进程句柄\u003C\u002Fp\u003E\u003Cp\u003EHANDLE GetProcessHandleByName(const CHAR* szName)\u003C\u002Fp\u003E\u003Cp\u003E{\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002Fntdll.dll 地址\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002FNtQueryInformationProcess\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F获取函数的地址\u003C\u002Fp\u003E\u003Cp\u003EpNtQueryInformationProcess NtQueryInformationProcess = (pNtQueryInformationProcess)GetProcAddress(GetModuleHandle(\"ntdll.dll\"), \"NtQueryInformationProcess\");\u003C\u002Fp\u003E\u003Cp\u003EDWORD dwProcessId; \u002F\u002F进程ID\u003C\u002Fp\u003E\u003Cp\u003EHANDLE hProcess; \u002F\u002F进程句柄\u003C\u002Fp\u003E\u003Cp\u003EWCHAR szBuffer[MAX_PATH+0x20];\u003C\u002Fp\u003E\u003Cp\u003EDWORD nReturnLength;\u003C\u002Fp\u003E\u003Cp\u003E公众号——“游戏开发教程”\u003C\u002Fp\u003E\u003Cp\u003Efor (dwProcessId = 4; dwProcessId < 10000:0; dwProcessId+=4)\u003C\u002Fp\u003E\u003Cp\u003E{\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F根据进程ID打开进程\u003C\u002Fp\u003E\u003Cp\u003EhProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F查看指定进程信息\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F\u003C\u002Fp\u003E\u003Cp\u003Eif (!NtQueryInformationProcess(hProcess, 27, szBuffer, sizeof(szBuffer), &nReturnLength))\u003C\u002Fp\u003E\u003Cp\u003E{\u003C\u002Fp\u003E\u003Cp\u003EPWCHAR pszPath = (PWCHAR)((char*)szBuffer +8);\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002F字符集转换 宽字符串转成多字节 Unicode=>ANSI\u003C\u002Fp\u003E\u003Cp\u003Eint nLength = WideCharToMultiByte(CP_ACP, 0, pszPath, wcslen(pszPath), NULL,0,0,0);\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002Fprintf(\"%s\\n\", (char*)pszPath);\u003C\u002Fp\u003E\u003Cp\u003Echar *pszNewPath = new char[nLength];\u003C\u002Fp\u003E\u003Cp\u003EWideCharToMultiByte(CP_ACP, 0, pszPath, -1, pszNewPath, nLength, 0, 0);\u003C\u002Fp\u003E\u003Cp\u003E\u002F\u002Fprintf(\"%s\\n\", pszNewPath);\u003C\u002Fp\u003E\u003Cp\u003Echar *pos = strstr(pszNewPath, szName);\u003C\u002Fp\u003E\u003Cp\u003Eif (pos != NULL)\u003C\u002Fp\u003E\u003Cp\u003E{\u003C\u002Fp\u003E\u003Cp\u003Edelete pszNewPath;\u003C\u002Fp\u003E\u003Cp\u003Ereturn hProcess;\u003C\u002Fp\u003E\u003Cp\u003E}\u003C\u002Fp\u003E\u003Cp\u003Eelse\u003C\u002Fp\u003E\u003Cp\u003Edelete pszNewPath;\u003C\u002Fp\u003E\u003Cp\u003E}\u003C\u002Fp\u003E\u003Cp\u003E}\u003C\u002Fp\u003E\u003Cp\u003Ereturn NULL;\u003C\u002Fp\u003E\u003Cp\u003E} \u003C\u002Fp\u003E\u003C\u002Fdiv\u003E"
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|芝加哥华人服务中心

GMT-5, 2024-4-27 09:58 , Processed in 0.076483 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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