gpt4 book ai didi

c - 这会产生段错误(核心已转储)

转载 作者:行者123 更新时间:2023-11-30 19:26:02 24 4
gpt4 key购买 nike

所以我现在正在开发一个 ctf,这基本上迫使我用 C 做一些事情。这是一个基本程序,用于检查 check_password 函数的输出是否等于哈希码。我决定暴力破解这个,所以我写了一些代码。可能有一些更简单的方法可以做到这一点,我想测试一下我的编码技能,也许可以在此过程中更多地了解 C。因此,我编写了这段代码,将提供给 check_password 函数的参数递增,每个循环加 1,然后将输出与哈希码进行比较。当我运行它时,它会抛出“段错误(核心转储)”错误。

我已经尝试过用谷歌搜索这个问题,但我似乎不明白我的代码中的具体错误是什么。这是我的代码:

#include <stdio.h>
#include <stdbool.h>
unsigned long hashcode = 0x21DD09EC;
unsigned long check_password(const char* p){
int* ip = (int*)p;
int i;
int res=0;
for(i=0; i<5; i++){
res += ip[i];
}
return res;
}

int main()
{
const char* i = 0;
long current_guess;
bool found = false;
while(!found) {
current_guess = check_password(i);
if(current_guess == hashcode) {
printf(i);
found = true;
break;
}
else {
i++;
continue;
}
}

return 0;
}

所以它应该运行所有选项,并在完成后打印出 i,除非它抛出错误。如有帮助,我们将不胜感激。

这是我试图获取密码的程序代码顺便说一句

#include <stdio.h>
#include <string.h>
unsigned long hashcode = 0x21DD09EC;
unsigned long check_password(const char* p){
int* ip = (int*)p;
int i;
int res=0;
for(i=0; i<5; i++){
res += ip[i];
}
return res;
}

int main(int argc, char* argv[]){
if(argc<2){
printf("usage : %s [passcode]\n", argv[0]);
return 0;
}
if(strlen(argv[1]) != 20){
printf("passcode length should be 20 bytes\n");
return 0;
}

if(hashcode == check_password( argv[1] )){
system("/bin/cat flag");
return 0;
}
else
printf("wrong passcode.\n");
return 0;
}

最佳答案

不确定您想要实现什么目标,但是

const char* i = 0;

i 是指向地址 0 的指针,这可能是段错误的原因。您可以在使用指针之前先尝试将指针分配给您的输入。

const char input[10];

i = input;

关于c - 这会产生段错误(核心已转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58050084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com