遠端爆破,另類結束程序的方式(插入線程式)

2021-05-25 07:01:37 字數 2146 閱讀 1479

老套結束程序方式是openprocess,然後terminateprocess。但是遇到那些hook過terminateprocess的程式,以及核心模式的程式(比如很多防毒軟體),這招就無能為力了。terminateprocess的最終結果是沒有任何變化或者你的程式直接死掉...

老早就想過用其他方式來結束程序了,比如讓自己也工作在核心模式...這裡給出一種很簡單的辦法,遠端爆破目標程式。說白了,就是插入乙個執行緒到目標程式,執行一段崩潰**,讓目標從內部自己死掉。就好像扔乙個炸彈道目標內部,所以叫遠端爆破。

實現原理:

1.首先是怎麼讓目標程式崩潰。平時有遇到程式崩潰吧,還記得那段**怎麼寫嗎?(誰去記這種會宕機的**啊)不知道怎麼寫,那告訴你乙個最簡單的方式吧,createremotethread的開始位址,直接用0代替,自己試試讀寫0處的物理記憶體吧,是不是直接"0x00000000"指令引用的"0x00000000"記憶體。該記憶體不能為"read"。,出現這個就達到目的了。但是保險起見,還是自行寫一段必然會引起崩潰的**好些,畢竟這樣穩妥些。

其實不用那麼暴力,也能讓目標程式結束掉的。還記得exitprocess()嗎?就是那個只能用在自己程式裡的退出api,注射 $7c81caa2 這個的位址就好了(具體怎麼獲得見後面)。這樣就好比扔把刀子給別人,讓他去自殺...汗

2.注射執行緒的例子就很多了,這裡略過。主要要注意,對於那些核心模式的程序,不在同級下執行是不能createremotethread的。而且最好是提公升到debug許可權,不然別想遠端注射。

程式實現: (全部**在2樓)

1.enableddebugprivilege(true);//提公升到debug許可權。抄delphi下深入windows核心程式設計裡的

2.然後弄到程序id,放到sc_pid裡

hremoteprocess := openprocess(process_create_thread +

process_vm_operation + process_vm_write,

false, sc_pid);

pfnstartaddr := getprocaddress(getmodulehandle('kernel32'), 'exitprocess');

4.老方法,從 $7c81caa2 處遠端執行緒

hthread:=createremotethread(hremoteprocess, nil, 0, pfnstartaddr, nil, 0, tempvar);

這裡也能直接把第三四步和到一塊,更簡潔。第二個nil是指exitprocess的引數,反正我們要呼叫exitprocess(0),所以傳nil了。

好了,執行看看,該死的qq不聲不響的關掉了,word也是,但是lsass.exe不行,exitprocess根本就沒響應。既然這樣,就直接爆破吧。

5.修改createremotethread

hthread:=createremotethread(hremoteprocess, nil, 0, pointer($0), pointer($10000), 0, tempvar);

目標lsass.exe!然後

「lsass.exe - 應用程式錯誤

"0x00000000"指令引用的"0x00000000"記憶體。該記憶體不能為"read"。然後openprocess失效,因為lsass已經被乾掉了。

但是要注意了,像smss.exe這種核心模式的程序,直接用createremotethread是新建不了執行緒的。要想hthread不是0,先讓你的程式也執行在核心模式吧。

為看看效果,於是順手把winlogin.exe spoolsv.exe services.exe也爆破掉了。然後是久違的藍屏...

注意:千萬別去動系統程序,這是我十幾次重啟換來的血的教訓!

pointer($0)這招,當然也有失效的時候,csrss.exe就能讀0位址,不會直接死掉。所以盡量自己實現崩潰**,讓windows告訴我們

「*** 遇到問題需要關閉。我們對此引起的不便表示抱歉。

」吧!其他常見的方法,還有用virtualallocex開一塊超大空間,writeprocessmemory在目標程式裡亂寫等,不過前提是你的許可權足夠大。

執行緒的正確結束方式

在使用c語言進行多執行緒程式設計時,最重要的是執行緒怎麼結束,而不是它怎麼開始。多執行緒程式設計的主要問題,是需要執行緒 正確 結束,我們在程式設計中應該盡量避免使用系統提供的使執行緒強制結束的函式,而應該使用一定的同步方式,保證執行緒分配的資源得到正確地處理,避免記憶體洩漏。很多人在進行多執行緒程...

vc結束程序的幾種方式

1.使用exitprocess 結束程序 程序只是提供了一段位址空間和核心物件,其執行時通過在其位址空間內的主線程來體現的。當主線程的進入點函式返回時,程序也就隨之結束。這種程序的終止方式是程序的正常退出,程序中的所有執行緒資源都能夠得到正確的清除。除了這種程序的正常退出方式外,有時還需要在程式中通...

結束程序的常見方式

乙個程序由於以下五個因素將會導致終止 前三個都是正常終止,後面兩個為非正常終止 程序終止之後,都會執行相同的核心 這段 做的工作就是關閉開啟的檔案,釋放記憶體,和其他的清理工作。int exit int status 程序終止之後,都會執行相同的核心 這段 做的工作就是關閉開啟的檔案,釋放記憶體,和...