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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

编写yara规则,检测恶意软件(自定义yara规则)

發(fā)布時(shí)間:2025/3/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编写yara规则,检测恶意软件(自定义yara规则) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Yara規(guī)則與C語言語法十分相像, 以下是一個(gè)簡(jiǎn)單的規(guī)則, 這個(gè)規(guī)則沒有進(jìn)行任何操作:

rule HelloRule {condition:false }

規(guī)則標(biāo)識(shí)符

規(guī)則標(biāo)識(shí)符是上面簡(jiǎn)單規(guī)則示例中跟在rule后的詞, 比如單詞"dummy"也可以是一個(gè)規(guī)則標(biāo)識(shí)符, 標(biāo)識(shí)符命名有如下要求:

  • 是由英文字母或數(shù)字組成的字符串
  • 可以使用下劃線字符
  • 第一個(gè)字符不能是數(shù)字
  • 對(duì)大小寫敏感
  • 不能超出128個(gè)字符長(zhǎng)度

Yara關(guān)鍵字

下面這些詞不能用作規(guī)則標(biāo)識(shí)符, 因?yàn)檫@些單詞在yara語言里有特定用處

all, and, any, ascii, at, condition, contains entrypoint, false, filesize, fullword, for, global, in import, include, int8, nt16, int32, int8be, int16be int32be, matches, meta, nocase, not, or, of private, rule, strings, them, true, uint8, uint16 uint32, int8be, uint16be, uint32be, wide

通常yara規(guī)則有兩部分:?字符串定義條件

rule HelloRule2 // This is an example {strings:$my_text_string = "text here"$my_hex_string = { E2 34 A1 C8 23 FB }condition:$my_text_string or $my_hex_string }

當(dāng)發(fā)現(xiàn)有規(guī)則里定義的任意字符串, 規(guī)則就會(huì)生效. 如你所見, 你還可以在規(guī)則里添加注釋.

十六進(jìn)制字符串

通配符

十六進(jìn)制字符串可以用通配符表示, 通配符符號(hào)用"?"表示

rule GambitWildcard {strings:$hex_string = { EF 44 ?? D8 A? FB }condition:$hex_string }

這個(gè)規(guī)則可以匹配下面的兩個(gè)字符串

EF?44?01?D8 AA FB
EF?44?AA D8 AB FB

不定長(zhǎng)通配符

不定長(zhǎng)的字符串可以用下面這個(gè)方法表示

rule MarioJump {strings:$hex_string = { F4 23 [4-6] 62 B4 }condition:$hex_string }

這個(gè)規(guī)則可以匹配下面的兩個(gè)字符串

F4?23?01?02?03?04?62?B4
F4?23?AA BB CC DD EE FF?62?B4

當(dāng)然無限長(zhǎng)的字符串也是可以的.

rule BuzzLightyear {strings:$hex_string = { F4 23 [-] 62 B4 }condition:$hex_string }

這個(gè)規(guī)則可以匹配下面的兩個(gè)字符串

F4?23?AA FF?62?B4
F4?23?AA AA AA AA AA...FF FF?62?B4

有條件的字符串

你可以創(chuàng)建一個(gè)字符串應(yīng)對(duì)多種情況

rule WorriedRabbit {strings:$hex_string = { BA 21 ( DA BC | C6 ) A5 }condition:$hex_string }

這個(gè)規(guī)則可以匹配下面的兩個(gè)字符串

BA 21 DA BC A5
BA 21 C6 A5

混合

當(dāng)然, 你也可以將上面這幾種方法結(jié)合起來.

rule WorriedGabmitLightyearJump {strings:$hex_string = { BA ?? ( DA [2-4] | C6 ) A5 }condition:$hex_string }

這個(gè)規(guī)則可以匹配下面的三個(gè)字符串

BA 01 DA 01 02 03 04 A5
BA AA C6 A5
BA FF DA 01 02 A5

文本字符串

除開使用十六進(jìn)制字符串, 我們也還可以使用文本字符串

rule KimPossible {strings:$alert_string = "Whats the Sitch"condition:$alert_string }

你也可以像C語言那樣使用如下的轉(zhuǎn)義符:

\" 雙引號(hào)
\\ 反斜杠
\t 水平制表符
\n 換行符
\xdd 以十六進(jìn)制表示的任何字節(jié)

修飾符

