result.append([1,matches['main'][0]['rule']]) 并收到消息 TypeError: list index必须是整数,而不是str



im使用下面的代码,但它不起作用。。此处提供filepath的内容peid.yara。此处的完整代码integrated_feature_extraction.py

def __init__(self,source,output,label):
self.source = source
self.output = output
self.type = label
#Need PEiD rules compile with yara
self.rules= yara.compile(filepath='/home/osboxes/honeymalware/scripts/peid.yara')  

def check_packer(self,filepath):
result=[]
matches = self.rules.match(filepath)
if matches == []:
result.append([0,"NoPacker"])
else:
result.append([1,matches['main'][0]['rule']])
return result

def main():    
source_path= raw_input("Enter the path of samples (ending with /) >>  ")
output_file= raw_input("Give file name of output file. (.csv) >>")
label = raw_input("Enter type of sample( malware(1)|benign(0))>>")

当我运行程序时,我得到一个错误

Traceback (most recent call last):
File "integrated_features_extraction.py", line 375, in <module>
main()
File "integrated_features_extraction.py", line 372, in main
features.create_dataset()
File "integrated_features_extraction.py", line 356, in create_dataset
data = self.extract_all(filepath)
File "integrated_features_extraction.py", line 330, in extract_all
packer = self.check_packer(filepath)
File "integrated_features_extraction.py", line 239, in check_packer
result.append([1,matches['main'][0]['rule']])
TypeError: list indices must be integers, not str

我认为在执行result.append([1,matches['main'][0]['rule']])时出现了问题。上面的代码出了什么问题??。我该怎么办??输出应该是"0";无封隔器";或文件路径中的rulename。

问题在于Yara模块的match((方法的更改。早些时候,返回了一个字典,所以它是使用键访问的,但现在它返回一个列表,所以需要更改代码。

我已经写了这个脚本,所以我在GitHub项目页面上更新了同样的脚本。

else:
#result.append([1,matches['main'][0]['rule']])
result.append([1,matches[0]])

感谢大家发现并解决了这个问题。

可以使用索引访问列表,例如matches[0]、matches[1]、matches[2]。。等等,在您的程序中,您使用字符串'main'和'rule'访问了一个列表,匹配['main'][0]['rule'],这会引发TypeError的异常。

相关内容

  • 没有找到相关文章

最新更新