【问题标题】:Segmentation Fault in C while using crypt function使用crypt函数时C中的分段错误
【发布时间】:2018-03-27 03:48:05
【问题描述】:

我是 C 编程新手。我正在尝试制作一个简单的密码破解程序,但是当我尝试运行它时,我得到了 Segmentation Fault 作为错误。有人可以解决这个问题。提前致谢。

#define _XOPEN_SOURCE
#include<stdio.h>
#include<crypt.h>
#include<unistd.h>
#include<string.h>

int main(int argc, char *argv[])
{
    if(argc != 3)
    {
        printf("Usage: ./craken salt hash\n");
        return 0;       
    }


    FILE *fPointer;
    fPointer = fopen("wordlist.txt", "r");

    char singleLine[150];
    while(fgets(singleLine, 150, fPointer) != NULL)
    {   
        if(!strcmp(argv[2], crypt(singleLine, argv[1])))
       {
            printf("Password found! %s is the password\n", singleLine);
            fclose(fPointer);
            return 0;
       }
    }
    printf("Not found\n");
    fclose(fPointer);
    return 0;
} 

【问题讨论】:

  • 您的代码是在valgrind 还是在调试器中运行的?
  • 我使用gcc在kali linux中编译运行程序
  • 你能把完整的错误粘贴在这里,以便我们得到其他必要的细节吗?
  • 您应该检查 fPointer 中的NULL,并且您可能需要考虑更改您的代码,以便您有一个单一的出口点,因为两个出口点基本相同..跨度>

标签: c segmentation-fault des crypt


【解决方案1】:

我想问题是如果你从文件中读出可能的密码,最后会有一个换行符。据我了解, crypt() 函数只能处理可能导致返回 NULL 指针的集合 [a-zA-Z0-9./] (crypt man page)。这个 NULL 指针会导致 strcmp() 函数内部出现分段错误。因此,请尝试删除每个输入行末尾的换行符。希望这有效

【讨论】:

  • 很好,欢迎来到 SO。如果您对答案进行更多格式化并引用您发现错误的确切行,那就太好了。你可能会用你的解决方案写一个 sn-p,这会增加你的答案的价值。如果我能帮助你,请告诉我。 (您可以使用@*Name* 回复评论)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多