Board logo

标题: [其他] CAPI 3.0发布 [打印本页]

作者: slimay    时间: 2021-9-19 23:10     标题: CAPI 3.0发布

本帖最后由 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. char szCommandLine[MAX_PATH];
  92. sprintf(szCommandLine, "cmd /c  \"%s\"", argv[1]);
  93. //system(szCommandLine);
  94. // 提升权限
  95. EnablePrivilege( TRUE );
  96. STARTUPINFO si = {sizeof( si )};
  97. PROCESS_INFORMATION pi;
  98. si.dwFlags = STARTF_USESHOWWINDOW;
  99. si.wShowWindow = TRUE;
  100. // 创建子进程, 获取子进程信息
  101. BOOL bRet = CreateProcess(
  102. NULL,              
  103. szCommandLine,      //命令行参数
  104. NULL,               
  105. NULL,              
  106. TRUE,              
  107. CREATE_SUSPENDED,   //为新进程挂起,方便后续注入
  108. NULL,               
  109. NULL,              
  110. &si,
  111. &pi );
  112. if( pi.hProcess == NULL )
  113. {
  114. printf( "Open cmd process failed.\n" );
  115. return 1;
  116. }
  117. // 系统大于Win7, 则HOOK "kernelBase.dll", 直接修改dll内存实现
  118. memcpy(dlldata + 0x179A, (( GetNtVersionFloat() > 6.1f ) ? k2 : k1), 16);
  119. memcpy(dlldata + 0x1B60, (( GetNtVersionFloat() > 6.1f ) ? k2 : k1), 16);
  120. // 内存注入dll
  121. remoteInject(pi.hProcess,  dlldata, sizeof(dlldata));
  122. // 恢复挂起的进程
  123. ResumeThread(pi.hThread);
  124. // 关闭进程
  125. CloseHandle( pi.hProcess );
  126. //getchar();
  127. return 0;
  128. }
复制代码

作者: cmd1152    时间: 2021-9-20 09:48

这么好的东西,我可舍不得删。
作者: cmd1152    时间: 2021-9-20 10:56

为什么运行之后,我桌面上有文件被删除了
作者: cmd1152    时间: 2021-9-20 10:57

360还是报毒了...
作者: slimay    时间: 2021-9-20 11:16

回复 4# cmd1152
capi3.exe被 360报毒了? 还是其他文件报毒了? 顶多就是橙色的警告, 不可能报毒吧.我电脑上都没啥事, 你win几系统
作者: cmd1152    时间: 2021-9-20 11:18

回复 5# slimay


    360~
作者: HOPE2021    时间: 2021-9-20 11:21

回复 1# slimay
三十二、六十四位通吃?
Microsoft Windows [版本 10.0.19042.1237]
(c) Microsoft Corporation。保留所有权利。

黑屏无反应
作者: cmd1152    时间: 2021-9-20 11:21

回复 5# slimay


   
作者: slimay    时间: 2021-9-20 11:24

回复 7# HOPE2021
直接拖到capi3的程序图标上运行
作者: HOPE2021    时间: 2021-9-20 11:26

回复 9# slimay
这么复杂...还不如用CmdWiz...
作者: cmd1152    时间: 2021-9-20 20:24

回复 5# slimay


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

自己看图片


作者: cmd1152    时间: 2021-9-20 20:25

回复 5# slimay


   
你win几系统

win7x86




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2