垃圾代码生成器的输出是什么?

问题描述 投票:0回答:1

我在一个关于在我的大学分析恶意软件的项目集团,我必须编写一个程序,生成像恶意软件中出现的垃圾代码,以便反向工程师分析它。现在我不是那么长时间编程所以我在启动时遇到了一些问题。我决定用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中正确显示?我需要创建操作码吗?我有点卡在这里,不知道该怎么做。我希望我能够正确解释我的问题。

python assembly generator
1个回答
0
投票

你可以利用qazxsw poi(免责声明:我编写了这个库)用py_to_asm语法生成qazxsw poi程序集。

您可以通过使用x86-64或通过简单实例化创建at&t类的实例来创建assembly程序。通过使用py_to_asm.Asm,可以创建contextmanager标签:

contextmanager

输出:

main

您也可以仅实例化import py_to_asm with py_to_asm.Asm(_label_name = '_main', is_main=True) as asm: #assembly to add two values asm.mov(asm.register.EAX, asm.integer(2)) asm.mov(asm.register.EDX, asm.integer(5)) asm.add(asm.register.EAX, asm.register.EDX) print(asm) 类来创建变量,寄存器和值:

.data

.text
.globl _main
_main:
  pushq %rbp
  movq %rsp, %rbp
  subq $16, %rsp
  movl $2, %eax
  movl $5, %edx
  addl %edx, %eax
  leave
  ret

输出:

py_to_asm.Asm

要从生成的程序集创建可执行文件,请首先将生成的内容写入文件:

_asm = py_to_asm.Asm()
all_registers = _asm.register.__class__.registers
register_storage = _asm.register.EAX.__class__.converter
eax = _asm.register.EAX
edx = _asm.register.EDX
val = _asm.integer(2)
print(all_registers)
print(register_storage)
print(eax, edx, val)

然后,在终端/命令行中,运行:

['RAX', 'RCX', 'RDX', 'RBX', 'RSP', 'RBP', 'RSI', 'RDI', 'EAX', 'ECX', 'EDX', 'EBX', 'ESP', 'EBP', 'ESI', 'EDI', 'AX', 'CX', 'DX', 'BX', 'SP', 'BP', 'SI', 'DI', 'AH', 'AL', 'CH', 'CL', 'DH', 'DL', 'BH', 'BL']
{'RAX': 64, 'RCX': 64, 'RDX': 64, 'RBX': 64, 'RSP': 64, 'RBP': 64, 'RSI': 64, 'RDI': 64, 'EAX': 32, 'ECX': 32, 'EDX': 32, 'EBX': 32, 'ESP': 32, 'EBP': 32, 'ESI': 32, 'EDI': 32, 'AX': 16, 'CX': 16, 'DX': 16, 'BX': 16, 'SP': 16, 'BP': 16, 'SI': 16, 'DI': 16, 'AH': 8, 'AL': 8, 'CH': 8, 'CL': 8, 'DH': 8, 'DL': 8, 'BH': 8, 'BL': 8}
%eax %edx $2

with asm.write('garbage_code.s'): pass 现在是可执行文件的名称。

© www.soinside.com 2019 - 2024. All rights reserved.