Architecture

Explanation

ctfsolver is a framework that uses other libraries.

The ctfsolver class residing in the src folder, inherits managers. It’s manager has it’s own functionality.

Other folders contain functionality that is displayed by :

Analytical structure of the package

Architecture Tree

The following is the directory structure of the ctfsolver application, illustrating its modular design and organization:

./app/ctfsolver
├── cli
│   ├── __init__.py
│   ├── main.py
│   └── subcli
│       ├── ctf.py
│       ├── __init__.py
│       └── venv.py
├── config
│   ├── challenge_config.py
│   ├── config_template.json
│   ├── global_config.py
│   ├── __init__.py
│   └── __main__.py
├── data
│   ├── challenge_info_template.json
│   └── config_template.json
├── error
│   ├── __init__.py
│   └── manager_error.py
├── feature_test
│   ├── attempt_at_pcap.py
│   ├── dash_test.py
│   ├── __init__.py
│   ├── manager_graphs.py
│   ├── pyvis_class_test.py
│   ├── pyvis_test.py
│   └── testing_files.py
├── find_usage
│   ├── function_definition_class.py
│   ├── gathering.py
│   ├── __init__.py
│   ├── __main__.py
│   └── manager_gathering.py
├── folders
│   ├── finding_writeups.py
│   ├── __init__.py
│   ├── link_ctf_folders.py
│   └── __main__.py
├── forensics
│   ├── __init__.py
│   └── manager_dash.py
├── __init__.py
├── managers
│   ├── __init__.py
│   ├── manager_class.py
│   ├── manager_connections.py
│   ├── manager_crypto.py
│   ├── manager_file.py
│   ├── manager_files_evtx.py
│   ├── manager_files_pcap.py
│   ├── manager_files_re.py
│   ├── manager_folder.py
│   └── manager_functions.py
├── scripts
│   ├── clean_folders
│   │   ├── __init__.py
│   │   └── __main__.py
│   ├── __init__.py
│   ├── __main__.py
│   ├── run_clean_folders.py
│   ├── run_folders.py
│   └── run_solution.py
├── src
│   ├── ctfsolver.py
│   ├── __init__.py
│   ├── position_cipher_functions.py
│   └── README.md
├── template
│   ├── gathering_template.py
│   ├── __init__.py
│   ├── __main__.py
│   └── solution_template.py
├── test
│   └── __init__.py
└── venv
    ├── __init__.py
    ├── main.py
    ├── manager_venv.py
    └── testing
        ├── __init__.py
        └── main.py

The following images have been created automatically with pylint. To better understand them, just open them in a different tab and zoom in

The dots are inside docs/sphinx/images

