找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 14271|回复: 11

[其他] CAPI 3.0发布

[复制链接]
发表于 2021-9-19 23:10:49 | 显示全部楼层 |阅读模式
本帖最后由 slimay 于 2021-9-19 23:17 编辑
CAPI 第一代 是由defanvie开发的一款第三方,堪称批处理第三方的登峰造极之作, 省略描述几百字...
CAPI 第二代 是由aiwozhonghuaba 根据 CAPI 第一代 的 语法特征 仿写的兼容 win8的capix.dll
CAPI 第三代 就是用第一代,弄了个内存注入, 自动操作系统版本判断,自动修改内存,做了一定免杀加花,
         兼容了从xp到 win10的大部分系统.单文件, 无外置dll,是该系列的,一个兼容性扩展版本,32位,
         64位通吃
         (win8用户太少, 故砍掉对win8的支持)
下载地址: http://cmd1152.ys168.com/  文件区    CAPI3.0.zip
         ( 网盘文件随时可能消失, 只发一次 )

核心代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <Windows.h>
  4. #include <memdll.h>

  5. byte dlldata[] = { 0x00, 0x04, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xB8, 0x00, 0x0, ...};
  6. const BYTE k1[16] = "kernel32.dll";
  7. const BYTE k2[16] = "kernelbase.dll";

  8. extern "C" HWND WINAPI GetConsoleWindow( void );


  9. // 获取操作系统版本号 浮点值
  10. FLOAT GetNtVersionFloat()
  11. {
  12.         BOOL bRet = FALSE;
  13.         HMODULE hModNtdll = NULL;
  14.         DWORD dwMajorVer, dwMinorVer, dwBuildNumber;

  15.         if( hModNtdll = ::LoadLibraryW( L"ntdll.dll" ) )
  16.         {
  17.                 typedef void ( WINAPI * pfRTLGETNTVERSIONNUMBERS )( DWORD*, DWORD*, DWORD* );
  18.                 pfRTLGETNTVERSIONNUMBERS pfRtlGetNtVersionNumbers;
  19.                 pfRtlGetNtVersionNumbers = ( pfRTLGETNTVERSIONNUMBERS )::GetProcAddress( hModNtdll, "RtlGetNtVersionNumbers" );
  20.                 if( pfRtlGetNtVersionNumbers )
  21.                 {
  22.                         pfRtlGetNtVersionNumbers( &dwMajorVer, &dwMinorVer, &dwBuildNumber );
  23.                         dwBuildNumber &= 0x0ffff;

  24.                         FLOAT verfv = dwMajorVer + dwMinorVer / 10.0f;
  25.                         return verfv;
  26.                 }

  27.                 ::FreeLibrary( hModNtdll );
  28.                 hModNtdll = NULL;
  29.         }

  30. }

  31. // 提升进程特权
  32. BOOL EnablePrivilege( BOOL enable )
  33. {
  34.         // 得到令牌句柄
  35.         HANDLE hToken = NULL;
  36.         if( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY | TOKEN_READ, &hToken ) )
  37.                 return FALSE;

  38.         // 得到特权值
  39.         LUID luid;
  40.         if( !LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &luid ) )
  41.                 return FALSE;

  42.         // 提升令牌句柄权限
  43.         TOKEN_PRIVILEGES tp = {};
  44.         tp.PrivilegeCount = 1;
  45.         tp.Privileges[0].Luid = luid;
  46.         tp.Privileges[0].Attributes = enable ? SE_PRIVILEGE_ENABLED : 0;
  47.         if( !AdjustTokenPrivileges( hToken, FALSE, &tp, 0, NULL, NULL ) )
  48.                 return FALSE;

  49.         // 关闭令牌句柄
  50.         CloseHandle( hToken );

  51.         return TRUE;
  52. }

  53. // 注入DLL
  54. BOOL InjectDll( HANDLE process, CHAR* dllPath )
  55. {
  56.         DWORD dllPathSize = ( ( DWORD )strlen( dllPath ) + 1 ) * sizeof( CHAR );

  57.         // 申请内存用来存放DLL路径
  58.         void* remoteMemory = VirtualAllocEx( process, NULL, dllPathSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE );
  59.         if( remoteMemory == NULL )
  60.         {
  61.                 return FALSE;
  62.         }

  63.         // 写入DLL路径
  64.         if( !WriteProcessMemory( process, remoteMemory, dllPath, dllPathSize, NULL ) )
  65.         {
  66.                 return FALSE;
  67.         }

  68.         // 创建远线程调用LoadLibrary
  69.         HANDLE remoteThread = CreateRemoteThread( process, NULL, 0, ( LPTHREAD_START_ROUTINE )LoadLibraryA, remoteMemory, 0, NULL );
  70.         if( remoteThread == NULL )
  71.         {
  72.                 return FALSE;
  73.         }

  74.         // 等待远线程结束
  75.         WaitForSingleObject( remoteThread, INFINITE );
  76.         // 取DLL在目标进程的句柄
  77.         DWORD remoteModule;
  78.         GetExitCodeThread( remoteThread, &remoteModule );

  79.         // 释放
  80.         CloseHandle( remoteThread );
  81.         VirtualFreeEx( process, remoteMemory, dllPathSize, MEM_DECOMMIT );
  82.         return TRUE;
  83. }


  84. int main( int argc, char** argv )
  85. {
  86.         // 只接受 1个参数, 即cmd脚本名称
  87.         if(argc != 2 && argc != 3)
  88.         {
  89.                 exit(1);
  90.         }
  91.        
  92.         char szCommandLine[MAX_PATH];
  93.         sprintf(szCommandLine, "cmd /c  "%s"", argv[1]);
  94.         //system(szCommandLine);

  95.         // 提升权限
  96.         EnablePrivilege( TRUE );


  97.         STARTUPINFO si = {sizeof( si )};
  98.         PROCESS_INFORMATION pi;
  99.         si.dwFlags = STARTF_USESHOWWINDOW;
  100.         si.wShowWindow = TRUE;

  101.         // 创建子进程, 获取子进程信息
  102.         BOOL bRet = CreateProcess(
  103.                                                 NULL,              
  104.                                                 szCommandLine,      //命令行参数
  105.                                                 NULL,               
  106.                                                 NULL,              
  107.                                                 TRUE,              
  108.                                                 CREATE_SUSPENDED,   //为新进程挂起,方便后续注入
  109.                                                 NULL,               
  110.                                                 NULL,              
  111.                                                 &si,
  112.                                                 &pi );

  113.         if( pi.hProcess == NULL )
  114.         {
  115.                 printf( "Open cmd process failed.\n" );
  116.                 return 1;
  117.         }



  118.         // 系统大于Win7, 则HOOK "kernelBase.dll", 直接修改dll内存实现
  119.         memcpy(dlldata + 0x179A, (( GetNtVersionFloat() > 6.1f ) ? k2 : k1), 16);
  120.         memcpy(dlldata + 0x1B60, (( GetNtVersionFloat() > 6.1f ) ? k2 : k1), 16);
  121.         // 内存注入dll
  122.         remoteInject(pi.hProcess,  dlldata, sizeof(dlldata));
  123.         // 恢复挂起的进程
  124.         ResumeThread(pi.hThread);


  125.         // 关闭进程
  126.         CloseHandle( pi.hProcess );

  127.         //getchar();
  128.         return 0;
  129. }
