Рефераты. Несанкционированный доступ к терминалам серверов с операционными системами семейства UNIX - (курсовая)

p>if ((options. flags & FLG_PWD_REQ) && ! database. salts) exit(0); }

    }
    static void john_init(int argc, char **argv)
    {
    #if CPU_DETECT
    if (! CPU_detect()) {
    #if CPU_REQ
    fprintf(stderr, "Sorry, %s is required\n", CPU_NAME);
    error();
    #endif
    }
    #endif
    path_init(argv);
    cfg_init(CFG_NAME);
    status_init(NULL, 1);
    opt_init(argc, argv);
    john_register_all();
    common_init();
    sig_init(idle_yield);
    john_load();
    }
    static void john_run()
    {
    if (options. flags & FLG_TEST_CHK)
    benchmark_all();
    else
    if (options. flags & FLG_MAKECHARS_CHK)
    do_makechars(&database, options. charset);
    else
    if (options. flags & FLG_CRACKING_CHK) {
    if (! (options. flags & FLG_STDOUT)) log_init(LOG_NAME);
    tty_init();
    if (options. flags & FLG_SINGLE_CHK)
    do_single_crack(&database);
    else
    if (options. flags & FLG_WORDLIST_CHK)
    do_wordlist_crack(&database, options. wordlist,
    (options. flags & FLG_RULES) ! = 0);
    else
    if (options. flags & FLG_INC_CHK)
    do_incremental_crack(&database, options. charset);
    else
    if (options. flags & FLG_EXTERNAL_CHK)
    do_external_crack(&database);
    else
    if (options. flags & FLG_BATCH_CHK)
    do_batch_crack(&database);
    status_print();
    tty_done();
    if (! (options. flags & FLG_STDOUT)) log_done();
    }
    }
    static void john_done()
    {
    path_done();
    check_abort();
    }
    int main(int argc, char **argv)
    {
    char *name;
    #ifdef __DJGPP__
    if (--argc     if ((name = strrchr(argv[0], '/')))
    strcpy(name + 1, argv[1]);
    name = argv[1];
    argv[1] = argv[0];
    argv++;
    #else
    if (! argv[0])
    name = "";
    else
    if ((name = strrchr(argv[0], '/')))
    name++;
    else
    name = argv[0];
    #endif
    #ifdef __CYGWIN32__
    if (strlen(name) > 4)
    if (! strcmp(strlwr(name) + strlen(name) - 4, ". exe"))
    name[strlen(name) - 4] = 0;
    #endif
    if (! strcmp(name, "john")) {
    john_init(argc, argv);
    john_run();
    john_done();
    return 0;
    }
    if (! strcmp(name, "unshadow"))
    return unshadow(argc, argv);
    if (! strcmp(name, "unafs"))
    return unafs(argc, argv);
    if (! strcmp(name, "unique"))
    return unique(argc, argv);
    fprintf(stderr, "Sorry, I can't find myself\n");
    return 1;
    }
    Файл des_bs. c
    #include
    #include "arch. h"
    #include "DES_std. h"
    #include "DES_bs. h"
    DES_bs_combined DES_bs_all;
    int DES_bs_mem_saving = 0;
    extern void DES_bs_body();
    void DES_bs_init()
    {
    int index, bit;
    for (index = 0; index < 0x300; index++) {
    bit = DES_K_bits[index];
    bit -= bit >> 3;
    DES_bs_all. Kp[index] = &DES_bs_all. K[55 - bit];
    }
    }
    void DES_bs_set_salt(ARCH_WORD salt)
    {
    register int src, dst;
    register ARCH_WORD mask;
    mask = 1;
    for (dst = 0; dst < 48; dst++) {
    if (dst == 24) mask = 1;
    if (salt & mask) {
    if (dst < 24) src = dst + 24; else src = dst - 24;
    } else src = dst;
    DES_bs_all. E[dst] = &DES_bs_all. B[DES_E[src]];
    DES_bs_all. E[dst + 48] = &DES_bs_all. B[DES_E[src] + 32];
    mask     }
    }
    void DES_bs_clear_keys()
    {
    memset(DES_bs_all. K, 0, sizeof(DES_bs_all. K));
    }
    void DES_bs_set_key(char *key, int index)
    {
    register char *ptr;
    register int ofs, bit;
    register ARCH_WORD value;
    ofs = 56;
    for (ptr = key; *ptr && ofs; ptr++) {
    bit = (ofs -= 7);
    value = *ptr & 0x7F;
    do
    DES_bs_all. K[bit++] while (value >>= 1);
    }
    }
    void DES_bs_crypt(int count)
    {
    register int bit;
    register ARCH_WORD R, L;
    memset(DES_bs_all. B, 0, sizeof(DES_bs_all. B));
    do {
    DES_bs_body();
    if (! --count) break;
    for (bit = 0; bit < 32; bit++) {
    R = DES_bs_all. B[bit];
    L = DES_bs_all. B[bit + 32];
    DES_bs_all. B[bit + 32] = R;
    DES_bs_all. B[bit] = L;
    }
    } while (1);
    }
    ARCH_WORD *DES_bs_get_binary(char *ciphertext)
    {
    static ARCH_WORD out[64];
    ARCH_WORD *raw;
    int bit;
    int index, shift;
    int value;
    raw = DES_raw_get_binary(ciphertext);
    out[1] = out[0] = 0;
    for (bit = 0; bit < 64; bit++) = value     else
    /* We either set or clear all the bits in every word */
    out[bit] = value ? ~(ARCH_WORD)0 : 0;
    
    return out;
    }
    int DES_bs_binary_hash(ARCH_WORD *binary, int count)
    
    int bit, result;
    if (DES_bs_mem_saving)
    return (int)*binary & ((1     result = 0;
    for (bit = 0; bit < count; bit++)
    if (binary[bit]) result
    int DES_bs_get_hash(int index, int count)
    
    register int bit, result;
    register ARCH_WORD mask;
    mask = (ARCH_WORD)1     result = 0;
    for (bit = 0; bit < count; bit++)
    if (DES_bs_all. B[bit] & mask) result
    /*

* The trick I used here allows to compare one ciphertext against all the * DES_bs_crypt() outputs in just O(log2(ARCH_BITS)) operations. */

    int DES_bs_cmp_all(ARCH_WORD *binary, int count)
    {
    register int bit;
    register ARCH_WORD mask;
    mask = 0;
    if (DES_bs_mem_saving)
    for (bit = 0; bit < ((count < 32) ? count : 32); bit++)
    mask
    else
    for (bit = 0; bit < count; bit++) = DES_bs_all. B[bit] ^ binary[bit];
    if (mask == ~(ARCH_WORD)0) return 0;
    
    return 1;
    }

int DES_bs_cmp_one(ARCH_WORD *binary, int count, int index) {

    register int bit;
    register ARCH_WORD mask;
    if (DES_bs_mem_saving) {
    for (bit = 0; bit < count; bit++)
    if (((DES_bs_all. B[bit] >> index) ^
    (binary[bit >> 5] >> (bit & 0x1F))) & 1) return 0;
    return 1;
    }
    mask = (ARCH_WORD)1     for (bit = 0; bit < count; bit++)
    if ((DES_bs_all. B[bit] ^ binary[bit]) & mask) return 0;
    return 1;
    }

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.