digraph "classes_ctfsolver" {
rankdir=BT
charset="utf-8"
"ctfsolver.src.ctfsolver.CTFSolver" [color="black", fontcolor="black", label=<{CTFSolver|challenge_file : Path<br ALIGN="LEFT"/>debug<br ALIGN="LEFT"/>menu_num : int<br ALIGN="LEFT"/>menu_text : str<br ALIGN="LEFT"/>|initializing_all_ancestors()<br ALIGN="LEFT"/><I>main</I>()<br ALIGN="LEFT"/>try_main()<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.config.challenge_config.ChallengeConfig" [color="black", fontcolor="black", label=<{ChallengeConfig|challenge_info_location : Path<br ALIGN="LEFT"/>|create_challenge_config()<br ALIGN="LEFT"/>get_template_data()<br ALIGN="LEFT"/>initialize_challenge()<br ALIGN="LEFT"/>update_challenge_info(data)<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.folders.finding_writeups.Folder_Structure" [color="black", fontcolor="black", label=<{Folder_Structure|<br ALIGN="LEFT"/>|differ(challenges, writeups)<br ALIGN="LEFT"/>getting_challenges(path, folder)<br ALIGN="LEFT"/>lowering(challenges)<br ALIGN="LEFT"/>main()<br ALIGN="LEFT"/>printing_table(challenges)<br ALIGN="LEFT"/>printing_table_diff(challenges)<br ALIGN="LEFT"/>writeup_cleanup(writeups, exclude)<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.find_usage.function_definition_class.FunctionDefFinder" [color="black", fontcolor="black", label=<{FunctionDefFinder|function_def : ast.FunctionDef \| None<br ALIGN="LEFT"/>function_target : str \| None<br ALIGN="LEFT"/>info : dict<br ALIGN="LEFT"/>source_file : str \| None<br ALIGN="LEFT"/>tree<br ALIGN="LEFT"/>visit_list : list[ast.FunctionDef]<br ALIGN="LEFT"/>|visit_FunctionDef(node: ast.FunctionDef): None<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.template.gathering_template.Gathering" [color="black", fontcolor="black", label=<{Gathering|<br ALIGN="LEFT"/>|<I>gathering</I>()<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.find_usage.gathering.Gathering" [color="black", fontcolor="black", label=<{Gathering|KEY : list<br ALIGN="LEFT"/>RPC_URL : str<br ALIGN="LEFT"/>aes_key<br ALIGN="LEFT"/>aes_key_base64 : str<br ALIGN="LEFT"/>base_url : str<br ALIGN="LEFT"/>binary : ELF<br ALIGN="LEFT"/>bot_url : str<br ALIGN="LEFT"/>challenge_file : Path<br ALIGN="LEFT"/>charset<br ALIGN="LEFT"/>choice_text : str<br ALIGN="LEFT"/>client<br ALIGN="LEFT"/>cnd1<br ALIGN="LEFT"/>cnd2<br ALIGN="LEFT"/>cnd3<br ALIGN="LEFT"/>collision : NoneType, str<br ALIGN="LEFT"/>complete_url : str<br ALIGN="LEFT"/>completed_url : str<br ALIGN="LEFT"/>compressed_data : bytes<br ALIGN="LEFT"/>conn : process, remote, ssh<br ALIGN="LEFT"/>correct_pw_hash<br ALIGN="LEFT"/>crypted : bytes<br ALIGN="LEFT"/>dictionary : str<br ALIGN="LEFT"/>e<br ALIGN="LEFT"/>elf : ELF, NoneType<br ALIGN="LEFT"/>encrypted_flag<br ALIGN="LEFT"/>encrypted_intermediate<br ALIGN="LEFT"/>encryption_key : str<br ALIGN="LEFT"/>env : dict<br ALIGN="LEFT"/>flag : str<br ALIGN="LEFT"/>flag_enc<br ALIGN="LEFT"/>flag_length : int<br ALIGN="LEFT"/>flag_prefix : bytes<br ALIGN="LEFT"/>flouri_max<br ALIGN="LEFT"/>flouri_min : int<br ALIGN="LEFT"/>folder_challenge : Path<br ALIGN="LEFT"/>folder_files : Path<br ALIGN="LEFT"/>folder_logs : Path<br ALIGN="LEFT"/>folder_xml : Path<br ALIGN="LEFT"/>help_num : int<br ALIGN="LEFT"/>hive<br ALIGN="LEFT"/>hive_data<br ALIGN="LEFT"/>host : str<br ALIGN="LEFT"/>image_modified<br ALIGN="LEFT"/>init : dict<br ALIGN="LEFT"/>ip<br ALIGN="LEFT"/>key : list, str<br ALIGN="LEFT"/>key_step1<br ALIGN="LEFT"/>known_prefix : str<br ALIGN="LEFT"/>lastfile<br ALIGN="LEFT"/>ld_path : Path<br ALIGN="LEFT"/>libc : ELF<br ALIGN="LEFT"/>libc_path : Path<br ALIGN="LEFT"/>library : Path<br ALIGN="LEFT"/>list_1<br ALIGN="LEFT"/>list_1_file : Path<br ALIGN="LEFT"/>list_2<br ALIGN="LEFT"/>list_2_file : Path<br ALIGN="LEFT"/>meme<br ALIGN="LEFT"/>meme_url : str<br ALIGN="LEFT"/>menu_num : int<br ALIGN="LEFT"/>menu_text : str<br ALIGN="LEFT"/>message_data<br ALIGN="LEFT"/>messages<br ALIGN="LEFT"/>midi<br ALIGN="LEFT"/>midi_data<br ALIGN="LEFT"/>msg<br ALIGN="LEFT"/>n<br ALIGN="LEFT"/>new_url : str<br ALIGN="LEFT"/>packets<br ALIGN="LEFT"/>pairs : list<br ALIGN="LEFT"/>password : str<br ALIGN="LEFT"/>password_list<br ALIGN="LEFT"/>passwords_source<br ALIGN="LEFT"/>payload : bytes<br ALIGN="LEFT"/>plaintexts<br ALIGN="LEFT"/>port : int<br ALIGN="LEFT"/>pos_pw_list : list<br ALIGN="LEFT"/>post_url<br ALIGN="LEFT"/>pvk<br ALIGN="LEFT"/>real_url : str<br ALIGN="LEFT"/>replace_combos : list<br ALIGN="LEFT"/>requests : list<br ALIGN="LEFT"/>rpc_port<br ALIGN="LEFT"/>session<br ALIGN="LEFT"/>setup<br ALIGN="LEFT"/>sid<br ALIGN="LEFT"/>sse_url : str<br ALIGN="LEFT"/>ssh_connection : ssh<br ALIGN="LEFT"/>target_hash<br ALIGN="LEFT"/>tcp_port<br ALIGN="LEFT"/>tcp_url : str<br ALIGN="LEFT"/>url_ful : str<br ALIGN="LEFT"/>url_path : str<br ALIGN="LEFT"/>user : str<br ALIGN="LEFT"/>users : dict<br ALIGN="LEFT"/>v1 : int<br ALIGN="LEFT"/>v2 : int<br ALIGN="LEFT"/>v3 : int<br ALIGN="LEFT"/>v4 : int<br ALIGN="LEFT"/>variables<br ALIGN="LEFT"/>win_address<br ALIGN="LEFT"/>|another_attempt()<br ALIGN="LEFT"/>ascii_converter(bits)<br ALIGN="LEFT"/>ascii_converter1(bits: str): str<br ALIGN="LEFT"/>ascii_rot(text, n)<br ALIGN="LEFT"/>attempt_for_loop_subkeys()<br ALIGN="LEFT"/>bits_to_ascii(bits)<br ALIGN="LEFT"/>breakfiles(exfiltrated_data)<br ALIGN="LEFT"/>brute_ascii_rot(text, identifier)<br ALIGN="LEFT"/>brute_force()<br ALIGN="LEFT"/>brute_transpose_find_flag(lyrics: str, partial_flag: str, keys: list, verbose: bool, wrap: bool)<br ALIGN="LEFT"/>bruteforce()<br ALIGN="LEFT"/>bruteforce_address(start, number, count, verbose)<br ALIGN="LEFT"/>bruteforce_all_lyrics(all_lyrics: list, partial_flag: str, keys: list, verbose: bool, wrap: bool)<br ALIGN="LEFT"/>bruteforce_key(verbose)<br ALIGN="LEFT"/>bruteforce_key_multiprocessing(verbose)<br ALIGN="LEFT"/>bruteforcer()<br ALIGN="LEFT"/>bruteforcing()<br ALIGN="LEFT"/>bruteforcing_failed()<br ALIGN="LEFT"/>build_payload()<br ALIGN="LEFT"/>bytes_to_int_array(data)<br ALIGN="LEFT"/>challenge_get_offset_address(function1, function2)<br ALIGN="LEFT"/>check_for_rot(text, partial)<br ALIGN="LEFT"/>check_password_time(length)<br ALIGN="LEFT"/>connect(): None<br ALIGN="LEFT"/>connecting_db()<br ALIGN="LEFT"/>context(number)<br ALIGN="LEFT"/>copy(file1, file2)<br ALIGN="LEFT"/>create_token(username)<br ALIGN="LEFT"/>creating_control_combos(start, end, number)<br ALIGN="LEFT"/>creating_stream(packets, save, return_dict)<br ALIGN="LEFT"/>csend(contract: str, fn: str)<br ALIGN="LEFT"/>current_initiate_connection()<br ALIGN="LEFT"/>custom_init()<br ALIGN="LEFT"/>custom_packet_997_attempt()<br ALIGN="LEFT"/>custom_re_match_base64_string(text: str, strict): list[str]<br ALIGN="LEFT"/>custom_stream_extract(stream_num)<br ALIGN="LEFT"/>data_processing(data)<br ALIGN="LEFT"/>de_hexing_flag(flag)<br ALIGN="LEFT"/>dec_file_mes(mes, key)<br ALIGN="LEFT"/>decode_address(address_all, start, end)<br ALIGN="LEFT"/>decode_hamming74(encoded_bits)<br ALIGN="LEFT"/>decode_manchester(encoded_bits)<br ALIGN="LEFT"/>decode_nrz_i(bits: str): str<br ALIGN="LEFT"/>decode_nrzi(encoded_bits)<br ALIGN="LEFT"/>decode_uart(encoded_bits, baud_rate, data_bits, parity, stop_bits)<br ALIGN="LEFT"/>decoding(crypted_dict, data)<br ALIGN="LEFT"/>decrypt(ciphertext_base64, password)<br ALIGN="LEFT"/>decrypt_password(ciphertext, secret_key)<br ALIGN="LEFT"/>decrypt_payload(cipher, payload)<br ALIGN="LEFT"/>decrypt_string(encrypted_base64, key)<br ALIGN="LEFT"/>decrypting_packet()<br ALIGN="LEFT"/>decrypting_stream_4()<br ALIGN="LEFT"/>decrypting_vigenere(ciphertext, key)<br ALIGN="LEFT"/>demarshalling()<br ALIGN="LEFT"/>deobfuscation()<br ALIGN="LEFT"/>derive_key_and_iv(password, salt, key_length, iv_length)<br ALIGN="LEFT"/>des_key_generator()<br ALIGN="LEFT"/>dictionary_analysis(lyrics)<br ALIGN="LEFT"/>differ()<br ALIGN="LEFT"/>download_images(name)<br ALIGN="LEFT"/>downloading()<br ALIGN="LEFT"/>dynamic_xor_decrypt(plaintext, text_key)<br ALIGN="LEFT"/>dynamic_xor_encrypt(plaintext, text_key)<br ALIGN="LEFT"/>emilia_main()<br ALIGN="LEFT"/>encode_nrzi(bits: str, verbose): str<br ALIGN="LEFT"/>encrypt(plaintext, key)<br ALIGN="LEFT"/>evtx_open(file, func)<br ALIGN="LEFT"/>exec_fmt(payload)<br ALIGN="LEFT"/>exec_func(payload)<br ALIGN="LEFT"/>exploit()<br ALIGN="LEFT"/>exploit_development(i, letter)<br ALIGN="LEFT"/>exploitation()<br ALIGN="LEFT"/>extract_exif(file_path)<br ALIGN="LEFT"/>extract_files_from_binary(filepath)<br ALIGN="LEFT"/>extract_macros_from_file(ods_file, file_name)<br ALIGN="LEFT"/>extract_macros_from_ods(ods_file)<br ALIGN="LEFT"/>extract_macros_from_ods_initial(ods_file)<br ALIGN="LEFT"/>extract_macros_with_odfpy(ods_file, files)<br ALIGN="LEFT"/>extract_printable_with_spaces(text)<br ALIGN="LEFT"/>extract_skew1_bootkey_piece(hive_path: str): str<br ALIGN="LEFT"/>extract_strings(file_path, min_length)<br ALIGN="LEFT"/>find_collision(target_hash, max_length, prefix, suffix, lengthy)<br ALIGN="LEFT"/>find_invpow(x, n)<br ALIGN="LEFT"/>find_offset(pattern, n)<br ALIGN="LEFT"/>finding_next_prime(number, n)<br ALIGN="LEFT"/>from_hex(hex_string)<br ALIGN="LEFT"/><I>gathering</I>()<br ALIGN="LEFT"/>generate_cipher(aes_key, iv)<br ALIGN="LEFT"/>generate_pattern(length, n)<br ALIGN="LEFT"/>generate_payload(attacker_url)<br ALIGN="LEFT"/>generate_url(attacker_url, payload)<br ALIGN="LEFT"/>generating()<br ALIGN="LEFT"/>generator(g, x, p)<br ALIGN="LEFT"/>get_address(function)<br ALIGN="LEFT"/>get_attributes(variable)<br ALIGN="LEFT"/>get_cell_size()<br ALIGN="LEFT"/>get_elf_function_address(function)<br ALIGN="LEFT"/>get_flag_length()<br ALIGN="LEFT"/>get_functions(variable)<br ALIGN="LEFT"/>get_instruments()<br ALIGN="LEFT"/>get_message()<br ALIGN="LEFT"/>get_online_passwords()<br ALIGN="LEFT"/>get_output_variables()<br ALIGN="LEFT"/>get_packet_ttl(packets)<br ALIGN="LEFT"/>get_packets_icmp(packets)<br ALIGN="LEFT"/>get_registers(address, count)<br ALIGN="LEFT"/>get_request(path)<br ALIGN="LEFT"/>get_scapy_tcp_stream(nunber: int)<br ALIGN="LEFT"/>get_tcp_stream(number)<br ALIGN="LEFT"/>get_welcome_message()<br ALIGN="LEFT"/>getting_base64()<br ALIGN="LEFT"/>getting_round()<br ALIGN="LEFT"/>hash_pw(pw_str)<br ALIGN="LEFT"/>hex_to_bytes_le(hex_val, size)<br ALIGN="LEFT"/>hex_to_string(hex_string)<br ALIGN="LEFT"/>hexdump_to_binary(hexdump_file, binary_file)<br ALIGN="LEFT"/>hive_solution()<br ALIGN="LEFT"/>init_some_values()<br ALIGN="LEFT"/>initialize_values()<br ALIGN="LEFT"/>initiate_connection()<br ALIGN="LEFT"/>int_array_to_bytes(data)<br ALIGN="LEFT"/>interacting_with_binary()<br ALIGN="LEFT"/>interacting_with_mcp()<br ALIGN="LEFT"/>interactive()<br ALIGN="LEFT"/>is_prime(p)<br ALIGN="LEFT"/>juilius_decrypt(msg, shift)<br ALIGN="LEFT"/>known_colissions()<br ALIGN="LEFT"/>length_find()<br ALIGN="LEFT"/>list_all_files(ods_file)<br ALIGN="LEFT"/>load_compressed_data()<br ALIGN="LEFT"/>load_lyrics()<br ALIGN="LEFT"/>load_master_key()<br ALIGN="LEFT"/>load_shellcode()<br ALIGN="LEFT"/>local_evtx_analysis(file)<br ALIGN="LEFT"/>local_exploitation()<br ALIGN="LEFT"/>local_preparations()<br ALIGN="LEFT"/>local_run()<br ALIGN="LEFT"/>local_searching_file(file)<br ALIGN="LEFT"/>look_all_subkeys()<br ALIGN="LEFT"/>looper()<br ALIGN="LEFT"/>lyric_transformation(lyrics)<br ALIGN="LEFT"/>lyric_transpose(lyrics, offset, wrap)<br ALIGN="LEFT"/>lyrics_all()<br ALIGN="LEFT"/>lyrics_transformation(lyrics, replace_combos, control_combos)<br ALIGN="LEFT"/>main()<br ALIGN="LEFT"/>main_multi_process()<br ALIGN="LEFT"/>md5_hash(s)<br ALIGN="LEFT"/>menu_handler(verbose)<br ALIGN="LEFT"/>modify_picture()<br ALIGN="LEFT"/>music21_analysis()<br ALIGN="LEFT"/>music21_note_analysis()<br ALIGN="LEFT"/>mutate_key(buf: bytearray, key: bytes): bytearray<br ALIGN="LEFT"/>nrzi_formater(bits: list, verbose)<br ALIGN="LEFT"/>nrzi_formater_for_rest(bits: list)<br ALIGN="LEFT"/>nrzi_to_ascii(bits)<br ALIGN="LEFT"/>open_file()<br ALIGN="LEFT"/>oracle_encrypt(pt_hex)<br ALIGN="LEFT"/>parse_csr()<br ALIGN="LEFT"/>payload_maker(password, number)<br ALIGN="LEFT"/>pickle_load_data(filename: str, folder: str): any<br ALIGN="LEFT"/>pickle_save_data(data: any, filename: str, folder: str): None<br ALIGN="LEFT"/>play_game()<br ALIGN="LEFT"/>play_round()<br ALIGN="LEFT"/>plc_initiate_connection()<br ALIGN="LEFT"/>plc_work(solution, plc)<br ALIGN="LEFT"/>pollute(base_url)<br ALIGN="LEFT"/>position_cipher(text: str, keys: list)<br ALIGN="LEFT"/>prepare_space()<br ALIGN="LEFT"/>preparing_dictionary()<br ALIGN="LEFT"/>print_dictionary(d)<br ALIGN="LEFT"/>print_to_File(data, verbose, file_name)<br ALIGN="LEFT"/>pyshark_extrac_tcp_stream_numbers(pcap_file)<br ALIGN="LEFT"/>pyshark_extract_tcp_streams(pcap_file, stream_num)<br ALIGN="LEFT"/>random_flouri_generator(number)<br ALIGN="LEFT"/>re_match_flag(text: str, origin: str): list[str]<br ALIGN="LEFT"/>read_address_positions(positions)<br ALIGN="LEFT"/>read_json(filename)<br ALIGN="LEFT"/>reassemblying_dns(packets)<br ALIGN="LEFT"/>reconstructing_url()<br ALIGN="LEFT"/>recover_skew1_cell_hex(cell_size, cell_data)<br ALIGN="LEFT"/>recv_send(text, lines, text_until, display, save, ansi_escape)<br ALIGN="LEFT"/>recv_until(text): bytes<br ALIGN="LEFT"/>regexp(file_content)<br ALIGN="LEFT"/>remote_exploitation(payload)<br ALIGN="LEFT"/>rot(text, shift)<br ALIGN="LEFT"/>rot_bruteforce(crypted_text, known_text, max_shift)<br ALIGN="LEFT"/>rot_char(c, shift)<br ALIGN="LEFT"/>run()<br ALIGN="LEFT"/>saving_requests()<br ALIGN="LEFT"/>saving_stream_4_encrypted_bytes()<br ALIGN="LEFT"/>saving_to_json(crypted_dict)<br ALIGN="LEFT"/>saving_xml(log_file, file, display)<br ALIGN="LEFT"/>searching_packets(packets, text)<br ALIGN="LEFT"/>searching_records(log_file, func)<br ALIGN="LEFT"/>send_file(file)<br ALIGN="LEFT"/>send_to_bot(payload_url)<br ALIGN="LEFT"/>sending_request(exploit, verbose)<br ALIGN="LEFT"/>setup()<br ALIGN="LEFT"/>setup_request()<br ALIGN="LEFT"/>setup_sse(sse_url)<br ALIGN="LEFT"/>simple_payload_send(payload, lines)<br ALIGN="LEFT"/>simulate_ansi_typing(text, escape_codes)<br ALIGN="LEFT"/>skew_get_value()<br ALIGN="LEFT"/>smart_extract_packets(pcap_file, pcap_function: str, raw: bool, save: bool, filename_save: str, folder_save: str)<br ALIGN="LEFT"/>smarter_bruteforcer()<br ALIGN="LEFT"/>snap_initiate_connection()<br ALIGN="LEFT"/>socket_initiate_connection()<br ALIGN="LEFT"/>solve(hive_path)<br ALIGN="LEFT"/>solve_challenge()<br ALIGN="LEFT"/>solve_equations()<br ALIGN="LEFT"/>sorting_results(results)<br ALIGN="LEFT"/>ssh_connect()<br ALIGN="LEFT"/>str_xor(secret, key)<br ALIGN="LEFT"/>stream_identifier(pkt)<br ALIGN="LEFT"/>test_letter(password)<br ALIGN="LEFT"/>testin_streams()<br ALIGN="LEFT"/>testing_ansii_escape()<br ALIGN="LEFT"/>textFromPDF(file)<br ALIGN="LEFT"/>to_hex(data)<br ALIGN="LEFT"/>tools_result()<br ALIGN="LEFT"/>translated()<br ALIGN="LEFT"/>try_catch(callback)<br ALIGN="LEFT"/>try_key(key_bytes)<br ALIGN="LEFT"/>trying_to_exploit_ods()<br ALIGN="LEFT"/>unified_extract_packets(pcap_file, pcap_function: str, raw: bool)<br ALIGN="LEFT"/>validate_flag()<br ALIGN="LEFT"/>verify_js_reconstructed()<br ALIGN="LEFT"/>xor(a, b)<br ALIGN="LEFT"/>xor_bytes(a, b)<br ALIGN="LEFT"/>xor_decrypt(data: bytes, key1: bytes, key2: bytes): bytes<br ALIGN="LEFT"/>xor_function_dec(given_string, length)<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.config.global_config.GlobalConfig" [color="black", fontcolor="black", label=<{GlobalConfig|content : dict<br ALIGN="LEFT"/>global_config_file_path : Path<br ALIGN="LEFT"/>verbose<br ALIGN="LEFT"/>|<I>check_config_content</I>()<br ALIGN="LEFT"/>creating()<br ALIGN="LEFT"/>get_content()<br ALIGN="LEFT"/>initial_content()<br ALIGN="LEFT"/>initializing()<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.feature_test.attempt_at_pcap.GraphAttempt" [color="black", fontcolor="black", label=<{GraphAttempt|<br ALIGN="LEFT"/>|visualize_packet_flow(filename, limit)<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.feature_test.manager_graphs.GraphVisualizer" [color="black", fontcolor="black", label=<{GraphVisualizer|edges : set<br ALIGN="LEFT"/>net : Network<br ALIGN="LEFT"/>nodes : set<br ALIGN="LEFT"/>|add_edge(source, target)<br ALIGN="LEFT"/>add_graph_data(graph_dict)<br ALIGN="LEFT"/>add_node(node_id, label)<br ALIGN="LEFT"/>show(filename)<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.feature_test.pyvis_class_test.GraphVisualizer" [color="black", fontcolor="black", label=<{GraphVisualizer|edges : set<br ALIGN="LEFT"/>net : Network<br ALIGN="LEFT"/>nodes : set<br ALIGN="LEFT"/>|add_edge(source, target)<br ALIGN="LEFT"/>add_graph_data(graph_dict)<br ALIGN="LEFT"/>add_node(node_id, label)<br ALIGN="LEFT"/>show(filename)<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.folders.link_ctf_folders.Linking" [color="black", fontcolor="black", label=<{Linking|all_categories<br ALIGN="LEFT"/>all_sites : set<br ALIGN="LEFT"/>categories<br ALIGN="LEFT"/>ctf_path : Path<br ALIGN="LEFT"/>directories<br ALIGN="LEFT"/>exclude_folders<br ALIGN="LEFT"/>site<br ALIGN="LEFT"/>|get_all_sites()<br ALIGN="LEFT"/>get_categories()<br ALIGN="LEFT"/>get_challenges(category, site, folder)<br ALIGN="LEFT"/>handling_global_config()<br ALIGN="LEFT"/>main()<br ALIGN="LEFT"/><I>temp</I>()<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.managers.manager_class.ManagerClass" [color="black", fontcolor="black", label=<{ManagerClass|default_search_paths : List[Path]<br ALIGN="LEFT"/>|example_printing(file_path: str, classname: str)<br ALIGN="LEFT"/>get_classes_in_file(file_path: str \| Path): list[str]<br ALIGN="LEFT"/>inspect(file_path: str \| Path, class_name: str, include_inherited: bool, extra_search_paths: Optional[List[str \| Path]]): Dict[str, Any]<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.managers.manager_connections.ManagerConnections" [color="black", fontcolor="black", label=<{ManagerConnections|conn : NoneType, process, remote<br ALIGN="LEFT"/>conn_type<br ALIGN="LEFT"/>debug<br ALIGN="LEFT"/>menu_num : NoneType<br ALIGN="LEFT"/>menu_text : NoneType<br ALIGN="LEFT"/>port<br ALIGN="LEFT"/>pwn<br ALIGN="LEFT"/>url<br ALIGN="LEFT"/>|connect(): None<br ALIGN="LEFT"/>initiate_connection(): None<br ALIGN="LEFT"/>recv_lines(number, display, save)<br ALIGN="LEFT"/>recv_menu(number, display, save)<br ALIGN="LEFT"/>recv_send(text, lines, text_until, display, save)<br ALIGN="LEFT"/>recv_until(text): bytes<br ALIGN="LEFT"/>send(text, encode): None<br ALIGN="LEFT"/>send_menu(choice, menu_num, menu_text, display, save)<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.managers.manager_crypto.ManagerCrypto" [color="black", fontcolor="black", label=<{ManagerCrypto|<br ALIGN="LEFT"/>|decode_base64(text)<br ALIGN="LEFT"/><I>initializing_all_ancestors</I>()<br ALIGN="LEFT"/>re_match_base64_string(text: str, strict): list[str]<br ALIGN="LEFT"/>re_match_flag(text: str, origin: str): list[str]<br ALIGN="LEFT"/>re_match_partial_flag(text: str, origin: str): list[str]<br ALIGN="LEFT"/>xor(text: str, key: str): str<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.forensics.manager_dash.ManagerDash" [color="black", fontcolor="black", label=<{ManagerDash|app : Dash<br ALIGN="LEFT"/>elements : list<br ALIGN="LEFT"/>title<br ALIGN="LEFT"/>|elements_checker(elements: list[dict]): bool<br ALIGN="LEFT"/>example_element_creator()<br ALIGN="LEFT"/>pcap_to_element_converter(packets: list[scapy.packet.Packet], save: bool): list[dict]<br ALIGN="LEFT"/>pcap_to_element_converter_timestamp(packets: list[scapy.packet.Packet], save: bool): list[dict]<br ALIGN="LEFT"/>run_dash()<br ALIGN="LEFT"/>setup_dash()<br ALIGN="LEFT"/>setup_dash_functions()<br ALIGN="LEFT"/>setup_dash_layout()<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.error.manager_error.ManagerError" [color="black", fontcolor="black", label=<{ManagerError|verbose<br ALIGN="LEFT"/>|handle(exception: Exception, exit_code: int)<br ALIGN="LEFT"/>try_function(function: callable)<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.managers.manager_file.ManagerFile" [color="black", fontcolor="black", label=<{ManagerFile|<br ALIGN="LEFT"/>|initializing_file_ancestors()<br ALIGN="LEFT"/>search_for_base64(file)<br ALIGN="LEFT"/>search_for_base64_file(file)<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.managers.manager_files_evtx.ManagerFileEvtx" [color="black", fontcolor="black", label=<{ManagerFileEvtx|<br ALIGN="LEFT"/>|<I>initializing_all_ancestors</I>()<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.managers.manager_files_pcap.ManagerFilePcap" [color="black", fontcolor="black", label=<{ManagerFilePcap|packets<br ALIGN="LEFT"/>|get_packet_ttl(packets)<br ALIGN="LEFT"/>get_packets_icmp(packets)<br ALIGN="LEFT"/><I>initializing_all_ancestors</I>()<br ALIGN="LEFT"/>pcap_open(file, save): list[scapy.packet.Packet] \| None<br ALIGN="LEFT"/>searching_text_in_packets(text, packets, display)<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.managers.manager_files_re.ManagerFileRegex" [color="black", fontcolor="black", label=<{ManagerFileRegex|<br ALIGN="LEFT"/>|check_name_similarity_in_files(files: list, information: list, threshold: float): list<br ALIGN="LEFT"/>extract_strings(file_path, min_length)<br ALIGN="LEFT"/><I>initializing_all_ancestors</I>()<br ALIGN="LEFT"/>normalize_name(name: str): str<br ALIGN="LEFT"/>string_similarity(str1: str, str2: str): float<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.managers.manager_folder.ManagerFolder" [color="black", fontcolor="black", label=<{ManagerFolder|Path : Path<br ALIGN="LEFT"/>challenge_file : Path<br ALIGN="LEFT"/>debug<br ALIGN="LEFT"/>file<br ALIGN="LEFT"/>file_called_frame : list<br ALIGN="LEFT"/>file_called_path : Path<br ALIGN="LEFT"/>folder_data : NoneType, Path<br ALIGN="LEFT"/>folder_files : NoneType, Path<br ALIGN="LEFT"/>folder_payloads : NoneType, Path<br ALIGN="LEFT"/>folders : defaultdict<br ALIGN="LEFT"/>folders_name_list<br ALIGN="LEFT"/>parent : NoneType, Path<br ALIGN="LEFT"/>solution_file : NoneType, Path<br ALIGN="LEFT"/>verbose<br ALIGN="LEFT"/>|challenge_folder_structure()<br ALIGN="LEFT"/>check_empty_folder(folder)<br ALIGN="LEFT"/>check_folder_exists(folder: str): str \| bool<br ALIGN="LEFT"/>clean_folders(folders: list)<br ALIGN="LEFT"/>copy_folder(source, destination)<br ALIGN="LEFT"/>create_ctf_structure(category, site, name, verbose, download)<br ALIGN="LEFT"/>create_parent_folder()<br ALIGN="LEFT"/>delete_folder(folder)<br ALIGN="LEFT"/>download_automove(category: str, challenge_name: str, challenge_path, checker: bool, verbose: bool)<br ALIGN="LEFT"/>exec_on_files(files: list[str], func: callable)<br ALIGN="LEFT"/>exec_on_folder(folder: Path, func: callable)<br ALIGN="LEFT"/>exec_on_folder_files(folder: Path, func: callable, func_args, func_kwargs)<br ALIGN="LEFT"/>folders_file()<br ALIGN="LEFT"/>folfil(folder, file)<br ALIGN="LEFT"/>get_challenge_file()<br ALIGN="LEFT"/>get_current_dir()<br ALIGN="LEFT"/>get_parent()<br ALIGN="LEFT"/>get_solution_file()<br ALIGN="LEFT"/>handling_global_config()<br ALIGN="LEFT"/>init_for_challenge()<br ALIGN="LEFT"/><I>initializing_all_ancestors</I>()<br ALIGN="LEFT"/>prepare_space(files, folder, test_text)<br ALIGN="LEFT"/>recursive_folder_search(function)<br ALIGN="LEFT"/>search_files(directory, exclude_dirs, search_string, save, display)<br ALIGN="LEFT"/>search_for_pattern_in_file(file, func, display, save)<br ALIGN="LEFT"/>setup_named_folders()<br ALIGN="LEFT"/>single_folder_search()<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.managers.manager_functions.ManagerFunction" [color="black", fontcolor="black", label=<{ManagerFunction|funcCrawler<br ALIGN="LEFT"/>ignored_functions : set[str]<br ALIGN="LEFT"/>|find_function_from_file(file_path, function_name)<br ALIGN="LEFT"/>function_object(file_path: Path, function_name: str): FunctionDefFinder<br ALIGN="LEFT"/>get_function_reference(function, file)<br ALIGN="LEFT"/>get_functions_from_file(file_path: Path, function_name: str): list[ast.FunctionDef] \| None \| ast.FunctionDef<br ALIGN="LEFT"/>get_self_functions()<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.find_usage.manager_gathering.ManagerGathering" [color="black", fontcolor="black", label=<{ManagerGathering|ctf_path : Path<br ALIGN="LEFT"/>directories<br ALIGN="LEFT"/>exclude_folders<br ALIGN="LEFT"/>gathering_target<br ALIGN="LEFT"/>manager_class<br ALIGN="LEFT"/>manager_error<br ALIGN="LEFT"/>|adding_to_file(filename: str, method_source: str)<br ALIGN="LEFT"/>check_functions(target_info, solution_info, solution_name)<br ALIGN="LEFT"/>gathering_all_solution_files()<br ALIGN="LEFT"/>get_gathering_target()<br ALIGN="LEFT"/>get_org_information()<br ALIGN="LEFT"/>handling_global_config()<br ALIGN="LEFT"/>initializing_all_ancestors()<br ALIGN="LEFT"/>main()<br ALIGN="LEFT"/>method_enumeration(target_methods, method_name)<br ALIGN="LEFT"/><I>renaming_method</I>()<br ALIGN="LEFT"/>tabbing(text: str, num: int, function, space, space_num)<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.venv.manager_venv.ManagerVenv" [color="black", fontcolor="black", label=<{ManagerVenv|python_executable : Path<br ALIGN="LEFT"/>venv_dir<br ALIGN="LEFT"/>venv_to_check : NoneType, Path<br ALIGN="LEFT"/>|activate(filepath)<br ALIGN="LEFT"/>check_global_venv_dir()<br ALIGN="LEFT"/>check_venv_dir(filepath)<br ALIGN="LEFT"/><I>clean_venv</I>()<br ALIGN="LEFT"/><I>create_shortcut</I>()<br ALIGN="LEFT"/>delete_venv(folder: Path)<br ALIGN="LEFT"/>get_dependencies()<br ALIGN="LEFT"/>get_pipdeptree()<br ALIGN="LEFT"/>get_python_executable()<br ALIGN="LEFT"/>install_pipdeptree()<br ALIGN="LEFT"/>look_for_venvs(filepath: str)<br ALIGN="LEFT"/>move_venv(folder: Path)<br ALIGN="LEFT"/><I>save_dependencies</I>()<br ALIGN="LEFT"/><I>system_translator</I>()<br ALIGN="LEFT"/>testing()<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.venv.testing.main.ManagerVenv" [color="black", fontcolor="black", label=<{ManagerVenv|venv : Optional[VenvInfo]<br ALIGN="LEFT"/>venv_dir : Optional[Path]<br ALIGN="LEFT"/>|activation_command(venv: VenvInfo, shell: Optional[str]): str<br ALIGN="LEFT"/>check_venv_dir()<br ALIGN="LEFT"/>create(name: str, python: Optional[Path], in_project: bool, project_dir: Optional[Path], backend: str, with_pip: bool): VenvInfo<br ALIGN="LEFT"/>create_and_link_current(name: str): VenvInfo<br ALIGN="LEFT"/>delete(venv_path: Path, force: bool): None<br ALIGN="LEFT"/>detect_venvs(root: Path, recursive: bool): Iterable[Path]<br ALIGN="LEFT"/>export_lockfiles(venv_path: Path, out_dir: Path): tuple[Path, Path]<br ALIGN="LEFT"/>link(project_dir: Path, venv_path: Path): None<br ALIGN="LEFT"/>list_venvs(): list[VenvInfo]<br ALIGN="LEFT"/>resolve_for(project_dir: Path): Optional[VenvInfo]<br ALIGN="LEFT"/>run_in(venv_path: Path, args: Sequence[str]): subprocess.CompletedProcess<br ALIGN="LEFT"/>summarize(info: VenvInfo): str<br ALIGN="LEFT"/>transfer(venv_path: Path, dest_root: Optional[Path], move: bool): Path<br ALIGN="LEFT"/>unlink(project_dir: Path): None<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.src.position_cipher_functions.PositionCipher" [color="black", fontcolor="black", label=<{PositionCipher|key : list<br ALIGN="LEFT"/>replace_combos : list<br ALIGN="LEFT"/>|another_attempt()<br ALIGN="LEFT"/>brute_transpose_find_flag(lyrics: str, partial_flag: str, keys: list, verbose: bool, wrap: bool)<br ALIGN="LEFT"/>bruteforce_all_lyrics(all_lyrics: list, partial_flag: str, keys: list, verbose: bool, wrap: bool)<br ALIGN="LEFT"/>check_for_rot(text, partial)<br ALIGN="LEFT"/>creating_control_combos(start, end, number)<br ALIGN="LEFT"/>dictionary_analysis(lyrics)<br ALIGN="LEFT"/>init_some_values()<br ALIGN="LEFT"/>load_lyrics()<br ALIGN="LEFT"/>lyric_transformation(lyrics)<br ALIGN="LEFT"/>lyric_transpose(lyrics, offset, wrap)<br ALIGN="LEFT"/>lyrics_all()<br ALIGN="LEFT"/>lyrics_transformation(lyrics, replace_combos, control_combos)<br ALIGN="LEFT"/>main()<br ALIGN="LEFT"/>position_cipher(text: str, keys: list)<br ALIGN="LEFT"/>print_dictionary(d)<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.template.solution_template.Solution" [color="black", fontcolor="black", label=<{Solution|<br ALIGN="LEFT"/>|<I>main</I>()<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.template.__main__.Templater" [color="black", fontcolor="black", label=<{Templater|file_attempt : Path<br ALIGN="LEFT"/>files_attempts<br ALIGN="LEFT"/>folder_attempts : Path<br ALIGN="LEFT"/>next_attempt : int<br ALIGN="LEFT"/>verbose : bool<br ALIGN="LEFT"/>|create_attempts()<br ALIGN="LEFT"/>find_folder_in_frame(folder_name: str): Path \| None<br ALIGN="LEFT"/>main()<br ALIGN="LEFT"/>}>, shape="record", style="solid"];
"ctfsolver.venv.testing.main.VenvInfo" [color="black", fontcolor="black", label=<{VenvInfo|created_at : float<br ALIGN="LEFT"/>name : str<br ALIGN="LEFT"/>path : Path<br ALIGN="LEFT"/>platform : str<br ALIGN="LEFT"/>python : Path<br ALIGN="LEFT"/>|}>, shape="record", style="solid"];
"ctfsolver.config.challenge_config.ChallengeConfig" -> "ctfsolver.managers.manager_folder.ManagerFolder" [arrowhead="empty", arrowtail="none"];
"ctfsolver.find_usage.gathering.Gathering" -> "ctfsolver.src.ctfsolver.CTFSolver" [arrowhead="empty", arrowtail="none"];
"ctfsolver.find_usage.manager_gathering.ManagerGathering" -> "ctfsolver.managers.manager_folder.ManagerFolder" [arrowhead="empty", arrowtail="none"];
"ctfsolver.find_usage.manager_gathering.ManagerGathering" -> "ctfsolver.managers.manager_functions.ManagerFunction" [arrowhead="empty", arrowtail="none"];
"ctfsolver.folders.finding_writeups.Folder_Structure" -> "ctfsolver.src.ctfsolver.CTFSolver" [arrowhead="empty", arrowtail="none"];
"ctfsolver.folders.link_ctf_folders.Linking" -> "ctfsolver.managers.manager_file.ManagerFile" [arrowhead="empty", arrowtail="none"];
"ctfsolver.managers.manager_file.ManagerFile" -> "ctfsolver.managers.manager_files_pcap.ManagerFilePcap" [arrowhead="empty", arrowtail="none"];
"ctfsolver.managers.manager_file.ManagerFile" -> "ctfsolver.managers.manager_files_re.ManagerFileRegex" [arrowhead="empty", arrowtail="none"];
"ctfsolver.managers.manager_file.ManagerFile" -> "ctfsolver.managers.manager_folder.ManagerFolder" [arrowhead="empty", arrowtail="none"];
"ctfsolver.managers.manager_file.ManagerFile" -> "ctfsolver.managers.manager_functions.ManagerFunction" [arrowhead="empty", arrowtail="none"];
"ctfsolver.src.ctfsolver.CTFSolver" -> "ctfsolver.error.manager_error.ManagerError" [arrowhead="empty", arrowtail="none"];
"ctfsolver.src.ctfsolver.CTFSolver" -> "ctfsolver.managers.manager_connections.ManagerConnections" [arrowhead="empty", arrowtail="none"];
"ctfsolver.src.ctfsolver.CTFSolver" -> "ctfsolver.managers.manager_crypto.ManagerCrypto" [arrowhead="empty", arrowtail="none"];
"ctfsolver.src.ctfsolver.CTFSolver" -> "ctfsolver.managers.manager_file.ManagerFile" [arrowhead="empty", arrowtail="none"];
"ctfsolver.template.__main__.Templater" -> "ctfsolver.managers.manager_file.ManagerFile" [arrowhead="empty", arrowtail="none"];
"ctfsolver.template.gathering_template.Gathering" -> "ctfsolver.src.ctfsolver.CTFSolver" [arrowhead="empty", arrowtail="none"];
"ctfsolver.template.solution_template.Solution" -> "ctfsolver.src.ctfsolver.CTFSolver" [arrowhead="empty", arrowtail="none"];
"ctfsolver.venv.manager_venv.ManagerVenv" -> "ctfsolver.managers.manager_folder.ManagerFolder" [arrowhead="empty", arrowtail="none"];
"ctfsolver.error.manager_error.ManagerError" -> "ctfsolver.find_usage.manager_gathering.ManagerGathering" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="manager_error", style="solid"];
"ctfsolver.find_usage.function_definition_class.FunctionDefFinder" -> "ctfsolver.managers.manager_functions.ManagerFunction" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="funcCrawler", style="solid"];
"ctfsolver.managers.manager_class.ManagerClass" -> "ctfsolver.find_usage.manager_gathering.ManagerGathering" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="manager_class", style="solid"];
"ctfsolver.venv.testing.main.VenvInfo" -> "ctfsolver.venv.testing.main.ManagerVenv" [arrowhead="odiamond", arrowtail="none", fontcolor="green", label="venv", style="solid"];
}
digraph "packages_ctfsolver" {
rankdir=BT
charset="utf-8"
"ctfsolver" [color="black", label=<ctfsolver>, shape="box", style="solid"];
"ctfsolver.cli" [color="black", label=<ctfsolver.cli>, shape="box", style="solid"];
"ctfsolver.cli.main" [color="black", label=<ctfsolver.cli.main>, shape="box", style="solid"];
"ctfsolver.cli.subcli" [color="black", label=<ctfsolver.cli.subcli>, shape="box", style="solid"];
"ctfsolver.cli.subcli.ctf" [color="black", label=<ctfsolver.cli.subcli.ctf>, shape="box", style="solid"];
"ctfsolver.cli.subcli.venv" [color="black", label=<ctfsolver.cli.subcli.venv>, shape="box", style="solid"];
"ctfsolver.config" [color="black", label=<ctfsolver.config>, shape="box", style="solid"];
"ctfsolver.config.__main__" [color="black", label=<ctfsolver.config.__main__>, shape="box", style="solid"];
"ctfsolver.config.challenge_config" [color="black", label=<ctfsolver.config.challenge_config>, shape="box", style="solid"];
"ctfsolver.config.global_config" [color="black", label=<ctfsolver.config.global_config>, shape="box", style="solid"];
"ctfsolver.error" [color="black", label=<ctfsolver.error>, shape="box", style="solid"];
"ctfsolver.error.manager_error" [color="black", label=<ctfsolver.error.manager_error>, shape="box", style="solid"];
"ctfsolver.feature_test" [color="black", label=<ctfsolver.feature_test>, shape="box", style="solid"];
"ctfsolver.feature_test.attempt_at_pcap" [color="black", label=<ctfsolver.feature_test.attempt_at_pcap>, shape="box", style="solid"];
"ctfsolver.feature_test.dash_test" [color="black", label=<ctfsolver.feature_test.dash_test>, shape="box", style="solid"];
"ctfsolver.feature_test.manager_graphs" [color="black", label=<ctfsolver.feature_test.manager_graphs>, shape="box", style="solid"];
"ctfsolver.feature_test.pyvis_class_test" [color="black", label=<ctfsolver.feature_test.pyvis_class_test>, shape="box", style="solid"];
"ctfsolver.feature_test.pyvis_test" [color="black", label=<ctfsolver.feature_test.pyvis_test>, shape="box", style="solid"];
"ctfsolver.feature_test.testing_files" [color="black", label=<ctfsolver.feature_test.testing_files>, shape="box", style="solid"];
"ctfsolver.find_usage" [color="black", label=<ctfsolver.find_usage>, shape="box", style="solid"];
"ctfsolver.find_usage.__main__" [color="black", label=<ctfsolver.find_usage.__main__>, shape="box", style="solid"];
"ctfsolver.find_usage.function_definition_class" [color="black", label=<ctfsolver.find_usage.function_definition_class>, shape="box", style="solid"];
"ctfsolver.find_usage.gathering" [color="black", label=<ctfsolver.find_usage.gathering>, shape="box", style="solid"];
"ctfsolver.find_usage.manager_gathering" [color="black", label=<ctfsolver.find_usage.manager_gathering>, shape="box", style="solid"];
"ctfsolver.folders" [color="black", label=<ctfsolver.folders>, shape="box", style="solid"];
"ctfsolver.folders.__main__" [color="black", label=<ctfsolver.folders.__main__>, shape="box", style="solid"];
"ctfsolver.folders.finding_writeups" [color="black", label=<ctfsolver.folders.finding_writeups>, shape="box", style="solid"];
"ctfsolver.folders.link_ctf_folders" [color="black", label=<ctfsolver.folders.link_ctf_folders>, shape="box", style="solid"];
"ctfsolver.forensics" [color="black", label=<ctfsolver.forensics>, shape="box", style="solid"];
"ctfsolver.forensics.manager_dash" [color="black", label=<ctfsolver.forensics.manager_dash>, shape="box", style="solid"];
"ctfsolver.managers" [color="black", label=<ctfsolver.managers>, shape="box", style="solid"];
"ctfsolver.managers.manager_class" [color="black", label=<ctfsolver.managers.manager_class>, shape="box", style="solid"];
"ctfsolver.managers.manager_connections" [color="black", label=<ctfsolver.managers.manager_connections>, shape="box", style="solid"];
"ctfsolver.managers.manager_crypto" [color="black", label=<ctfsolver.managers.manager_crypto>, shape="box", style="solid"];
"ctfsolver.managers.manager_file" [color="black", label=<ctfsolver.managers.manager_file>, shape="box", style="solid"];
"ctfsolver.managers.manager_files_evtx" [color="black", label=<ctfsolver.managers.manager_files_evtx>, shape="box", style="solid"];
"ctfsolver.managers.manager_files_pcap" [color="black", label=<ctfsolver.managers.manager_files_pcap>, shape="box", style="solid"];
"ctfsolver.managers.manager_files_re" [color="black", label=<ctfsolver.managers.manager_files_re>, shape="box", style="solid"];
"ctfsolver.managers.manager_folder" [color="black", label=<ctfsolver.managers.manager_folder>, shape="box", style="solid"];
"ctfsolver.managers.manager_functions" [color="black", label=<ctfsolver.managers.manager_functions>, shape="box", style="solid"];
"ctfsolver.scripts" [color="black", label=<ctfsolver.scripts>, shape="box", style="solid"];
"ctfsolver.scripts.__main__" [color="black", label=<ctfsolver.scripts.__main__>, shape="box", style="solid"];
"ctfsolver.scripts.clean_folders" [color="black", label=<ctfsolver.scripts.clean_folders>, shape="box", style="solid"];
"ctfsolver.scripts.clean_folders.__main__" [color="black", label=<ctfsolver.scripts.clean_folders.__main__>, shape="box", style="solid"];
"ctfsolver.scripts.run_clean_folders" [color="black", label=<ctfsolver.scripts.run_clean_folders>, shape="box", style="solid"];
"ctfsolver.scripts.run_folders" [color="black", label=<ctfsolver.scripts.run_folders>, shape="box", style="solid"];
"ctfsolver.scripts.run_solution" [color="black", label=<ctfsolver.scripts.run_solution>, shape="box", style="solid"];
"ctfsolver.src" [color="black", label=<ctfsolver.src>, shape="box", style="solid"];
"ctfsolver.src.ctfsolver" [color="black", label=<ctfsolver.src.ctfsolver>, shape="box", style="solid"];
"ctfsolver.src.position_cipher_functions" [color="black", label=<ctfsolver.src.position_cipher_functions>, shape="box", style="solid"];
"ctfsolver.template" [color="black", label=<ctfsolver.template>, shape="box", style="solid"];
"ctfsolver.template.__main__" [color="black", label=<ctfsolver.template.__main__>, shape="box", style="solid"];
"ctfsolver.template.gathering_template" [color="black", label=<ctfsolver.template.gathering_template>, shape="box", style="solid"];
"ctfsolver.template.solution_template" [color="black", label=<ctfsolver.template.solution_template>, shape="box", style="solid"];
"ctfsolver.test" [color="black", label=<ctfsolver.test>, shape="box", style="solid"];
"ctfsolver.venv" [color="black", label=<ctfsolver.venv>, shape="box", style="solid"];
"ctfsolver.venv.main" [color="black", label=<ctfsolver.venv.main>, shape="box", style="solid"];
"ctfsolver.venv.manager_venv" [color="black", label=<ctfsolver.venv.manager_venv>, shape="box", style="solid"];
"ctfsolver.venv.testing" [color="black", label=<ctfsolver.venv.testing>, shape="box", style="solid"];
"ctfsolver.venv.testing.main" [color="black", label=<ctfsolver.venv.testing.main>, shape="box", style="solid"];
"ctfsolver" -> "ctfsolver.managers.manager_connections" [arrowhead="open", arrowtail="none"];
"ctfsolver" -> "ctfsolver.managers.manager_crypto" [arrowhead="open", arrowtail="none"];
"ctfsolver" -> "ctfsolver.managers.manager_file" [arrowhead="open", arrowtail="none"];
"ctfsolver" -> "ctfsolver.src.ctfsolver" [arrowhead="open", arrowtail="none"];
"ctfsolver.cli.main" -> "ctfsolver.cli.subcli.ctf" [arrowhead="open", arrowtail="none"];
"ctfsolver.cli.main" -> "ctfsolver.cli.subcli.venv" [arrowhead="open", arrowtail="none"];
"ctfsolver.cli.main" -> "ctfsolver.config.global_config" [arrowhead="open", arrowtail="none"];
"ctfsolver.cli.main" -> "ctfsolver.find_usage.manager_gathering" [arrowhead="open", arrowtail="none"];
"ctfsolver.cli.subcli.ctf" -> "ctfsolver.config.challenge_config" [arrowhead="open", arrowtail="none"];
"ctfsolver.cli.subcli.ctf" -> "ctfsolver.error.manager_error" [arrowhead="open", arrowtail="none"];
"ctfsolver.cli.subcli.ctf" -> "ctfsolver.managers.manager_file" [arrowhead="open", arrowtail="none"];
"ctfsolver.cli.subcli.venv" -> "ctfsolver.venv.manager_venv" [arrowhead="open", arrowtail="none"];
"ctfsolver.config" -> "ctfsolver.config.global_config" [arrowhead="open", arrowtail="none"];
"ctfsolver.config.challenge_config" -> "ctfsolver.managers.manager_folder" [arrowhead="open", arrowtail="none"];
"ctfsolver.feature_test.attempt_at_pcap" -> "ctfsolver.managers.manager_files_pcap" [arrowhead="open", arrowtail="none"];
"ctfsolver.find_usage.__main__" -> "ctfsolver.error.manager_error" [arrowhead="open", arrowtail="none"];
"ctfsolver.find_usage.__main__" -> "ctfsolver.managers.manager_folder" [arrowhead="open", arrowtail="none"];
"ctfsolver.find_usage.gathering" -> "ctfsolver" [arrowhead="open", arrowtail="none"];
"ctfsolver.find_usage.manager_gathering" -> "ctfsolver.config" [arrowhead="open", arrowtail="none"];
"ctfsolver.find_usage.manager_gathering" -> "ctfsolver.error.manager_error" [arrowhead="open", arrowtail="none"];
"ctfsolver.find_usage.manager_gathering" -> "ctfsolver.feature_test.testing_files" [arrowhead="open", arrowtail="none"];
"ctfsolver.find_usage.manager_gathering" -> "ctfsolver.managers.manager_class" [arrowhead="open", arrowtail="none"];
"ctfsolver.find_usage.manager_gathering" -> "ctfsolver.managers.manager_folder" [arrowhead="open", arrowtail="none"];
"ctfsolver.find_usage.manager_gathering" -> "ctfsolver.managers.manager_functions" [arrowhead="open", arrowtail="none"];
"ctfsolver.folders.__main__" -> "ctfsolver.managers.manager_folder" [arrowhead="open", arrowtail="none"];
"ctfsolver.folders.finding_writeups" -> "ctfsolver" [arrowhead="open", arrowtail="none"];
"ctfsolver.folders.link_ctf_folders" -> "ctfsolver.config.global_config" [arrowhead="open", arrowtail="none"];
"ctfsolver.folders.link_ctf_folders" -> "ctfsolver.managers.manager_file" [arrowhead="open", arrowtail="none"];
"ctfsolver.managers" -> "ctfsolver.managers.manager_connections" [arrowhead="open", arrowtail="none"];
"ctfsolver.managers" -> "ctfsolver.managers.manager_crypto" [arrowhead="open", arrowtail="none"];
"ctfsolver.managers" -> "ctfsolver.managers.manager_file" [arrowhead="open", arrowtail="none"];
"ctfsolver.managers.manager_file" -> "ctfsolver.managers.manager_files_pcap" [arrowhead="open", arrowtail="none"];
"ctfsolver.managers.manager_file" -> "ctfsolver.managers.manager_files_re" [arrowhead="open", arrowtail="none"];
"ctfsolver.managers.manager_file" -> "ctfsolver.managers.manager_folder" [arrowhead="open", arrowtail="none"];
"ctfsolver.managers.manager_file" -> "ctfsolver.managers.manager_functions" [arrowhead="open", arrowtail="none"];
"ctfsolver.managers.manager_folder" -> "ctfsolver.config" [arrowhead="open", arrowtail="none"];
"ctfsolver.managers.manager_functions" -> "ctfsolver.find_usage.function_definition_class" [arrowhead="open", arrowtail="none"];
"ctfsolver.scripts.clean_folders.__main__" -> "ctfsolver.managers.manager_folder" [arrowhead="open", arrowtail="none"];
"ctfsolver.src.ctfsolver" -> "ctfsolver.error.manager_error" [arrowhead="open", arrowtail="none"];
"ctfsolver.src.ctfsolver" -> "ctfsolver.managers" [arrowhead="open", arrowtail="none"];
"ctfsolver.src.ctfsolver" -> "ctfsolver.managers.manager_connections" [arrowhead="open", arrowtail="none"];
"ctfsolver.src.ctfsolver" -> "ctfsolver.managers.manager_crypto" [arrowhead="open", arrowtail="none"];
"ctfsolver.src.ctfsolver" -> "ctfsolver.managers.manager_file" [arrowhead="open", arrowtail="none"];
"ctfsolver.template.__main__" -> "ctfsolver.managers.manager_file" [arrowhead="open", arrowtail="none"];
"ctfsolver.template.gathering_template" -> "ctfsolver" [arrowhead="open", arrowtail="none"];
"ctfsolver.template.solution_template" -> "ctfsolver" [arrowhead="open", arrowtail="none"];
"ctfsolver.venv.manager_venv" -> "ctfsolver.config" [arrowhead="open", arrowtail="none"];
"ctfsolver.venv.manager_venv" -> "ctfsolver.managers.manager_folder" [arrowhead="open", arrowtail="none"];
"ctfsolver.venv.testing.main" -> "ctfsolver.config" [arrowhead="open", arrowtail="none"];
}