zoukankan      html  css  js  c++  java
  • 任意程序添加ShellCode

    • 我先写了一个小程序Test.exe(注意:由于我用的是控制台程序没有导入user32.dll所以我用的直接添加ShellCode是不行的,要么在ShellCode中导入user32.dll要么在程序中Load一下,如果没有以下测试不成功)。
    //Test.exe源代码
    #include <stdio.h> #include <windows.h> int main(int argc, char* argv[]) { LoadLibrary("kernel32.dll"); LoadLibrary("user32.dll"); MessageBox(NULL,"http://cnblogs/ONDragon","ONDragon",0); printf("Test "); return 0; }
    • 用UE打开,添加我们要添加的ShellCode(弹出另一个MessageBox)。
    push 0x0        6A 00
    push 0x0        6A 00     
    push 0x0        6A 00
    push 0x0        6A 00
    call 771BEA11   E8 XXXX
    • 解释 call 771BEA11 这个地址是我本机MessageBox的地址,连地址都不会找,那么先自己查查在学这个吧(还有后面的OEP查找什么的),有写小复杂对于新手。
    • E8 是Call的硬编码,6A 00 是 push 0x00 的硬编码。
    • 因为MessageBox需要4个参数,处于简单化,我们就给它push4个0,只是简单化。
    • 我们要做的就是在程序中添加这个硬编码指令,那么在哪里添加呢?我们大概学过PE结构了,我们只要找到一个节的空白位置添加即可。

    • 我们只要把上面的硬编码添加到程序中即可,但是也不是直接添加的,需要一个转换。
    • 要跳转的地址  =  E8下一条指令的地址 + XXXX。(E9同理,下面会遇到)!!!
    • XXXX  =  要跳转的地址   -  E8下一条指令的地址。(E9同理,下面会遇到)!!!
    •  比如我们要跳转的地址是MessageBox的地址771BEA11,我们不能直接写E8(call)771BEA11,需要上公式转换,要跳的地址就是(771BEA11) - E8的下一条指令的地址。
    • 例子:
    • 我们在文件偏移为5940的地址添加我们的ShellCode。
    • 6A 00  6A 00  6A 00  6A 00(注意大小端格式
    • XXXX(就是将要填入E8 后面的值) = 771BEA11 - 0040594D(E8的下一条指令的地址)。
    • 还要注意,一定是减去 0040594D,是内存地址RVA不是文件偏移。

    • 但是程序运行起来不会自己跑到这个位置运行代码,所以要让程序自己打开时到这里运行代码,所以要修改OEP。

    • 这样程序就会跑到我们的ShellCode处执行我们的代码,但是,为了不让被发现程序被修改了,得让它执行完我们的代码后,再去正常执行自己的代码,所以我们还要跳回去正常的入口OEP。

    •  所以我们用E9(jmp 的硬编码)程序执行完我们的代码要无条件跳转到正常入口OEP,所以XXXX = 正常OEP - E9下一条指令的地址 = 401071 - 405952 = FFFFB71F。
    •  然后保存运行即可,会先弹出我们的ShellCode。OK。

    •  总结
    1. 注意不适合新手。
    2. 注意要仔细,要LoadLibrary("user32.dll");只针对控制台程序。
    3. 注意大小端格式。
    4. 注意E8(E9)后面地址的转换。
    5. 注意添加代码地址是(内存中的地址)RVA。
    6. 还是学学PE才行。
  • 相关阅读:
    对C# .Net4.5异步机制测试
    权限系统设计
    C#基础知识
    eclipse+pyDev
    Ubuntu下使用sublime text进行py开发
    110_02 补充模块:BeatifulSoup模块
    034 如何判断一个对象是否是可调用对象
    037 简单计算器实现
    036 re模块的小练习
    035 用Python实现的二分查找算法(基于递归函数)
  • 原文地址:https://www.cnblogs.com/DeeLMind/p/6857092.html
Copyright © 2011-2022 走看看