不區(qū)分大小寫的字符串

Yara規(guī)則默認(rèn)對(duì)大小寫敏感, 但你可以使用修飾符將其關(guān)閉

rule ThickSkin {strings:$strong_string = "Iron" nocasecondition:$strong_string }

寬字符串

wide修飾符可以用來搜尋以2字節(jié)表示1字符這種方式編碼的字符串, 這種寬字符串在許多二進(jìn)制文件中都有出現(xiàn). 如果字符串"FatTony"以2字節(jié)表示1字符的方式編碼并在二進(jìn)制文件中出現(xiàn), 我們就可以使用wide修飾符將其捕獲. 因?yàn)?#34;FatTony"也可能是"fattony", 我們也可以添加nocase修飾符以免錯(cuò)過.

rule FatTony {strings:$fat_villain = "FatTony" wide nocasecondition:$fat_villain }

[!]重要提示: 請(qǐng)記住, 該修飾符只是將字符串中字符的ASCII碼和\x00交錯(cuò)起來組成寬字符, 它并不支持包含非英文字符的UTF-16字符串. 要想對(duì)既有ASCII字符和寬字符的字符串進(jìn)行搜索, 請(qǐng)使用如下命令:

rule ASCIIFatTony {strings:$fat_villain = "FatTony" wide ascii nocasecondition:$fat_villain }

字符串默認(rèn)是ASCII編碼, 所以如果你想單獨(dú)用ascii搜索"FatTony", 你并不需要添加ascii修飾符

rule ASCIIFatTony {strings:$fat_villain = "FatTony"condition:$fat_villain }

如果你想在不使用wide和nocase修飾符的情況下進(jìn)行搜索, 上述這個(gè)規(guī)則可以生效.

Fullwords修飾符

該修飾符可用于匹配那些前后沒有附加其他字符的單詞(全詞匹配).

rule ShadyDomain {strings:$shady_domain = "faceebook" fullwordcondition:$shady_domain }

這個(gè)規(guī)則可以匹配下面的三個(gè)字符串

www.faceebook.com
www.myportal.faceebook.com
https://secure.faceebook.com

但這個(gè)規(guī)則不能匹配以下的字符串:

www.myfaceebook.com
thefaceebook.com

兩者區(qū)別在于匹配的全詞前后可以附加特殊字符, 不能是普通字符.

正則表達(dá)式

yara規(guī)則允許使用正則表達(dá)式, 不過要用正斜杠而非雙引號(hào)括起來使用(像Perl編程那樣)

rule RegularShow {strings:$re1 = /md5: [0-9a-fA-F]{32}/$re2 = /state: (on|off)/condition:$re1 and $re2 }

該規(guī)則將捕獲任何狀態(tài)下找到的所有md5字符串.

你也可以在正則表達(dá)式中使用文本修飾符, 如nocase,ascii,widefullword.

元字符

元字符是一個(gè)字符對(duì)計(jì)算機(jī)程序有特定含義(而非字面含義)的字符. 在正則表達(dá)式中, 有以下含義:

**?引用下一個(gè)元字符
^ 匹配文件的開頭
$ 匹配文件的末尾
| 多選
() 分組
[] 方括號(hào)字符類

也可以使用以下量詞:

*?匹配0次或多次
+?匹配1次或多次
? 匹配0次或1次
{n} 只匹配n次
{n, } 至少匹配n次
{ ,m} 至多匹配m次
{n,m} 匹配n到m次

也可以使用以下的轉(zhuǎn)義符:

\t 水平制表符 (HT, TAB)
\n 換行符 (LF, NL)
\r 回車符 (CR)
\f 換頁符 (FF)
\a 響鈴
\xNN 十六進(jìn)制代碼為NN的字符

也可以使用以下字符類:

\w 匹配單詞字符 (單詞可由字母數(shù)字加"_"組成) \W 匹配非單詞字符 \s 匹配空白符 \S 匹配非空白字符 \d 匹配一個(gè)十進(jìn)制數(shù)字字符 \D 匹配一個(gè)非數(shù)字字符 \b 匹配單詞邊界 \B 匹配非單詞邊界

字符串集

如果你想要中列表中選擇一定數(shù)量的字符串, 你可以執(zhí)行以下操作:

rule MigosPresent {strings:$m1 = "Quavo"$m2 = "Offset"$m3 = "Takeoff"condition:2 of ($m1,$m2,$m3) }

