• 如何在程序执行前插入可执行代码(算是吾爱的作业吧,活学活用)


    0x01准备(爱盘可以下载)

    1.OD
    2.stud_PE

    0x02 给程序增加一个为xxx的区段

    也可以在程序空着的地方添加程序不过这种情况较少,当然也会碰到程序不给添加区段。拖入PEID,原来是准备别的软件进行添加代码的但是防护太强,没成功,之后右击new session添加区段,将虚拟大小和大小写为1000(大了没事,代码够就行),选择空字段填充,确定

    在这里插入图片描述

    0x03 将需要执行的函数导入注册表

    在程序执行前插入可执行代码,c语言使用函数的时候是通过库调用的,我们这里是汇编语言插入代码,所以也是和C语言类似,也是调用c语言的库实现的,下面开始导入库我原来在想插入什么代码好呢,那么就执行一个弹出cmd吧
    在这里插入图片描述
    cmd需要一个叫WinExec函数来执行,该函数在kernel32.dll的链接库种,所以我们调用这个链接库
    在这里插入图片描述
    之后找到这个WinExec这个函数,引入它
    在这里插入图片描述在这里插入图片描述
    这个就是我引入的函数,在最底下,因为之前试过一次所以有两个函数,不过没有关系,还有一点就是记住函数的RVA,马上我们需要用这个RVA来找到函数的VA
    在这里插入图片描述

    0x04 OD载入

    在这里插入图片描述
    因为我们需要在新添加的区段来写代码,所以首先找到这个区段在哪里,点击od上面一排的m按钮,双击xxx
    在这里插入图片描述
    选中复制区段地址
    在这里插入图片描述
    在反汇编窗口中ctrl+g查找区段
    在这里插入图片描述
    这就是我们刚刚添加区段的开头
    在这里插入图片描述
    我们直到刚刚引入了函数有个RVA,下面我们来找函数的VA。在左下角的窗口中ctrl+g查询RVA
    在这里插入图片描述
    找到了VA,记录下来
    在这里插入图片描述
    之后我们用汇编代码写这个执行的代码,也可以其他的比如病毒
    在这里插入图片描述
    这个WinExec函数传入两个参数,一个是5表示SW_SHOW,第二个是要执行的命令(这个可以看Win32API手册),汇编语言的参数可以直接push也可以push一个地址放参数,我们push第二个参数的时候,push的是一个地址(地址是004A502A,汇编语言就写为push 加地址),之后我们开始写函数,函数的写法为call [](中括号里面是VA),最后jmp跳回程序原来的入口,这个地址就在下面一点,与代码段同在xxx区段。左下角ctrl+g查询push的地址

    双击要更改的地方,push 5, push 004A502A, call [004A60C1], jmp 004982B0(视具体情况而定)
    在这里插入图片描述
    转换成16位方便看清
    在这里插入图片描述
    之后更改
    在这里插入图片描述
    添加的参数就在代码段的下面
    在这里插入图片描述
    保存一下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    因为我们添加的xxx区段不是程序的入口点,多以我们修改程序入口点
    在这里插入图片描述
    虚拟地址就是我们xxx区段的地址,之后将相对虚拟地址复制粘贴到入口点,那么入口点更改就完成了
    在这里插入图片描述
    最后运行原来的程序和修改过的程序对比一下
    在这里插入图片描述
    弹出了一个cmd的窗口
    在这里插入图片描述

    0x05 总结

    向程序中添加代码的方式有很多,除了以上的方法还有dll注入和HOOK钩子,而且不一定是在程序的开头插入,结尾也可以,中间也可以,只是难度大一点。

  • 相关阅读:
    javascript基础
    html基础
    css基础
    django-session和cookie
    rest架构
    django-models
    django-templates
    Alignment
    ural 1225.Flags
    ural 1009. K-based Numbers
  • 原文地址:https://www.cnblogs.com/csnd/p/11800558.html
Copyright © 2020-2023  润新知