80번째 줄을 보세요...
exit 가 선언되어 있지 않다고 하네요..
#include <stdlib.h> 를 추가해보시길..
: #gcc-o decrypt decrypt.cpp -lcrypt
: 로 컴팔을 하는데요...
:
: decrypt.cpp : In function 'void decrypt (char *)':
: decrypt.cpp:80: 'exit'undeclared(first use thid function)
: decrypt.cpp:80: (Each undeclared identifier is reported only once for
: each function it appears in.)
:
: 이란 메세지만 나오네요...
: 고수님 들 알려주세요...
:
: redhat 7.2에서 돌렸구요...
: DES알고리즘으로 encrypt암호 푸는 소스입니다만..
:
: 아래는 decrypt.cpp 소스입니다..
:
:
: /*----------------------------------------------------------------------------------
:
: Program : DES algorithm으로 crypt된 password 때려맞추는 program의 C 언어 version
:
: ----------------------------------------------------------------------------------*/
:
:
: #include <stdio.h>
: #include <string.h>
: #include <crypt.h>
:
: // 현재 이 프로그램은 소문자와 숫자의 아스키 코드만을 이용하여 크래킹을 함.
: #define ASCII_ARRAY "abcdefghijklmnopqrstuvwxyz0123456789"
:
: // 대소문자와 특수문자까지 ...
: //#define ASCII_ARRAY "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`~!@#$%^&*()-_=+|,<.>/?;:'"[{]}"
:
: // 함수선언
: void print_info();
: void decrypt(char *crypt_passwd);
: void save_file(char *encrypted_password, char *decrypted_password);
:
: /////////////////////////////////////////////////////////////
: /// Main function
: /////////////////////////////////////////////////////////////
: int main(int argc, char *argv<>) {
:
: // 본 프로그램의 간략한 설명을 출력하는 function 호출
: print_info();
:
: // argument가 제대로 입력된 경우에는 크래킹을 시작하고, 그렇지 않으면 에러 메세지 출
: 력. if (argc == 2) {
:
: // 크래킹하는 function 호출
: decrypt(argv[1]);
: }
: else {
: printf("Usage: decrypt [crypt password] (ex: decrypt e23zaAJLCLuXU)");;
: }
:
: return 0;
: }
:
: /////////////////////////////////////////////////////////////
: /// Sub-functions
: /////////////////////////////////////////////////////////////
:
: // 본 프로그램의 간략한 설명 출력하는 function
: void print_info() {
: printf("Unix DES 암호 크랙 프로그램 Ver. 1.0");
: printf("Copyleft 2000 (C) Mod777");
: }
:
: // argument로 넘어온 crypt된 암호(*crypt_passwd)를 때려맞추는 function
: // 암호가 풀린 경우에 그 암호를 출력하고 끝냄.
: void decrypt(char *crypt_passwd) {
: char test[64], salt[3];
:
: // salt 값 추출. 이 값은 crypt된 암호의 처음 2 byte이다.
: salt[0] = crypt_passwd[0];
: salt[1] = crypt_passwd[1];
: salt[2] = 0;
:
: // ASCII 코드 조합에 사용될 문자들의 집합을 문자배열에 입력함.
: char ascii<> = ASCII_ARRAY;
:
: // 조합에 사용될 문자들의 총 갯수.
: int count = strlen(ascii);
:
: // 1문자 암호 크래킹
: for (int i=0; i<count; i++) {
: test[0] = ascii[i];
: test[1] = 0;
:
: if (strcmp(crypt(test, salt), crypt_passwd) == 0) {
: printf("Congratulations! The password is <%s>.", test);
:
: // 외부 파일에서 기록하고 끝냄.
: save_file(crypt_passwd, test);
: exit(0);
: }
: printf("%s", test);
: }
:
: // 2문자 암호 크래킹
: for (int i=0; i<count; i++) {
: for (int j=0; j<count; j++) {
: test[0] = ascii[i];
: test[1] = ascii[j];
: test[2] = 0;
:
: if (strcmp(crypt(test, salt), crypt_passwd) == 0) {
: printf("Congratulations! The password is <%s>.", test);
:
: // 외부 파일에서 기록하고 끝냄.
: save_file(crypt_passwd, test);
: exit(0);
: }
: printf("%s", test);
: }
: }
:
: // 3문자 암호 크래킹
: for (int i=0; i<count; i++) {
: for (int j=0; j<count; j++) {
: for (int k=0; k<count; k++) {
: test[0] = ascii[i];
: test[1] = ascii[j];
: test[2] = ascii[k];
: test[3] = 0;
:
: if (strcmp(crypt(test, salt), crypt_passwd) == 0) {
: printf("Congratulations! The password is <%s>.", test);
:
: // 외부 파일에서 기록하고 끝냄.
: save_file(crypt_passwd, test);
: exit(0);
: }
: printf("%s", test);
: }
: }
: }
:
: // 4문자 암호 크래킹
: for (int i=0; i<count; i++) {
: for (int j=0; j<count; j++) {
: for (int k=0; k<count; k++) {
: for (int l=0; l<count; l++) {
: test[0] = ascii[i];
: test[1] = ascii[j];
: test[2] = ascii[k];
: test[3] = ascii[l];
: test[4] = 0;
:
: if (strcmp(crypt(test, salt), crypt_passwd) == 0) {
: printf("Congratulations! The password is <%s>.", test);
:
: // 외부 파일에서 기록하고 끝냄.
: save_file(crypt_passwd, test);
: exit(0);
: }
: printf("%s", test);
: }
: }
: }
: }
:
: // 5문자 암호 크래킹
: for (int i=0; i<count; i++) {
: for (int j=0; j<count; j++) {
: for (int k=0; k<count; k++) {
: for (int l=0; l<count; l++) {
: for (int m=0; m<count; m++) {
: test[0] = ascii[i];
: test[1] = ascii[j];
: test[2] = ascii[k];
: test[3] = ascii[l];
: test[4] = ascii[m];
: test[5] = 0;
:
: if (strcmp(crypt(test, salt), crypt_passwd) == 0) {
: printf("Congratulations! The password is <%s>.", test);
:
: // 외부 파일에서 기록하고 끝냄.
: save_file(crypt_passwd, test);
: exit(0);
: }
: printf("%s", test);
: }
: }
: }
: }
: }
:
: // 6문자 암호 크래킹
: for (int i=0; i<count; i++) {
: for (int j=0; j<count; j++) {
: for (int k=0; k<count; k++) {
: for (int l=0; l<count; l++) {
: for (int m=0; m<count; m++) {
: for (int n=0; n<count; n++) {
: test[0] = ascii[i];
: test[1] = ascii[j];
: test[2] = ascii[k];
: test[3] = ascii[l];
: test[4] = ascii[m];
: test[5] = ascii[n];
: test[6] = 0;
:
: if (strcmp(crypt(test, salt), crypt_passwd) == 0) {
: printf("Congratulations! The password is <%s>.", test);
:
: // 외부 파일에서 기록하고 끝냄.
: save_file(crypt_passwd, test);
: exit(0);
: }
: printf("%s", test);
: }
: }
: }
: }
: }
: }
:
: // 7문자 암호 크래킹
: for (int i=0; i<count; i++) {
: for (int j=0; j<count; j++) {
: for (int k=0; k<count; k++) {
: for (int l=0; l<count; l++) {
: for (int m=0; m<count; m++) {
: for (int n=0; n<count; n++) {
: for (int o=0; o<count; o++) {
: test[0] = ascii[i];
: test[1] = ascii[j];
: test[2] = ascii[k];
: test[3] = ascii[l];
: test[4] = ascii[m];
: test[5] = ascii[n];
: test[6] = ascii[o];
: test[7] = 0;
:
: if (strcmp(crypt(test, salt), crypt_passwd) == 0) {
: printf("Congratulations! The password is <%s>.", test);
:
: // 외부 파일에서 기록하고 끝냄.
: save_file(crypt_passwd, test);
: exit(0);
: }
: printf("%s", test);
: }
: }
: }
: }
: }
: }
: }
:
:
: // 8문자 암호 크래킹
: for (int i=0; i<count; i++) {
: for (int j=0; j<count; j++) {
: for (int k=0; k<count; k++) {
: for (int l=0; l<count; l++) {
: for (int m=0; m<count; m++) {
: for (int n=0; n<count; n++) {
: for (int o=0; o<count; o++) {
: for (int p=0; p<count; p++) {
: test[0] = ascii[i];
: test[1] = ascii[j];
: test[2] = ascii[k];
: test[3] = ascii[l];
: test[4] = ascii[m];
: test[5] = ascii[n];
: test[6] = ascii[o];
: test[7] = ascii[p];
: test[8] = 0;
:
: if (strcmp(crypt(test, salt), crypt_passwd) == 0) {
: printf("Congratulations! The password is <%s>.", test);
:
: // 외부 파일에서 기록하고 끝냄.
: save_file(crypt_passwd, test);
: exit(0);
: }
: printf("%s", test);
: }
: }
: }
: }
: }
: }
: }
: }
:
: printf("암호를 깰수 없었습니다. 확장된 크래킹을 위해 ReadMe.txt를 참고해 주십시오.");
:
: }
:
:
: // Decrypted password를 외부 file에 저장하는 function
: // Encrypted password를 저장될 file name으로 하고, 그 파일 안에 Decrypted password를 기록한다.
: void save_file(char *encrypted, char *decrypted) {
: FILE *ofp;
: char filename[48];
:
: ofp = fopen("decrypted.txt", "a");
: fprintf(ofp, "%s - %s", encrypted, decrypted);
: fclose(ofp);
: }