首页
社区
课程
招聘
过节结束,回家继续努力,贡献看雪几个小工具(附源)!
发表于: 2007-2-22 17:20 64957

过节结束,回家继续努力,贡献看雪几个小工具(附源)!

2007-2-22 17:20
64957

sysrun
可以用"SYSTEM"用户创建进程,就是任务管理器kill说"拒绝访问"的那种~~
用它开OD可以直接调试系统进程(测试调了MCAFEE的几个.SYS)

killproc
目前除了System和System Idle Process这两个关不掉以外......


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (120)
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
2
不能贴2个附件???
上传的附件:
2007-2-22 17:26
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持支持,好东西应该大家一起分享
2007-2-22 17:33
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
4
继续发烧,贴上源码!

sysrun.c

cl sysrun.cpp Shlwapi.lib advapi32.lib

#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <shlwapi.h>
#include <aclapi.h>

#pragma comment(lib,"Shlwapi.lib")

BOOL EnableDebugPriv(LPCTSTR szPrivilege)
{
  HANDLE hToken;
  LUID sedebugnameValue;
  TOKEN_PRIVILEGES tkp;

  if (!OpenProcessToken(GetCurrentProcess(),
                        TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,
                        &hToken))
  {
    return FALSE;
  }
  if (!LookupPrivilegeValue(NULL, szPrivilege, &sedebugnameValue))
  {
    CloseHandle(hToken);
    return FALSE;
  }

  tkp.PrivilegeCount = 1;
  tkp.Privileges[0].Luid = sedebugnameValue;
  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

  if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL))
  {
    CloseHandle(hToken);
    return FALSE;
  }

  return TRUE;
}

DWORD GetProcessId(LPCTSTR szProcName)
{
  PROCESSENTRY32 pe;  
  DWORD dwPid;
  DWORD dwRet;
  BOOL bFound = FALSE;
  
  HANDLE hSP = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (hSP)
  {
    pe.dwSize = sizeof(pe);

    for (dwRet = Process32First(hSP, &pe);
         dwRet;
         dwRet = Process32Next(hSP, &pe))
        {
      
      if (StrCmpNI(szProcName, pe.szExeFile, strlen(szProcName)) == 0)
      {
        dwPid = pe.th32ProcessID;
        bFound = TRUE;
        break;
      }
    }

    CloseHandle(hSP);

    if (bFound == TRUE)
    {
      return dwPid;
    }
  }

  return NULL;
}

