【发布时间】:2018-09-08 10:56:37
【问题描述】:
我在我大学的一个关于分析恶意软件的项目组中,我必须编写一个程序来生成垃圾代码,就像它曾经出现在恶意软件中一样,以使逆向工程师更难分析它。 现在我没有编程那么久,所以我在启动它时遇到了一些问题。我决定用 python 编写它,这是我开始接触这门语言的开始: `
import random
assem_dic = {1:"mov", 2: "push", 3: "add", 4: "call", 5: "xor", 6: "cmp", 7:
"jmp", 8: "and", 9: "or"} #Assembler-Commands
var_dic = {"mov": 2, "push": 1, "add": 2, "call": 0, "xor": 2, "cmp": 2,
"jmp": 0, "and": 2, "or": 2} #Number of Inputs for Commands
gpreg_dic = {1: "eax", 2: "ebx", 3: "ecx", 4: "edx"} #General-Purpose-
Register
func_dic = {1: "func()", 2: "func2()", 3: "func3()"}
f=open("garbage.txt", "w+")
f.write("Garbage-Code: \n")
for n in range(10):
assem = random.randint(1,9)
print(assem_dic[assem], " ", end="", sep="") #Picking random command
f.write(assem_dic[assem]+ " ")
var = var_dic[assem_dic[assem]] #Checking how much input the command
needs
if(var == 1):
print(random.randint(0,10))
f.write(str(random.randint(0,10))+ "\n")
elif(var == 2):
print(gpreg_dic[random.randint(1,4)], ",", end="", sep="" )
f.write(gpreg_dic[random.randint(1,4)]+",")
print(random.randint(1,10))
f.write(str(random.randint(1,10))+"\n")
else:
print(func_dic[random.randint(1,3)])
f.write(func_dic[random.randint(1,3)]+"\n")
f.close()
`
它只是输出一些随机的汇编命令。 现在我的下一步是制作一个生成随机数据的程序,IDA Pro 从中显示汇编代码(在上面的示例中它当然不起作用),然后作为最后一步生成看起来像真实的垃圾代码的程序函数并在 IDA Pro 中作为函数出现,但没有任何用处,所以函数什么都不做,不会影响你放置它们的主代码。
那么我必须如何编写程序或者我必须输出什么才能在 IDA Pro 中正确显示?我需要创建操作码吗?我有点卡在这里,不知道如何继续。我希望我能够正确解释我的问题。
【问题讨论】:
-
看来需要生成机器码了。