日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

反沙箱——SetErrorMode

發(fā)布時間:2023/12/1 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 反沙箱——SetErrorMode 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

1.前言

2.原理講解

3.代碼實(shí)現(xiàn)

4.參考

?

1.前言

利用SetErrorMode進(jìn)行反沙箱的技術(shù),在2010年就有被提出,但是之前搜了很久都沒有相關(guān)內(nèi)容,這里簡單的說一下這個反沙箱的實(shí)現(xiàn)。反沙箱參考GandCrab5.2。

?

2.原理講解

首先講一下SetErrorMode這個函數(shù),SetErrorMode是用于設(shè)置如何處理程序錯誤的,設(shè)置不同的值有不同的作用,下面是機(jī)翻的結(jié)果。

?

而SetErrorMode有一個特點(diǎn)就是返回值為上次設(shè)置的值,如下代碼和結(jié)果。

1 #include<Windows.h> 2 #include<stdio.h> 3 4 int main() 5 { 6 DWORD dwCode; 7 //開始沒有設(shè)置任何值,所以返回值為0 8 dwCode = SetErrorMode(SEM_FAILCRITICALERRORS); 9 printf("the first dwCode:0x%x\n", dwCode); 10 11 //這里設(shè)置值SEM_NOGPFAULTERRORBOX是2,返回值為前面設(shè)置的值所以為1 12 dwCode = SetErrorMode(SEM_NOGPFAULTERRORBOX); 13 printf("the second dwCode:0x%x\n", dwCode); 14 15 return 0; 16 }

?

但是這里有一個特別的參數(shù)SEM_NOALIGNMENTFAULTEXCEPT,簡單來說就是設(shè)置這個值后就不會消除這個值。

1 #include<Windows.h> 2 #include<stdio.h> 3 4 int main() 5 { 6 DWORD dwCode; 7 //開始沒有設(shè)置任何值,所以返回值為0 8 dwCode = SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT); 9 printf("the first dwCode:0x%x\n", dwCode); 10 11 //這里設(shè)置為SEM_NOGPFAULTERRORBOX,返回值為上次設(shè)置的值為0x4 12 dwCode = SetErrorMode(SEM_NOGPFAULTERRORBOX); 13 printf("the second dwCode:0x%x\n", dwCode); 14 15 //這里設(shè)置為SEM_FAILCRITICALERRORS,返回值卻不為0x2,這是由于前面設(shè)置的SEM_NOALIGNMENTFAULTEXCEPT不會清除,所以疊加0x4+0x2 16 dwCode = SetErrorMode(SEM_FAILCRITICALERRORS); 17 printf("the second dwCode:0x%x\n", dwCode); 18 19 return 0; 20 }

?

3.代碼實(shí)現(xiàn)

那上面講解的內(nèi)容和反沙箱有什么關(guān)系呢?我們先看看cuckoosandbox里的一段代碼,沙箱會預(yù)先設(shè)置值用于監(jiān)控錯誤的發(fā)生,這里就用到了SetErrorMode并且其中的參數(shù)有SEM_NOALIGNMENTFAULTEXCEPT。

?

由于沙箱和運(yùn)行的樣本類似于進(jìn)程和之進(jìn)程的關(guān)系,所以利用SetErrorMode才可以檢測,如果是同一系統(tǒng)下的兩個進(jìn)程設(shè)置了SetErrorMode是不會相互影響的。那么就可以利用這個設(shè)置來模擬一下沙箱環(huán)境下代碼的運(yùn)行情況,代碼和效果如下

1 #include<Windows.h> 2 #include<stdio.h> 3 4 int main() 5 { 6 //模擬沙箱環(huán)境設(shè)置 7 SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); 8 9 DWORD dwCode ; 10 dwCode = SetErrorMode(0x400); //雖然沒有參數(shù)的值為0x400,但是這里設(shè)置也可以正常運(yùn)行 11 //這里返回前面設(shè)置的值,0x1+0x2+0x4+0x8000=0x8007 12 printf("the first dwCode:0x%x\n", dwCode); 13 dwCode = SetErrorMode(0x0); 14 //由于之前設(shè)置了SEM_NOALIGNMENTFAULTEXCEPT,所以這里返回值為是0x400+0x4=0x404 15 printf("the second dwCode:0x%x\n", dwCode); 16 //在沙箱下返回0x404與0x400不相等,所以可以判斷是在沙箱下。如果在正常情況下返回0x400 17 if (dwCode != 0x400) 18 { 19 printf("In Sandbox\n"); 20 } 21 else 22 { 23 printf("In normal machine\n"); 24 } 25 26 return 0; 27 }

?

4.參考

http://joxeankoret.com/blog/2010/02/23/antiemulation-techniques-malware-tricks-ii/

https://asec.ahnlab.com/1202

轉(zhuǎn)載于:https://www.cnblogs.com/QKSword/p/10739142.html

總結(jié)

以上是生活随笔為你收集整理的反沙箱——SetErrorMode的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。