BOOL
CreateSystemProcess(LPTSTR szProcessName)
{
  HANDLE hProcess;
  HANDLE hToken, hNewToken;
  DWORD dwPid;

  PACL pOldDAcl = NULL;
  PACL pNewDAcl = NULL;
  BOOL bDAcl;
  BOOL bDefDAcl;
  DWORD dwRet;

  PACL pSacl = NULL;
  PSID pSidOwner = NULL;
  PSID pSidPrimary = NULL;
  DWORD dwAclSize = 0;
  DWORD dwSaclSize = 0;
  DWORD dwSidOwnLen = 0;
  DWORD dwSidPrimLen = 0;

  DWORD dwSDLen;
  EXPLICIT_ACCESS ea;
  PSECURITY_DESCRIPTOR pOrigSd = NULL;
  PSECURITY_DESCRIPTOR pNewSd = NULL;

  STARTUPINFO si;
  PROCESS_INFORMATION pi;

  BOOL bRet = true;

  if (!EnableDebugPriv("SeDebugPrivilege"))
  {
    printf("EnableDebugPriv() failed!\n");
    bRet = false;
    goto Cleanup;
  }
  

  if ((dwPid = GetProcessId("WINLOGON.EXE")) == NULL)
  {
    printf("GetProcessId() failed!\n");   
    bRet = false;
    goto Cleanup;
  }

  hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwPid);
  if (hProcess == NULL)
  {
    printf("OpenProcess() = %d\n", GetLastError() );   

    bRet = false;
    goto Cleanup;
  }

  if (!OpenProcessToken( hProcess, READ_CONTROL|WRITE_DAC, &hToken ))
  {
    printf("OpenProcessToken() = %d\n", GetLastError());

    bRet = false;
    goto Cleanup;
  }

  ZeroMemory(&ea, sizeof( EXPLICIT_ACCESS));
  BuildExplicitAccessWithName(&ea,
                             "Everyone",
                              TOKEN_ALL_ACCESS,
                              GRANT_ACCESS,
                              0);

  if (!GetKernelObjectSecurity(hToken,
                               DACL_SECURITY_INFORMATION,
                               pOrigSd,
                               0,
                               &dwSDLen))
  {
   
    if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
    {
      pOrigSd = (PSECURITY_DESCRIPTOR) HeapAlloc(GetProcessHeap(),
                                                 HEAP_ZERO_MEMORY,
                                                 dwSDLen);
      if (pOrigSd == NULL)
      {
                  printf("HeapAlloc failed: pSd \n");

        bRet = false;
        goto Cleanup;
      }
      if (!GetKernelObjectSecurity(hToken,
                                   DACL_SECURITY_INFORMATION,
                                   pOrigSd,
                                   dwSDLen,
                                   &dwSDLen))
      {
        printf("GetKernelObjectSecurity() = %d\n", GetLastError());
        bRet = false;
        goto Cleanup;
      }
    }
    else
    {
      printf("GetKernelObjectSecurity() = %d\n", GetLastError());
      bRet = false;
      goto Cleanup;
    }
  }

  if (!GetSecurityDescriptorDacl(pOrigSd, &bDAcl, &pOldDAcl, &bDefDAcl))
  {
    printf("GetSecurityDescriptorDacl() = %d\n", GetLastError());

    bRet = false;
    goto Cleanup;
  }

  dwRet = SetEntriesInAcl(1, &ea, pOldDAcl, &pNewDAcl);
  if (dwRet != ERROR_SUCCESS)
  {
    printf("SetEntriesInAcl() = %d\n", GetLastError());
    pNewDAcl = NULL;

    bRet = false;
    goto Cleanup;
  }

  if (!MakeAbsoluteSD(pOrigSd,
                      pNewSd,
                      &dwSDLen,
                      pOldDAcl,
                      &dwAclSize,
                      pSacl,
                      &dwSaclSize,
                      pSidOwner,
                      &dwSidOwnLen,
                      pSidPrimary,
                      &dwSidPrimLen))
  {
   
    if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
    {
      pOldDAcl = (PACL) HeapAlloc(GetProcessHeap(),
                                  HEAP_ZERO_MEMORY,
                                  dwAclSize);
      pSacl = (PACL) HeapAlloc(GetProcessHeap(),
                               HEAP_ZERO_MEMORY,
                               dwSaclSize);
      pSidOwner = (PSID) HeapAlloc(GetProcessHeap(),
                                   HEAP_ZERO_MEMORY,
                                   dwSidOwnLen);
      pSidPrimary = (PSID) HeapAlloc(GetProcessHeap(),
                                     HEAP_ZERO_MEMORY,
                                     dwSidPrimLen);
      pNewSd = (PSECURITY_DESCRIPTOR) HeapAlloc(GetProcessHeap(),
                                                HEAP_ZERO_MEMORY,
                                                dwSDLen);

      if (pOldDAcl == NULL||
          pSacl == NULL||
          pSidOwner == NULL||
          pSidPrimary == NULL||
          pNewSd == NULL )
      {
        printf("HeapAlloc SID or ACL failed!\n");

        bRet = false;
        goto Cleanup;
      }

      if (!MakeAbsoluteSD(pOrigSd,
                          pNewSd,
                          &dwSDLen,
                          pOldDAcl,
                          &dwAclSize,
                          pSacl,
                          &dwSaclSize,
                          pSidOwner,
                          &dwSidOwnLen,
                          pSidPrimary,
                          &dwSidPrimLen))
      {
        printf("MakeAbsoluteSD() = %d\n", GetLastError());

        bRet = false;
        goto Cleanup;
      }
    }
    else
    {
      printf("MakeAbsoluteSD() = %d\n", GetLastError());

      bRet = false;
      goto Cleanup;
    }
  }

  if (!SetSecurityDescriptorDacl( pNewSd, bDAcl, pNewDAcl, bDefDAcl))
  {
    printf("SetSecurityDescriptorDacl() = %d\n", GetLastError());

    bRet = false;
    goto Cleanup;
  }
  
  if (!SetKernelObjectSecurity( hToken, DACL_SECURITY_INFORMATION, pNewSd))
  {
    printf("SetKernelObjectSecurity() = %d\n", GetLastError());

    bRet = false;
    goto Cleanup;
  }
  
  if (!OpenProcessToken( hProcess, TOKEN_ALL_ACCESS, &hToken))
  {
    printf("OpenProcessToken() = %d\n", GetLastError());   

    bRet = false;
    goto Cleanup;
  }

  if (!DuplicateTokenEx(hToken,
                        TOKEN_ALL_ACCESS,
                        NULL,
                        SecurityImpersonation,
                        TokenPrimary,
                        &hNewToken))
  {
    printf("DuplicateTokenEx() = %d\n", GetLastError());   

    bRet = false;
    goto Cleanup;
  }

  ZeroMemory(&si, sizeof(STARTUPINFO));
  si.cb = sizeof(STARTUPINFO);

  ImpersonateLoggedOnUser(hNewToken);

  if (!CreateProcessAsUser(hNewToken,
                           NULL,
                           szProcessName,
                           NULL,
                           NULL,
                           FALSE,
                           NULL,//NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE,
                           NULL,
                           NULL,
                           &si,
                           &pi))
  {
    printf("CreateProcessAsUser() = %d\n", GetLastError());   

    bRet = false;
    goto Cleanup;
  }
        WaitForSingleObject(pi.hProcess, INFINITE);

