找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 217|回复: 5

[建议提交] 提交几个命令代码,建议增加

[复制链接]

57

主题

94

回帖

648

积分

版主

积分
648
发表于 2024-8-12 21:36:21 | 显示全部楼层 |阅读模式


  1. 函数 空类型 内存搜索(整型 进程ID, 常量 字符型A *寻找文本, 动态数组<整型> 结果)
  2.         结果.清空()
  3.         #嵌入代码
  4.         HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, 0, 进程ID);
  5.         MEMORY_BASIC_INFORMATION mem{0};
  6.         LPVOID address = 0;
  7.         SYSTEM_INFO si;
  8.         GetSystemInfo(&si);
  9.         SIZE_T readedLen = 0;
  10.         int len = strlen(寻找文本);
  11.         while (VirtualQueryEx(h, address, &mem, sizeof(MEMORY_BASIC_INFORMATION)) != 0)
  12.         {
  13.                 if (mem.Protect != 16 && mem.Protect != 1 && mem.Protect != 512){
  14.                         void *buffer = (char*)LocalAlloc(0, mem.RegionSize);
  15.                         memset(buffer, 0, mem.RegionSize);
  16.                         if (ReadProcessMemory(h, address, buffer, mem.RegionSize, 0))
  17.                         {
  18.                                 int i = 0;
  19.                                 while (i < mem.RegionSize){
  20.                                         if (strncmp((char*)(buffer) + i, 寻找文本, len) == 0){
  21.                                                 结果.add((int)address + i);
  22.                                                 break;
  23.                                         }
  24.                                         i++;
  25.                                 }
  26.                         }
  27.                         LocalFree((char*)buffer);
  28.                         buffer = 0;
  29.                 }
  30.                 address = (LPVOID)((int)address + mem.RegionSize);
  31.                 if (address >= si.lpMaximumApplicationAddress){break;}
  32.         }
  33.         CloseHandle(h);
  34.         #嵌入代码_结束



  35. #嵌入代码
  36. LRESULT CALLBACK WindowsProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam) {
  37.         static HWND hEdit;
  38.         static HWND hButton;
  39.         static HWND hButton1;
  40.         static int width = 300;
  41.         static int height = 120;
  42.         static RECT m_rect;
  43.         static int exit_code = 0;
  44.         static CXText *inputText;
  45.         static CXText *default;
  46.         HANDLE h;
  47.         switch (msg)
  48.         {
  49.         case WM_CREATE:
  50.                 GetClientRect(hWnd, &m_rect);
  51.                 width = m_rect.right - m_rect.left;
  52.                 height = m_rect.bottom - m_rect.top;

  53.                 default = (CXText*)GetPropA(hWnd, "obj_inputTextDefault");
  54.                
  55.                 hEdit = CreateWindowExW(0, TEXT("Edit"), TEXT(""), WS_VISIBLE | WS_CHILD | WS_BORDER | ES_MULTILINE, width / 2 - 150, 25, 300, 40, hWnd, (HMENU)1, NULL, NULL);
  56.                 hButton = CreateWindowExW(0, TEXT("Button"), TEXT("确认"), WS_VISIBLE | WS_CHILD, width / 2 - 80, height - 37, 70, 26, hWnd, (HMENU)2, NULL, NULL);
  57.                 hButton1 = CreateWindowExW(0, TEXT("Button"), TEXT("取消"), WS_VISIBLE | WS_CHILD, width / 2 + 5, height - 37, 70, 26, hWnd, (HMENU)3, NULL, NULL);
  58.                 SetPropA(hWnd, "obj_inputEdit", hEdit);
  59.                 SendMessageA(hEdit, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 1);
  60.                 SendMessageA(hButton, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 1);
  61.                 SendMessageA(hButton1, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 1);
  62.                
  63.                
  64.                

  65.                 break;
  66.         case WM_COMMAND:
  67.                 if (LOWORD(wparam) ==1){
  68.                        
  69.                 }else if (LOWORD(wparam) ==2){
  70.                         inputText = (CXText*)GetPropA(hWnd, "obj_inputText");
  71.                         int textLen = GetWindowTextLengthW(hEdit);
  72.                         //XCL_log(textLen);
  73.                         wchar_t *buffer = new wchar_t[(textLen + 1)];
  74.                         memset(buffer, 0, (textLen + 1));
  75.                         GetWindowTextW(hEdit, buffer, (textLen + 1));
  76.                         inputText->erase(0, inputText->getSize());
  77.                         inputText->append(buffer);
  78.                         delete buffer;
  79.                         exit_code = 1;
  80.                         DestroyWindow(hWnd);
  81.                 }else if (LOWORD(wparam) ==3){
  82.                         exit_code = 0;
  83.                         DestroyWindow(hWnd);
  84.                 }
  85.                 break;
  86.         case WM_DESTROY:
  87.                 PostQuitMessage(exit_code);
  88.                 break;
  89.         default:
  90.                 return DefWindowProcW(hWnd, msg, wparam, lparam);
  91.         }
  92.         return DefWindowProcW(hWnd, msg, wparam, lparam);
  93. }

  94. #嵌入代码_结束


  95. 函数 逻辑型 输入框(文本型 结果, 文本型 默认文本 = "", 文本型 标题 = "请输入:")

  96.        
  97.         #嵌入代码
  98.         WNDCLASSEXW wc{};
  99.         wc.hInstance = 0;
  100.         wc.lpszClassName = TEXT("XC_InputWND");
  101.         wc.lpfnWndProc = WindowsProc;
  102.         wc.style = CS_DBLCLKS;
  103.         wc.cbSize = sizeof(WNDCLASSEXW);
  104.         wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
  105.         if (!RegisterClassExW(&wc))
  106.         {
  107.                 return false;
  108.         }
  109.         int xpos = GetSystemMetrics(SM_CXSCREEN) / 2 - 190;
  110.         int ypos = GetSystemMetrics(SM_CYSCREEN) / 2 - 80;
  111.         HWND hWnd = CreateWindowExW(0, TEXT("XC_InputWND"), 标题, WS_OVERLAPPEDWINDOW, xpos, ypos, 380, 160, NULL, NULL, NULL, NULL);

  112.         SetWindowTextW((HWND)GetPropA(hWnd, "obj_inputEdit"), 默认文本.getPtr());
  113.         BOOL ret = SetPropA(hWnd, "obj_inputText", (HANDLE)(&结果));
  114.         //SetPropA(hWnd, "obj_inputTextDefault", (HANDLE)(&默认文本));
  115.         ShowWindow(hWnd, SW_SHOW);
  116.         UpdateWindow(hWnd);
  117.         MSG msg;
  118.         while (GetMessage(&msg, 0, 0, 0)){
  119.                 TranslateMessage(&msg);
  120.                 DispatchMessageW(&msg);
  121.         }

  122.         return msg.wParam == 0?FALSE : TRUE;
  123.         #嵌入代码_结束


  124. //@备注  调用CMD执行命令行代码并返回执行结果
  125. 函数 文本型A 控制台_取执行结果(文本型A 命令行)

  126.         文本型A 结果
  127.         #嵌入代码
  128.         char _str[] = "cmd.exe /c ";
  129.         //char str [] = "ipconfig/all";

  130.         HANDLE hRead, hWrite;
  131.         SECURITY_ATTRIBUTES sa{};
  132.         sa.nLength = 12;
  133.         sa.lpSecurityDescriptor = 0;
  134.         sa.bInheritHandle = TRUE;
  135.         CreatePipe(&hRead, &hWrite, &sa, 0);

  136.         STARTUPINFOA si{};
  137.         si.cb = 68;
  138.         si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
  139.         si.wShowWindow = SW_HIDE;
  140.         si.hStdOutput = hWrite;
  141.         si.hStdError = hWrite;

  142.         PROCESS_INFORMATION pi{};
  143.         int cmdLen = strlen(_str) + strlen(命令行.getPtr()) + 1;
  144.         char *cmd = new char[cmdLen];
  145.         strcpy_s(cmd, cmdLen, _str);
  146.         strcpy_s(cmd + strlen(_str), cmdLen, 命令行.getPtr());

  147.         CreateProcessA(NULL, cmd, 0, 0, TRUE, 0, 0, 0, &si, &pi);
  148.         CloseHandle(hWrite);
  149.         int length = 0;
  150.         while (length !=-1)
  151.         {
  152.                 PeekNamedPipe(hRead, 0, 0, 0, (LPDWORD)&length, 0);
  153.                 if (length != 0) {
  154.                         char* buffer = new char[length + 1];
  155.                         memset(buffer, 0, length + 1);
  156.                         ReadFile(hRead, buffer, length, (LPDWORD)&length, 0);
  157.                         结果.append(buffer);
  158.                         //printf(buffer);
  159.                         //printf("\n");
  160.                 }
  161.                 else
  162.                 {
  163.                         int ExitCode = 0;
  164.                         GetExitCodeProcess(pi.hProcess, (LPDWORD) & ExitCode);
  165.                         if (ExitCode != STILL_ACTIVE) {
  166.                                 CloseHandle(hRead);
  167.                                 break;
  168.                         }
  169.                 }
  170.         }

  171.         CloseHandle(pi.hThread);
  172.         CloseHandle(pi.hProcess);
  173.         #嵌入代码_结束
  174.         返回 结果


