我在大学里参加了一个关于分析恶意软件的项目组,我必须编写一个程序,生成垃圾代码,就像以前在恶意软件中出现的那样,以使逆向工程师更难分析它。 现在我没有编程那么长时间,所以我有一些问题启动它。我决定用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中显示为函数,但没有任何用处,因此函数什么也不做,这对您将它们放在其中的主代码没有影响。你知道吗
那么,我该如何编写程序,或者我要输出什么才能在idapro中正确显示呢?我需要创建操作码吗?我有点困在这里,不知道该怎么办。我希望我能正确地解释我的问题。你知道吗
您可以利用^{} (disclamer:I编写了库)生成具有
at&t
语法的x86-64
程序集。你知道吗您可以通过创建带有
contextmanager
的py_to_asm.Asm
类的实例或通过简单的实例化来创建assembly
程序。通过使用contextmanager
,可以创建main
标签:输出:
您还可以实例化
py_to_asm.Asm
类,仅用于创建变量、寄存器和值:输出:
要从生成的程序集创建可执行文件,请首先将生成的内容写入文件:
然后,在终端/命令行中运行:
garbage_executable
现在是可执行文件的名称。你知道吗相关问题 更多 >
编程相关推荐