如果$m1,?$m2和$m3任意存在兩個(gè), 那么就滿足上述規(guī)則中的條件.

你還可以使用通配符來表示一個(gè)字符集. 像如下這樣使用通配符*

rule MigosPresent {strings:$m1 = "Quavo"$m2 = "Offset"$m3 = "Takeoff"condition:2 of ($m*) }

要表示strings中的所有變量, 你可以使用關(guān)鍵字them

rule ThreeRappersPresent {strings:$m1 = "Quavo"$m2 = "Offset"$m3 = "Takeoff"$q1 = "Cardi B"condition:3 of them // equivalent to 3 of ($*) }

你可以使用任何返回?cái)?shù)值的表達(dá)式. 以下是使用關(guān)鍵字any和all的一個(gè)示例

rule Squad {strings:$m1 = "Quavo"$m2 = "Offset"$m3 = "Takeoff"$q1 = "Cardi B"condition:3 of them // equivalent to 3 of ($*)all of themany of ($*) and 2 of ($*) // Fancy way of using any in a rule that requires 3. }

帶有of和for...of的匿名字符串

如果你沒有專門引用字符串的事件, 你可以僅使用$來將它們?nèi)恳?

rule AnonymousStrings {strings:$ = "dummy1"$ = "dummy2"condition:1 of them }

條件

Yara規(guī)則允許通過and, or, 和not等相關(guān)運(yùn)算符來表示布爾表達(dá)式, 算術(shù)運(yùn)算符(+,-,*,%)和位運(yùn)算符(&, |, <<, >>, ~, ^)也可用于數(shù)值表達(dá)式中.

布爾運(yùn)算

字符串標(biāo)識(shí)符也可在條件中充當(dāng)布爾變量, 其值取決于文件中相關(guān)字符串是否存在.

rule Example {strings:$hero1a = "Batman"$hero1b = "Robin"$hero2a = "Edward"$hero2b = "Alphonse"condition:($hero1a or $hero1b) and ($hero2a or $hero2b) }

計(jì)數(shù)字符串實(shí)例

有時(shí)我們不僅需要知道某個(gè)字符串是否存在, 還需要知道字符串在文件或進(jìn)程內(nèi)存中出現(xiàn)的次數(shù). 每個(gè)字符串的出現(xiàn)次數(shù)由一個(gè)變量表示, 變量名是用#代替$的字符串標(biāo)識(shí)符. 例如:

