특정 시나리오에 외부 모드 적용
이 단계에서는 지식을 더 실용적인 시나리오에 적용합니다. 하드코딩된 기본 단어를 사용하는 대신, 스크립트가 파일에서 기본 단어 목록을 읽고 각 단어에 대한 변형을 생성합니다. 이는 훨씬 더 강력하고 현실적인 접근 방식입니다.
먼저 몇 가지 잠재적인 기본 단어를 포함하는 words.txt라는 간단한 단어 목록 파일을 만들어 보겠습니다.
echo "admin" > words.txt
echo "user" >> words.txt
echo "guest" >> words.txt
다음으로, 이 파일을 읽도록 C 프로그램을 수정합니다. 프로그램은 명령줄 인수로 단어 목록 파일 이름을 받아야 합니다. nano로 simple_gen.c를 엽니다.
nano simple_gen.c
코드를 다음 버전으로 바꿉니다. 이 버전은 명령줄에서 파일 이름을 읽고 해당 파일을 열고, 각 단어를 읽을 때마다 세 가지 비밀번호 후보를 생성합니다. 즉, 단어 자체, 단어 뒤에 "123"이 오는 경우, 단어 뒤에 "2024"가 오는 경우입니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
fprintf(stderr, "Usage: %s <wordlist_file>\n", argv[0]);
return 1;
}
FILE *file = fopen(argv[1], "r");
if (file == NULL) {
perror("Error opening file");
return 1;
}
char line[256];
while (fgets(line, sizeof(line), file)) {
// Remove newline character from the end of the line
line[strcspn(line, "\n")] = 0;
// Generate variations for the word
printf("%s\n", line);
printf("%s123\n", line);
printf("%s2024\n", line);
}
fclose(file);
return 0;
}
저장하고 종료한 다음 프로그램을 다시 컴파일합니다.
gcc -o simple_gen simple_gen.c
이제 words.txt 파일 이름을 스크립트의 인수로 전달하도록 my_john.conf 파일을 업데이트해야 합니다. 이를 위해 MyAdvanced라는 새 외부 모드를 만들어 보겠습니다. nano로 my_john.conf를 엽니다.
nano my_john.conf
파일 끝으로 스크롤하여 이 새 섹션을 추가합니다. "words.txt"가 exec 함수에 두 번째 매개변수로 어떻게 전달되는지 확인합니다.
[List.External:MyAdvanced]
void generate()
{
exec("./simple_gen", "words.txt");
}
nano를 저장하고 종료합니다. 마지막으로 새 고급 외부 모드를 테스트합니다.
john --stdout --external=MyAdvanced --config=./my_john.conf
출력은 이제 words.txt 파일의 단어에서 생성된 비밀번호 후보 목록이어야 하며, 각 단어에 지정된 변형이 적용됩니다.
admin
admin123
admin2024
user
user123
user2024
guest
guest123
guest2024
John the Ripper 를 위한 유연하고 파일 기반의 비밀번호 생성기를 성공적으로 만들었습니다.