所以我在下面的简单代码的帮助下尝试 Offbyone 缓冲区溢出
#include <string.h>
void cpy(char *x){
char buf[128]="";
strncat(buf,x,sizeof(buf));
}
int main(int argc, char **argv)
{
cpy(argv[1]);
}
Run Code Online (Sandbox Code Playgroud)
此图描述了 Offbyone 缓冲区溢出的工作原理
摘自: https: //www.sans.org/reading-room/whitepapers/threats/buffer-overflows-dummies-481
内存转储
因此,使用缓冲区,在 Cpy 堆栈帧中,我将保存的 RBP 的最低有效字节的值更改为00(因为通过提供恰好 128 字节输入实现了 Offbyone 溢出 )
可以看到地址0x7fffffffe177存储了EBP,其值从0x7fffffffe190变为0x7fffffffe100
因此,我继续将有效负载的起始地址设置为地址0x7fffffffe10F ,这也是 main 的返回地址 ,应该是0xffffe110 0x00007fff而不是0xffffe110 0x90907fff,但由于我们不应该在有效负载中包含 00,所以我无法设置返回地址,因为它是 64 位地址,长度为 8 字节 0xffffe110 0x00007fff
那么我们到底应该如何获得这里的返回地址呢?由于内存转储的图像,在断点 1 中,它是 cpy 函数框架,为什么 argc 和 …
我想使用radare2 获得二进制文件(恶意软件)的完整控制流程图。
我从 SO 的另一个问题中关注了这篇文章。我想问是否ag有另一个命令可以提供整个二进制文件的控制流图,而不仅仅是一个函数的图。
我正在研究 PE(可移植可执行文件)格式,但我发现用 MinGW 和 MSVC 编译的 C++ 程序之间存在差异:
这是“此程序无法在 DOS 模式下运行”之后和“PE”魔术签名之前的一些额外字节。有人知道这是什么以及为什么有“Rich”这个词吗?
简短的问题。
当我做:
#include <windows.h>
CreateProcess(..)
Run Code Online (Sandbox Code Playgroud)
头文件如何知道将我连接到正确的 dll?
这些头文件中是否有一个字典将每个 win32api 函数映射到相关的 dll?
我想在radare2中搜索该类型的ASM模式
pop, mov, mov
这是三个连续的指令:第一个以pop开头,第二个以mov开头,第三个也是。
有一个 Radare2 的相关问题(https://github.com/radareorg/radare2/issues/13322),并说“itss alrady在/c中实现”,但/c现在需要搜索加密材料。
我在 Linux 上使用radare2 4.5.0。
我试图理解atexit()函数的源代码,但我坚持这一点 (第 409 行〜第 415 行,PTR_DEMANGLE())
我可以理解内联汇编需要取得重大进展
xor rdx,QWORD PTR fs:0x30
Run Code Online (Sandbox Code Playgroud)
但我真的不明白 fs:0x30 的含义是什么
所以我搜索了google但只得到了Windows上fs:0x30的含义,这与PEB相关
我还尝试搜索PTR_DEMANGLE()函数,并找到了这个,但没有帮助
这也给我提出了一个新问题:
比如说,我需要知道 fs:0xXX 的用法,这是很少使用的。我应该直接参考哪本手册?ELF标准文件?
顺便说一句,英语不是我的母语,这篇文章可能有一些语法或拼写错误,请原谅我,非常感谢!
assembly glibc reverse-engineering x86-64 thread-local-storage
我在一个我无法访问开发和测试的系统上继承了Web服务的WSDL文件.
我需要生成一个遵循该WSDL的Web服务.包装器是.NET,但如果有一种简单的方法可以与另一个平台一起使用,我们可能会看到它.生产Web服务是基于Java的.
这样做的最佳方法是什么?
注意:继承的wsdl似乎与wsdl.exe不兼容,因为它不符合WS-I Basic Profile v1.1.特别是,传递它的组提到它使用了Microsoft工具不支持的另一个标准,但他们没有澄清.该错误与所需的"名称"字段有关:
Error: Element Reference '{namespace}/:viewDocumentResponse' declared in
schema type '' from namespace ''
- the required attribute 'name' is missing
为了清楚起见,我理解我可以从WSDL文件中轻松创建.NET包装类,但这不是我需要的.就像这样:
更新:使用Axis创建原始Web服务.
显示不可用的Web服务和模拟Web服务的系统图http://paulw.us/blog/uploads/SO-WSDL-Question2.gif
我正在使用Visio 2010 Pro对我的数据库进行逆向工程.由于某种原因,向导无法看到我的文件dsns(我使用向导创建它们),但系统DSN工作正常.我想让我的DSN文件可移植,以便与我的团队共享.
我尝试以管理员身份运行Visio,并创建了无数文件DNS但没有成功.有什么我想念的吗?
visio datasource reverse-engineering sql-server-2008 windows-7-x64
我正在尝试使用OllyDbg的"执行直到用户代码"功能(这对我来说很重要),但它永远不会奏效.
我首先尝试了一个叫做的程序MessageBoxA.当它调用它时,我在调试器中暂停程序并发出OllyDbg执行直到用户代码,但程序仍然暂停并完全冻结.我甚至无法点击MessageBox确定按钮,甚至从OllyDbg继续.当我努力让它继续下去时它就崩溃了.
所以我决定在NASM中编写一个应用程序(完全控制)并在那里尝试.在MessageBoxA弹出,我暂停,直到执行用户代码,我可以按OK按钮这段时间,但一旦我做了OllyDbg的没有暂停程序.该程序刚刚执行,好像什么也没发生.
为什么它不起作用,我该怎么做才能解决它?
OllyDbg 1.10(无插件)
Windows 7旗舰版SP1 64位
更新:
我尝试使用OllyDbg 2.0,但由于某种原因,执行直到用户代码按钮被完全禁用.
我无法使用windbg设置4字节读/写访问硬件断点.
0:000> dd 02e80dcf
02e80dcf 13121110 17161514 1a191800 1e1d1c1b
02e80ddf 011c171f c7be7df1 00000066 4e454900
Run Code Online (Sandbox Code Playgroud)
实际上我必须检查程序改变/覆盖值0x13121110(地址0x02e80dcf)的时间.
所以当我试图设置一个4字节的写访问硬件断点@ 0x02e80dcf时,我得到的数据断点必须对齐错误.
0:000> ba w 4 02e80dcf
Data breakpoint must be aligned
^ Syntax error in 'ba w 4 02e80dcf'
0:000> ba r 4 02e80dcf
Data breakpoint must be aligned
^ Syntax error in 'ba r 4 02e80dcf'
0:000> ba w 1 02e80dcf
breakpoint 0 redefined
Run Code Online (Sandbox Code Playgroud)
我能够在地址处设置1字节写访问断点,但是当指针@地址0x02e80dcf被覆盖时它不会被触发.
而且,如果有人可以建议任何其他方式来检测地址覆盖的东西将是非常有帮助的.
注意:我遇到的特定程序问题.我可以在同一调试环境中设置4字节硬件断点.
assembly ×2
c ×2
debugging ×2
radare2 ×2
.net ×1
c++ ×1
datasource ×1
disassembly ×1
executable ×1
exploit ×1
glibc ×1
ollydbg ×1
visio ×1
web-services ×1
winapi ×1
windbg ×1
windows ×1
wsdl ×1
x86-64 ×1