rule Ransomware {strings:$a = "encrypted"$b = "btc"condition:#a == 2 and #b > 2 }

這個(gè)規(guī)則會(huì)匹配任何包含兩個(gè)字符串$a以及出現(xiàn)至少兩次字符串$b的文件或進(jìn)程.

字符串偏移(虛擬地址)

在大多數(shù)情況下, 當(dāng)在條件中使用字符串標(biāo)識(shí)符, 我們都只需知道關(guān)聯(lián)的字符串是否在文件或進(jìn)程內(nèi)存內(nèi)就行了. 但有時(shí)我們還是需要知道該字符串是否在文件的某個(gè)特定偏移處, 或是在進(jìn)程地址空間的某個(gè)虛擬地址處. 在這種情況下, 我們就需要操作符at.

rule Offset {strings:$a = "encrypted"$b = "btc"condition:$a at 100 and $b at 200 }

如果在文件的偏移100處(或者在一個(gè)正在運(yùn)行的進(jìn)程中, 位于虛擬地址100位置)發(fā)現(xiàn)了字符串$a, 我們的規(guī)則就能捕獲到該字符串. 當(dāng)然字符串$b也要在偏移200位置上才行. 你也可以使用十六進(jìn)制表示而不一定要十進(jìn)制.

rule Offset {strings:$a = "encrypted"$b = "btc"condition:$a at 0x64 and $b at 0xC8 }

at操作符指定到一個(gè)具體的偏移量, 而你可以使用操作符in來指定字符串的位置范圍.

rule InExample {strings:$a = "encrypted"$b = "btc"condition:$a in (0..100) and $b in (100..filesize) }

字符串$a必須在偏移0-100之間才能找到, 而$b則必須是在偏移100到文件末尾位置(才能找到).

你也可以使用@a[i]來取得字符串$a第i個(gè)字符的偏移量或虛擬地址. 字符串索引以1開頭 , 故第1個(gè)字符是@a[1], 第2個(gè)是@[a2]并依此類推, 而不是以@a[0]開始. 如果你提供的索引值大過字符串總共出現(xiàn)的次數(shù). 那結(jié)果就將是值NaN(Not a Number, 非數(shù)字).

匹配長(zhǎng)度

對(duì)于包含跳轉(zhuǎn)的許多正則表達(dá)式和十六進(jìn)制字符串, 匹配長(zhǎng)度用一個(gè)變量表示. 如果你有一個(gè)正則表達(dá)式/fo*/, 可以匹配字符串fo,?foo和fooo, 那么各個(gè)的匹配長(zhǎng)度都是不同的.

在字符串標(biāo)識(shí)符前加一個(gè)!得到匹配長(zhǎng)度, 你就可以將匹配長(zhǎng)度作為你條件的一部分. 跟你獲取偏移時(shí)使用字符@類似,?!a[1]是第一個(gè)匹配到的字符串$a的長(zhǎng)度, 而!a[2]就是第二個(gè)匹配到的字符串的長(zhǎng)度, 依此類推.?!a是!a[1]的縮寫.

rule Hak5 {strings:$re1 = /hack*/ // Will catch on hacker, hacked, hack, hack*condition:!re1[1] == 4 and !re1[2] > 6 }

該規(guī)則可以匹配如下字符串:

We hack things. We are hackers.

第一個(gè)hack是re1[1]且其長(zhǎng)度等于4. 第二個(gè)hack長(zhǎng)度則至少為6

文件大小

字符串標(biāo)識(shí)符并不是唯一可以在條件中出現(xiàn)的變量(實(shí)際上, 可以不定義任何字符串來編寫一個(gè)規(guī)則), 還可以使用其他變量.?filesize就保存著正在掃描的文件的大小. 大小以字節(jié)為單位.

rule FileSizeExample {condition:filesize > 200KB }

我們可以使用后綴KB將文件大小設(shè)置為200KB, 它會(huì)自動(dòng)將常量的值乘上1024, 后綴MB會(huì)可以將值乘以2^20. 這兩個(gè)后綴都只能用于十進(jìn)制常量

[!]重要提示:?filesize僅在規(guī)則應(yīng)用于文件的時(shí)候生效. 如果應(yīng)用于正在運(yùn)行的進(jìn)程, 那么它會(huì)永遠(yuǎn)都匹配不了.

可執(zhí)行程序入口點(diǎn)

如果我們正掃描的文件是一個(gè)PE或ELF文件, 那么變量entry_point會(huì)存有可執(zhí)行文件的入口點(diǎn)偏移值. 而如果我們正掃描一個(gè)運(yùn)行的進(jìn)程, 那么entry_point會(huì)存有可執(zhí)行文件入口點(diǎn)的虛擬地址. 變量entry_point的經(jīng)典用法是用于搜索入口點(diǎn)的一些pattern, 以檢測(cè)殼或簡(jiǎn)單的感染病毒. 目前使用entry_point的方式是通過導(dǎo)入PE和/或ELF的庫并使用它們各自的功能. Yara的entrypoint函數(shù)自第3版開始就已經(jīng)過時(shí)了. 以下是它在第3版之前的樣子.

rule EntryPointExample1 {strings:$a = { E8 00 00 00 00 }condition:$a at entrypoint }rule EntryPointExample2 {strings:$a = { 9C 50 66 A1 ?? ?? ?? 00 66 A9 ?? ?? 58 0F 85 }condition:$a in (entrypoint..entrypoint + 10) }

[!]重要提示: 再次強(qiáng)調(diào), 不要使用yara的entrypoint, 請(qǐng)?jiān)趯?dǎo)入PE或ELF文件后使用對(duì)應(yīng)的pe.entry_point和elf.entry_point

訪問指定位置的數(shù)據(jù)

如果你想從特定偏移位置讀取數(shù)據(jù), 并將其存為一個(gè)變量. 那么你可以使用以下任何一個(gè)方式:

int8(<offset or virtual address>) int16(<offset or virtual address>) int32(<offset or virtual address>)uint8(<offset or virtual address>) uint16(<offset or virtual address>) uint32(<offset or virtual address>)int8be(<offset or virtual address>) int16be(<offset or virtual address>) int32be(<offset or virtual address>)uint8be(<offset or virtual address>) uint16be(<offset or virtual address>) uint32be(<offset or virtual address>)

