hashcat 2.2 第二阶段哈希装载

从现在开始,为了提高速度,函数只是大体描述一下做了什么事情,有一些说明直接放在注释里做一下参考。

1.将无效行去掉

for (u32 hashes_pos = 1; hashes_pos < hashes_cnt; hashes_pos++)//remove the invalid lines
  {
    if (sort_by_digest_p0p1 (hashes_buf[hashes_pos].digest, hashes_buf[hashes_pos - 1].digest, (void *) hashconfig) == 0) continue;

    hash_t tmp;

    memcpy (&tmp, &hashes_buf[hashes_pos], sizeof (hash_t));

    memcpy (&hashes_buf[hashes_cnt_new], &tmp, sizeof (hash_t));

    hashes_cnt_new++;
  }

for (u32 i = hashes_cnt_new; i < hashes->hashes_cnt; i++)//把后面都置为0
  {
    memset (&hashes_buf[i], 0, sizeof (hash_t));
  }

  hashes_cnt = hashes_cnt_new;

  hashes->hashes_cnt = hashes_cnt;//更改成有效计数值

但是在这里为什么要多做一个tmp操作,我是不太清楚的。

2.内存整理

  /**
   * Now generate all the buffers required for later
   */

  {
    // copied from inner loop

    salt_buf = &salts_buf_new[salts_cnt];//这里给了一个全0的salt_buf,之前有个calloc

    memcpy (salt_buf, hashes_buf[0].salt, sizeof (salt_t));

    hashes_buf[0].salt = salt_buf;

    salt_buf->digests_cnt    = 0;
    salt_buf->digests_done   = 0;
    salt_buf->digests_offset = 0;

    salts_cnt++;
  }

  salt_buf->digests_cnt++;

  char *digests_buf_new_ptr = ((char *) digests_buf_new) + (0 * hashconfig->dgst_size);
  
 //整理内存,将原本可能不连续的内存放到一块连续的内存上
  memcpy (digests_buf_new_ptr, hashes_buf[0].digest, hashconfig->dgst_size);

  hashes_buf[0].digest = digests_buf_new_ptr;

 for (u32 hashes_pos = 1; hashes_pos < hashes_cnt; hashes_pos++)
  {

    digests_buf_new_ptr = ((char *) digests_buf_new) + (hashes_pos * hashconfig->dgst_size);

    memcpy (digests_buf_new_ptr, hashes_buf[hashes_pos].digest, hashconfig->dgst_size);

    hashes_buf[hashes_pos].digest = digests_buf_new_ptr;
 }

虽然感觉之前内存就是连续的,但是可能是之前删减的时候更改了什么。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值