String formatting printf字符串攻击返回意外十六进制

String formatting printf字符串攻击返回意外十六进制,string-formatting,reverse-engineering,overwrite,String Formatting,Reverse Engineering,Overwrite,我刚刚开始进入逆向工程领域,我在live overflow上看到了一段视频,展示了使用printf的字符串格式漏洞。我试图复制他的结果,但没有成功。我的代码和他的视频一样。我使用radare2查找目标变量的地址 视频: 雷达2输出: 霉菌代码: #include <iostream> using namespace std; int overwritten; void vuln(char *sdf) { printf("typed stuff! -> ");

我刚刚开始进入逆向工程领域,我在live overflow上看到了一段视频,展示了使用printf的字符串格式漏洞。我试图复制他的结果,但没有成功。我的代码和他的视频一样。我使用radare2查找目标变量的地址

视频:

雷达2输出:

霉菌代码:

#include <iostream>
using namespace std;

int overwritten;

void vuln(char *sdf) {
    printf("typed stuff! -> ");
    printf(sdf);

    if(overwritten) {
        printf("\nyou overwrote the var!");
    }
}

int main(int argc, char *argv[]) {
    vuln(argv[1]);
}
#包括
使用名称空间std;
int覆盖;
无效vuln(字符*sdf){
printf(“键入的内容!->”;
printf(sdf);
如果(覆盖){
printf(“\n您重写了变量!”);
}
}
int main(int argc,char*argv[]){
vuln(argv[1]);
}

我遇到麻烦的部分是在他的视频中的7:54。他用python脚本运行程序,打印
'AAAA'+变量地址+'bbbb'+'%x'*200
。视频中的输出是由4141和4242包围的变量地址。这是我观察到的输出->。为什么我连41s和42s都看不到呢?

请随时向我们提出有关“谢谢”的逆向工程问题!我会调查的。