數(shù)據(jù)存儲(chǔ)默認(rèn)以小端序, 如果你想要讀取大端序的整形數(shù), 請(qǐng)使用下面幾個(gè)以be結(jié)尾的對(duì)應(yīng)函數(shù).

參數(shù)<offset or virtual address>可以是任何一個(gè)返回?zé)o符號(hào)整數(shù)的表達(dá)式, 包括可以是uintXX函數(shù)的返回值.

rule IsPE {condition:// MZ signature at offset 0 and ...uint16(0) == 0x5A4D and// ... PE signature at offset stored in MZ header at 0x3Cuint32(uint32(0x3C)) == 0x00004550 }

for…of: 對(duì)許多字符串應(yīng)用同一個(gè)條件

要用for循環(huán)來檢查一組字符串是否滿足特定條件, 請(qǐng)使用如下語法:

for?num of string_set : ( boolean_expression )

對(duì)每個(gè)string_set的字符串, 都會(huì)計(jì)算boolean_expression的值, 并且這些值必須至少有1個(gè)為真.

當(dāng)然你也可以使用其他關(guān)鍵字, 如all或any代替num來使用.

for?any?of ($a,$b,$c) : ( $ at elf.entry_point? )

$表示集合中的所有字符串. 本例中, 它是字符串$a,?$b和$c.

你也可以使用符號(hào)#和@來引用每一個(gè)字符串的出現(xiàn)次數(shù)和首字符偏移量.

for all of them : ( # > 3 ) for all of ($a*) : ( @ > @b )

迭代字符串出現(xiàn)次數(shù)

如果你想對(duì)偏移迭代并測(cè)試條件. 你可以如下操作:

rule Three_Peat {strings:$a = "dummy1"$b = "dummy2"condition:for all i in (1,2,3) : ( @a[i] + 10 == @b[i] ) }

這個(gè)規(guī)則說的是,?$b出現(xiàn)前三個(gè)的字符串應(yīng)當(dāng)分別隔$a出現(xiàn)的前三個(gè)的字符串10個(gè)字節(jié)遠(yuǎn). 另外一種寫法如下:

for?all?i?in?(1..3) : ( @a[i]?+?10?==?@b[i] )

我們也可以使用表達(dá)式. 在本例中, 我們迭代每一次出現(xiàn)的$a(記住,?#a代表$a的出現(xiàn)次數(shù)). 該規(guī)則指定, 每一次$a都應(yīng)當(dāng)出現(xiàn)在文件的前100個(gè)字節(jié)內(nèi).

for?all?i?in?(1..#a) : ( @a[i] < 100 )

你也可以指定字符串的某一次出現(xiàn)需要滿足條件(而非全部).

for any i in (1..#a) : ( @a[i] < 100 ) for 2 i in (1..#a) : ( @a[i] < 100 )

引用其他規(guī)則

就像C語言中引用函數(shù)那樣. 函數(shù), 或是這里說的規(guī)則, 都必須在使用前進(jìn)行定義.

rule Rule1 {strings:$a = "dummy1"condition:$a }rule Rule2 {strings:$a = "dummy2"condition:$a and Rule1 }

Yara要點(diǎn)

全局規(guī)則

Yara規(guī)則允許用戶在所有規(guī)則中進(jìn)行約束. 如果你希望所有規(guī)則都忽略掉那些超出特定大小限制的文件, 那么你可以對(duì)規(guī)則進(jìn)行必要的修改, 或是編寫一條像以下這樣的全局規(guī)則:

global rule SizeLimit {condition:filesize < 2MB }

你可以根據(jù)需要定義各種全局規(guī)則. 這些規(guī)則會(huì)在其他規(guī)則之前運(yùn)行.

私有規(guī)則

私有規(guī)則在匹配時(shí)沒有任何輸出. 當(dāng)和其它規(guī)則成對(duì)引用時(shí), 這樣就可以使輸出更為清楚. 比如為了判斷文件是否惡意, 有這樣一條私有規(guī)則, 要求文件必須是ELF文件. 一旦滿足這個(gè)要求, 隨后就會(huì)執(zhí)行下一條規(guī)則. 但我們?cè)谳敵隼锵肟吹牟⒉皇窃撐募遣皇荅LF, 我們只想知道文件是否惡意, 那么私有規(guī)則就派上用場(chǎng)了. 要想創(chuàng)建一條私有規(guī)則, 只需要在rule前添加一個(gè)private即可.

private rule PrivateRule {... }

規(guī)則標(biāo)簽

如果你只想查看ruleName類型的規(guī)則輸出, 你可以對(duì)你的規(guī)則打上標(biāo)簽

rule TagsExample1 : Foo Bar Baz {... }rule TagsExample2 : Bar {... }

元數(shù)據(jù)

Yara允許在規(guī)則中存儲(chǔ)一些額外數(shù)據(jù).

rule MetadataExample {meta:my_identifier_1 = "Some string data"my_identifier_2 = 24my_identifier_3 = truestrings:$my_text_string = "text here"$my_hex_string = { E2 34 A1 C8 23 FB }condition:$my_text_string or $my_hex_string }

使用模塊

一些模塊由YARA官方發(fā)布, 比如PE和Cukoo模塊. 這些模塊就如python那樣導(dǎo)入即可, 不過在導(dǎo)入時(shí)模塊名需要添加雙引號(hào)

import "pe" import "cuckoo"

一旦模塊成功導(dǎo)入, 你就可以在函數(shù)前加模塊名, 來使用這些功能.

pe.entry_point == 0x1000 cuckoo.http_request(/someregexp/)

未定義的值

一些值在運(yùn)行時(shí)保留為undefined. 如果以下規(guī)則在ELF文件上執(zhí)行并找到對(duì)應(yīng)的字符串, 那么它的結(jié)果相當(dāng)于TRUE & Undefined.

import "pe"rule Test {strings:$a = "some string"condition:$a and pe.entry_point == 0x1000 }

所以在用的時(shí)候要注意咯!

外部變量

外部變量允許你定義一些, 依賴于第三方提供值的規(guī)則.

rule ExternalVariable1 {condition:ext_var == 10 }

ext_var是一個(gè)外部變量, 它在運(yùn)行時(shí)會(huì)分配有一個(gè)值, (見命令行的-d選項(xiàng)以及yara-python中compile和match方法的參數(shù)). 外部變量可以是int,?str或boolean類型

外部變量可以和操作符contains和matches一起使用.?contains在字符串包含特定子串的情況下返回true. 而matches在字符串匹配給定的正則表達(dá)式時(shí)返回true.

rule ExternalVariable2 {condition:string_ext_var contains "text" }rule ExternalVariable3 {condition:string_ext_var matches /[a-z]+/ }

你也可以將matches操作符和正則表達(dá)式一起使用

rule ExternalVariableExample5 {condition:/* case insensitive single-line mode */string_ext_var matches /[a-z]+/is }

/[a-z]+/is中的i表示匹配時(shí)不區(qū)分大小寫.?s表示是在單行(single line)模式

記住, 你必須在運(yùn)行時(shí)定義好所有的外部變量. 你可以使用-d參數(shù)來指定.

文件包含

當(dāng)然在yara規(guī)則里你可以使用類似C語言的導(dǎo)入方式(#include, 不過yara中并不使用#號(hào)來包含所需的文件, 而是用雙引號(hào)引起來)來包含其他文件. 你可以在包含時(shí)使用相對(duì)路徑或絕對(duì)路徑. 如果是windows系統(tǒng), 甚至還可以是驅(qū)動(dòng)設(shè)備的路徑.

include "Migos.yar" include "../CardiB.yar" include "/home/user/yara/IsRapper.yar" include "c:\\yara\\includes\\oldRappers.yar" include "c://yara/includes/oldRappers.yar"

總結(jié)

好吧. 現(xiàn)在你應(yīng)該知道如何寫一些Yara規(guī)則了.
這里有一些惡意軟件的倉庫, 規(guī)則和工具, 可以讓你來生成yara規(guī)則. 如果你安裝了yarGem, 你只需要將它指向到惡意軟件, 它就會(huì)為該惡意軟件生成一個(gè)簽名. 如果你想捕捉一個(gè)惡意軟件家族, 你最好是將規(guī)則推廣到整個(gè)家族去.

總結(jié)

以上是生活随笔為你收集整理的编写yara规则,检测恶意软件(自定义yara规则)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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