【2021.9.7】记一次exe手动添加shellcode
文章目录
- 【2021.9.7】记一次exe手动添加shellcode
- 0.大致思路
- 1.获取MessageBox的真实地址VA
- 2.通过OD在代码段添加shellcode
- 3.dump出数据,设置程序OEP
- 4.测试dump出来的exe
- 5.方法总结
测试的exe和添加了shellcode的exe:
链接:https://pan.baidu.com/s/1QJ02pb0_YxIgQCNY15LBAA
提取码:aura
0.大致思路
先在exe内部添加一段shellcode(这里只是简单弹出一个 MessageBox框的字节码),再修改exe的pe格式中的OEP,执行完shellcode之后,再跳回原本OEP
说明:修改的这个exe原本功能是弹出一个MessageBox,我做的是在他的MessageBox之前再弹出一个MessageBox,因为原本存在MessageBoxbox函数,所以方便我们获取MessageBox的真实地址。
1.获取MessageBox的真实地址VA
OD调试测试exe,逻辑比较简单。
双击地址0x40101a可以看到汇编指令为jmp dword ptr [402008]
,就是在IAT表里取地址,说明该exe的虚拟地址VA:402008,存储的是MessageBox函数的地址。
2.通过OD在代码段添加shellcode
其实任意节区都可以,但要执行代码,该节区头属性(Characteristics)字段必须包含可读可执行的权限,直接添加到代码段(节区)可以省去更改节区头属性的步骤
这里代码段空的地方比较多,我们直接在原有代码下方靠近的位置选一片区域添加shellcode(内存对应一般为1000,应该不会超出代码段)。
记住我们添加代码段的地方,为0x401030
3.dump出数据,设置程序OEP
4.测试dump出来的exe
已经在执行我们的shellcode了
5.方法总结
这种直接在OD里通过书写汇编指令添加shellcode方式不用手动计算跳转地址,和构造字节码,直接在OD里相应位置写汇编指令,他会自动计算地址并生成字节码,比较简洁易上手。
我这里测试exe和添加的shellcode都比较短小,没有测试过更大的exe和shellcode,可能会以偏概全了,但是通过在OD里写汇编,OD可以给我们自动计算跳转指令的地址和生成字节码,省去我们手动构造,并且不用管FOA和RVA的转换。
给我们自动计算跳转指令的地址和生成字节码,省去我们手动构造,并且不用管FOA和RVA的转换。
如果Dump方法不行,可以先在OD书写shellcode的汇编指令,然后拷贝其生成的字节码,再手动在exe二进制文件相应位置添加即可(注意FOA和RVA的转换)。