Cleanup:
  if (pOrigSd)
  {
    HeapFree(GetProcessHeap(), 0, pOrigSd );
  }
  if (pNewSd)
  {
    HeapFree(GetProcessHeap(), 0, pNewSd );
  }
  if (pSidPrimary)
  {
    HeapFree(GetProcessHeap(), 0, pSidPrimary);
  }
  if (pSidOwner)
  {
    HeapFree(GetProcessHeap(), 0, pSidOwner);
  }
  if (pSacl)
  {
    HeapFree(GetProcessHeap(), 0, pSacl);
  }
  if (pOldDAcl)
  {
    HeapFree(GetProcessHeap(), 0, pOldDAcl);
  }

  CloseHandle(pi.hProcess);
  CloseHandle(pi.hThread);
  CloseHandle(hToken);
  CloseHandle(hNewToken);
  CloseHandle(hProcess);
  return bRet;
}

void main(int argc, char** argv)
{
  if (argc<2)
  {
    printf("Usage %s filename.exe\n", argv[0]);
    return;
  }
  char        cmdLine[] = "\0";
  
  strcpy(cmdLine,argv[1]);
  strcat(cmdLine," ");
  for(int i=1;i<(argc-1);i++)
  {
          strcat(cmdLine,argv[i+1]);
          strcat(cmdLine," ");
  }
  strcat(cmdLine,"\0");
  printf(cmdLine);
  if (CreateSystemProcess(cmdLine) == FALSE)
  {
          printf("CreateSystemProcess() failed!\n");
  }
  return;
}
2007-2-22 17:37
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
5
killproc.c

cl killproc.c Shlwapi.lib advapi32.lib

#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <shlwapi.h>
#include <aclapi.h>

#pragma comment(lib,"Shlwapi.lib")