复制代码
发表于 2021-9-20 09:48:27 | 显示全部楼层
这么好的东西,我可舍不得删。
发表于 2021-9-20 10:56:25 | 显示全部楼层
为什么运行之后,我桌面上有文件被删除了
发表于 2021-9-20 10:57:04 | 显示全部楼层
360还是报毒了...
 楼主| 发表于 2021-9-20 11:16:10 | 显示全部楼层
回复 4# cmd1152
capi3.exe被 360报毒了? 还是其他文件报毒了? 顶多就是橙色的警告, 不可能报毒吧.我电脑上都没啥事, 你win几系统
发表于 2021-9-20 11:18:23 | 显示全部楼层
回复 5# slimay


    360~
发表于 2021-9-20 11:21:34 | 显示全部楼层
回复 1# slimay
三十二、六十四位通吃?
Microsoft Windows [版本 10.0.19042.1237]
(c) Microsoft Corporation。保留所有权利。

黑屏无反应
发表于 2021-9-20 11:21:35 | 显示全部楼层
回复 5# slimay


   
 楼主| 发表于 2021-9-20 11:24:37 | 显示全部楼层
回复 7# HOPE2021
直接拖到capi3的程序图标上运行
发表于 2021-9-20 11:26:22 | 显示全部楼层
回复 9# slimay
这么复杂...还不如用CmdWiz...
发表于 2021-9-20 20:24:41 | 显示全部楼层
回复 5# slimay


   
顶多就是橙色的警告, 不可能报毒吧

自己看图片

发表于 2021-9-20 20:25:52 | 显示全部楼层
回复 5# slimay


   
你win几系统

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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:11 , Processed in 0.011483 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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