遠執行緒刪除自身 來自SWAN

2021-04-09 01:39:28 字數 2528 閱讀 4069

#include

#include

#ifndef delete_self_swan

#define delete_self_swan $$$

typedef hinstance (__stdcall *rfdeleteloadlibraryw)(lpctstr);

typedef farproc (__stdcall *rfdeletegetprocaddress)(hmodule, lpcstr);

typedef hinstance (__stdcall *rfdeletegetmodulehandle)(lpctstr);

typedef dword (__stdcall *rfdeletedeletefilea)(char*);

typedef void (__stdcall *rfdeletesleep)(dword);

struct deleteinfo

;struct remoteparam

;dword winapi remotedeleteselfthread(void *para)

dword deleteself()

dword dwremoteprocessid;

getwindowthreadprocessid(hwnd, &dwremoteprocessid);

//給自己debug許可權

handle htoken;

if(openprocesstoken(getcurrentprocess(),token_adjust_privileges,&htoken))

//handle hremoteprocess = openprocess(process_create_thread|process_vm_operation|process_vm_write, false, dwremoteprocessid );

if(!hremoteprocess)

lpvoid pstart = virtualallocex(hremoteprocess, null, isizeneed, mem_commit, page_execute_readwrite);

if(!pstart)

ireturncode = writeproces**emory(hremoteprocess, pstart, remotedeleteselfthread, isizeneed, null);

if(!ireturncode)

//初始化要傳過去的引數

hmodule hkernel32 = loadlibrary("kernel32.dll");

rp.fnloadlibrary = (rfdeleteloadlibraryw)getprocaddress(hkernel32, "loadlibrarya");

rp.fngetprocaddress = (rfdeletegetprocaddress)getprocaddress(hkernel32, "getprocaddress");

rp.fngetmodulehandle = (rfdeletegetmodulehandle)getprocaddress(hkernel32, "getmodulehandlea");

strcpy(rp.strkernel32, "kernel32.dll");

strcpy(rp.strsleep, "sleep");

strcpy(rp.strdeletefilea, "deletefilea");

getmodulefilename(null, rp.di.filename, 255);

rp.di.interval = 200;

//寫入傳遞過去的引數

pvoid pparam = virtualallocex(hremoteprocess, null, sizeof(remoteparam), mem_commit, page_execute_readwrite);

if(!pparam)

ireturncode = writeproces**emory(hremoteprocess, pparam, &rp, sizeof(remoteparam), null);

if(!ireturncode)

handle hremotethread = createremotethread(hremoteprocess, null, 0,

(pthread_start_routine)pstart, pparam, 0, null);

if(!hremotethread)

//waitforsingleobject(hremotethread, -1);

//virtualfreeex(hremoteprocess, pparam, sizeof(remoteparam), mem_decommit);

//virtualfreeex(hremoteprocess, pstart, isizeneed, mem_decommit);

closehandle(hremoteprocess);

closehandle(hremotethread);

return true;

}#endif

用遠執行緒實現檔案自刪除

實現檔案自刪除不是一個特別新的話題了,不過貌似一直沒有特別完美的解決方式。從早先gary nebbett的堆疊溢位版本到後來的批處理 臨時檔案等方式,無不存在著各樣瑕疵 如堆疊溢位不支援xp,臨時檔案 批處理 不夠優雅等等。當然,還有用驅動發irp的方式,不過這只是一個自刪除,殺雞焉用牛刀?於是這個...

遠端執行緒注入實現自刪除

核心函式 include include pragma comment lib,kernel32.lib pragma comment lib,user32.lib bool enabledebugpriv lpctstr szprivilege if lookupprivilegevalue nu...

程式自刪除

之所以可以使用批處理來實現檔案自刪除,是因為批處理有一個特別的地方就是 批處理提供了自己刪除自己的命令 del 0這個命令,批處理執行完後,就會把自身檔案刪除了,而且不放進 站。所以,有了這個關鍵技術作為前提,使用批處理方式實現程式的自刪除,就好理解了。這樣,程序建立起來,執行批處理檔案。等批處理檔...

SSDT HOOK攔截遠執行緒的建立(下)

第三部分 從程序控制代碼獲取資訊 在第二部分我們使用了一個前提 可以通過程序控制代碼得到pid等資訊。事實上這是可行的,這一部分我們就進行介紹。我這裡使用的是爐子大蝦的 api hook實現ring3的程序保護 一文中提到的方法。爐子那篇文章裡講的很詳細,這裡只說下如何從程序控制代碼中獲取資訊吧,在...

mysql 刪除執行緒 批量刪除mysql執行緒

應為某種原因造成資料庫sql堵塞,需要kill掉程序,但是由於執行緒有可能開出56百個執行緒,這中情況下只能批量殺了。one root wlyy newbbs p db 09 newdate mysql uroot p s usr local mysql55 sock mysql.sock e sh...