通过LyScript实现从文本中读写ShellCode

 更新时间:2022年08月04日 09:23:34   作者:lyshark  
LyScript 插件通过配合内存读写,可实现对特定位置的ShellCode代码的导出。本文将利用这一特性实现从文本中读写ShellCode,感兴趣的可以了解一下

LyScript 插件通过配合内存读写,可实现对特定位置的ShellCode代码的导出,或者将一段存储在文本中的ShellCode代码插入到程序堆中,此功能可用于快速将自己编写的ShellCode注入到目标进程中,以用于后续测试工作。

LyScript项目地址:https://github.com/lyshark/LyScript

将本地ShellCode注入到堆中: 第一种用法是将一个本地文本中的ShellCode代码导入到堆中。

首先准备一个文本文件,将生成的shellcode放入文件内。

然后可以循环读取文本,并逐个将shellcode注入到目标堆空间中。

from LyScript32 import MyDebug

# 将shellcode读入内存
def read_shellcode(path):
    shellcode_list = []
    with open(path,"r",encoding="utf-8") as fp:
        for index in fp.readlines():
            shellcode_line = index.replace('"',"").replace(" ","").replace("\n","").replace(";","")
            for code in shellcode_line.split("\\x"):
                if code != "" and code != "\\n":
                    shellcode_list.append("0x" + code)
    return shellcode_list

if __name__ == "__main__":
    dbg = MyDebug()
    dbg.connect()

    # 开辟堆空间
    address = dbg.create_alloc(1024)
    print("开辟堆空间: {}".format(hex(address)))
    if address == False:
        exit()

    # 设置内存可执行属性
    dbg.set_local_protect(address,32,1024)

    # 从文本中读取shellcode
    shellcode = read_shellcode("d://shellcode.txt")

    # 循环写入到内存
    for code_byte in range(0,len(shellcode)):
        bytef = int(shellcode[code_byte],16)
        dbg.write_memory_byte(code_byte + address, bytef)

    # 设置EIP位置
    dbg.set_register("eip",address)
    
    input()
    dbg.delete_alloc(address)

    dbg.close()

执行后,堆空间内会自动填充。

如果把这个过程反过来,就是将特定位置的汇编代码保存到本地。

from LyScript32 import MyDebug

# 将特定内存保存到文本中
def write_shellcode(dbg,address,size,path):
    with open(path,"a+",encoding="utf-8") as fp:
        for index in range(0, size - 1):
            # 读取机器码
            read_code = dbg.read_memory_byte(address + index)

            if (index+1) % 16 == 0:
                print("\\x" + str(read_code))
                fp.write("\\x" + str(read_code) + "\n")
            else:
                print("\\x" + str(read_code),end="")
                fp.write("\\x" + str(read_code))

if __name__ == "__main__":
    dbg = MyDebug()
    dbg.connect()

    eip = dbg.get_register("eip")
    write_shellcode(dbg,eip,128,"d://lyshark.txt")
    dbg.close()

写出后的文件如下:

到此这篇关于通过LyScript实现从文本中读写ShellCode的文章就介绍到这了,更多相关LyScript文本读写ShellCode内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 如何设置柱状图参数

    python 如何设置柱状图参数

    这篇文章主要介绍了在python中设置柱状图参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python urllib.request对象案例解析

    Python urllib.request对象案例解析

    这篇文章主要介绍了Python urllib.request对象案例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • PyQt教程之自定义组件Switch Button的实现

    PyQt教程之自定义组件Switch Button的实现

    这篇文章主要为大家详细介绍了PyQt中如何实现自定义组件Switch Button,文中的示例代码简洁易懂,具有一定的学习价值,感兴趣的可以了解一下
    2023-05-05
  • Python实现链表反转与合并操作详解

    Python实现链表反转与合并操作详解

    这篇文章主要为大家详细介绍了 Python 中反转链表和合并链表的应用场景及实现方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2025-02-02
  • Python中 CSV格式清洗与转换的实例代码

    Python中 CSV格式清洗与转换的实例代码

    这篇文章主要介绍了Python123 CSV格式清洗与转换的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • 如何用Python绘制3D柱形图

    如何用Python绘制3D柱形图

    这篇文章主要介绍了如何用Python绘制3D柱形图,帮助大家更好的利用python实现数据可视化,感兴趣的朋友可以了解下
    2020-09-09
  • python3如何获取子线程中函数返回值

    python3如何获取子线程中函数返回值

    这篇文章主要介绍了python3如何获取子线程中函数返回值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • python中自定义with的具体使用

    python中自定义with的具体使用

    在 Python 中,with 语句用于简化资源管理,它保证在执行完代码块后正确地释放资源,通过__enter__和__exit__魔术方法实现,本文就来详细的介绍一下,感兴趣的可以了解一下
    2024-09-09
  • python-web根据元素属性进行定位的方法

    python-web根据元素属性进行定位的方法

    这篇文章主要介绍了python-web根据元素属性进行定位的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Python Pandas中合并数据的5个函数使用详解

    Python Pandas中合并数据的5个函数使用详解

    数据合并是数据处理过程中的必经环节,pandas作为数据分析的利器,提供了五种常用的数据合并方式,让我们看看如何使用这些方法吧!
    2022-05-05

最新评论