/*
BOOL EnableDebugPriv( LPCTSTR szPrivilege )
{
  HANDLE hToken;
  LUID sedebugnameValue;
  TOKEN_PRIVILEGES tkp;

  if ( !OpenProcessToken( GetCurrentProcess(),
                          TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,
                          &hToken ) )
  {
    return FALSE;
  }
  if ( !LookupPrivilegeValue( NULL, szPrivilege, &sedebugnameValue ) )
  {
    CloseHandle( hToken );
    return FALSE;
  }

  tkp.PrivilegeCount = 1;
  tkp.Privileges[0].Luid = sedebugnameValue;
  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

  if ( !AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
  {
    CloseHandle( hToken );
    return FALSE;
  }

  return TRUE;
}
*/
BOOL exploit(char* chProcessName)
{

HANDLE hProcessSnap = NULL;

HANDLE hProcess = NULL;

BOOL bFound = FALSE;

BOOL bRet = FALSE;

PROCESSENTRY32 pe32 = {0};

UINT uExitCode = 0;

DWORD dwExitCode = 0;

LPDWORD lpExitCode = &dwExitCode;

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hProcessSnap == INVALID_HANDLE_VALUE)
return (FALSE);

pe32.dwSize = sizeof(PROCESSENTRY32);

printf("Searching for process... \n");

while(!bFound && Process32Next(hProcessSnap, &pe32))
{
if(lstrcmpi(pe32.szExeFile, chProcessName) == 0)
bFound = TRUE;

}

CloseHandle(hProcessSnap);

if(!bFound){

printf("Process not found. \n");

return(FALSE);

}
printf("Process found. \n");

hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);

if(hProcess == NULL){

printf("Write access denied for this process. \n");
printf("Exploit failed. \n");

return(FALSE);
}

printf("Write access is allowed \n");

printf("Send exploit to process...\n");

CreateRemoteThread(hProcess,0,0,(DWORD (__stdcall *)(void *))100,0,0,0);

printf("Success. \n");

return(pe32.th32ProcessID);
}

int main(int argc,char **argv)
{
char* chProcess = argv[1];

if(argc < 2) {

printf("\n");
printf("Usage: killproc.exe <process name> \n");

}
else
{  
//if ( !EnableDebugPriv("SeDebugPrivilege") )
//    printf("EnableDebugPriv() failed!\n");

exploit(chProcess);
}

}
2007-2-22 17:38
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
支持 开源
2007-2-22 18:16
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
7
愤怒菜板 好像连续沙发。。
2007-2-22 18:22
0
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
刚好学习到这方面.谢谢源码.
2007-2-22 18:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
支持 开源
2007-2-25 08:39
0
雪    币: 146
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
谢谢分享~
2007-2-25 11:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习,谢谢源码
2007-3-4 14:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
不错 不错,谢谢分享
2007-3-4 15:31
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
最初由 playx 发布
谢谢分享~
2007-3-4 22:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
感谢楼主源码,学习了谢谢
2007-3-5 20:59
0
雪    币: 207
活跃值: (12)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
谢谢楼主,学习,学习...
2007-3-6 08:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
牛人,谢谢分享,学习!
2007-3-28 08:09
0
雪    币: 217
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
下了,试用一下,谢谢共享。
2007-3-28 23:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢分享,good man
2007-4-15 10:35
0
雪    币: 465
活跃值: (667)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
19
不错,支持。。。。。。。。
2007-4-20 10:40
0
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
20
我来收藏好东西~~~
2007-5-11 17:49
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
下了~~~~~~~谢谢分享哈~~~
2007-5-11 22:49
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
22
我来收藏好东西~~~
2007-5-12 00:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
好东东,下来玩玩
2007-5-14 13:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
谢谢楼主

分享!
2007-5-26 03:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
谢谢了,支持下.
俺是当了5年游客了.
2007-5-30 09:35
0
游客
登录 | 注册 方可回帖
返回
//