复制代码
简单测试了下,目前感觉是没什么问题


32

主题

152

回帖

802

积分

高级会员

积分
802
发表于 2024-8-12 22:01:57 | 显示全部楼层
老板对嵌入代码源码不感兴趣的,他只喜欢己选模块这种模式的!只是我们用惯了火山模式的源码模块,才觉得方便而己!!

57

主题

94

回帖

648

积分

版主

积分
648
 楼主| 发表于 2024-8-12 22:04:56 | 显示全部楼层
呵呵仙 发表于 2024-8-12 22:01
老板对嵌入代码源码不感兴趣的,他只喜欢己选模块这种模式的!只是我们用惯了火山模式的源码模块,才觉得方便 ...

这些打包进去不就是模块了

32

主题

152

回帖

802

积分

高级会员

积分
802
发表于 2024-8-12 22:13:09 | 显示全部楼层
其实,我也和大佬一样喜欢用IDE直接写源码模块.简结,大方,得体,直接,方便修改.就是一升级IDE,就会出现大量BUG,又得老板修复.




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

32

主题

152

回帖

802

积分

高级会员

积分
802
发表于 2024-8-12 22:15:46 | 显示全部楼层
hxznhf 发表于 2024-8-12 22:04
这些打包进去不就是模块了

不可能,绝对不可能.他要用VS重写过.才能叫作模块!!

57

主题

94

回帖

648

积分

版主

积分
648
 楼主| 发表于 2024-8-12 23:19:06 | 显示全部楼层
这些嵌入的C++代码放到模块目录,加上模块注释,就是模块了,没啥区别,我就是VS写好抄过来的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|炫语言 | 炫彩界面库 | 用户所需, 正是我所做! ( 鄂ICP备2023014763号-1 )

GMT+8, 2024-12-28 02:22 , Processed in 0.073725 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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