发信人:flashsky(闪空),信区: 网络安全精华区
标题:VSS的口令破解算法的思路
发信站:安全焦点(2002-09-20 19:41:07)

今天一个同事来找我,说VSS的ADMIN口令给忘记了。项目组的源代码管理不了。我拿VSS的程序反汇编一看,天啊,VSS的认证过程真是老土,当然对于具有本地管理员权限的人只需要覆盖掉date/um.dat文件就可以更改口令。而且VSS本身是靠文件共享的,安全性极差,不过如果不知道其口令,其文件的组织还是比较麻烦的,如果知道了口令的话,就容易处理的多。所以我这篇帖子都不好意思当文章提交的,其实这篇文章重点不是讲如何获取VSS的口令,而是讲一下算法破解的思路。

VSS的口令认证过程是这样的,从DATE目录下的UM文件读取口令加密字串,而这个文件是任何可以共享VSS目录的人都可以看见的,一般而言这个目录都会设置比较低级别的共享。VSS的加密口令实际上是一个2位的散列:格式如下:
55 55 FF D2 41 64 6D 69-6E 00 00 00 00 00 00 00   UU..Admin.......
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
00 00 00 00 1A 69 00 00-A8 01 00 00 00 00 00 00   .....i..........
00 00 00 00 00 00 00 00-00 00 00 00 38 00 00 00   ............8...
55 55 90 80 47 75 65 73-74 00 00 00 00 00 00 00   UU..Guest.......
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
00 00 00 00 55 69 00 00-3C 02 00 00 00 00 00 00   ....Ui..<.......
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
其中1A 69就是ADMIN的散列
而  55 69就是GUEST的散列

跟踪一下VSS的算法可以得出如下的加密算法,另外在加密之前,串入的口令会先转化成大写格式的。
void envsspasswd(char * passwd,char * enpasswd,int len)
{
    const char incstr[15]=/"BrianDavidHarry/";
    char passwd1[200];
    int i;
    WORD a;
    WORD b;
    if(len>15)
        return 0;
    memcpy(passwd1,passwd,len);
    memcpy(passwd1+len,incstr,15-len);
    passwd1[15]=0;
    len = 15;
    b = 0;
    a = 0;
    for(i=0;i
    {
        a =  passwd1[i];
        a = a ^ 0x96;
        a = a*(i+1);
        b += a;
    }
    printf(/"%02x/",b);
}

OK,其实我们讲到这里,关于VSS的口令破解就一点意义也没有了,而是在一个思路上,从上面可以看到,其口令只具2位长度,因此肯定存在很多散列一致的口令,因此无需真正找到口令,只需要找到一个具备同样散列的口令就可以了。
当然,如果只是暴力跑的话,效果会比较差的,因为上面这个算法会导致相同位数的散列是比较靠近的,不同位数的散类差距比较大,如果不知道口令的位数,一位的穷局举的话效果并不会很理想。那么如何来确定密码的位数呢?实际根据上面的加密算法我们可以知道其密码散列递增的规律,下面的实现就是根据这个算法可以最优先的找到密码位数,然后在位数以内进行穷举的实现,使得计算的速度非常高:
关键点在于这句:
    d = a - b;
    if((d/num)>154 && (d/num)<250)
因为我们知道,x^80肯定是会大于128的,对于‘0’到‘Z’的可能口令组合,最小生成的都应该大于154。从而判断这个长度是否可能存在可能的解。

int devsspasswd(char enp[4],char * dnp)
{
    const char incstr[15]=/"BrianDavidHarry/";
    int i;
    int j;
    int k;
    long c1;
    long c2;
    long c4;
    int c3;

WORD a;
    WORD b;
    WORD c;
    WORD d;
    WORD e;
    int num;

a = hextoint(enp[2])*16*16*16+hextoint(enp[3])*16*16+hextoint(enp[0])*16+hextoint(enp[1]);
    c3 = /'Z/'-/'0/'+1;

for(i=0;i<15;i++)
    {
        dnp[i]=0;
        b =0;
        for(j=0;j<15-i;j++)
        {
            c = incstr[j];
            c = c ^ 0x96;
            c = c*(j+1+i);
            b += c;
        }
        if(i==0 && b==a)
        {
            printf(/"password is null/n/");
            return 0;
        }
        d = a - b;
        num = 0;
        c2 = 1;
        for(j=0;j
        {
            num = num+j+1;
            c2 = c3*c2;
        }
        if(num>0)
        {
            c1 = 0;            
            if((d/num)>154 && (d/num)<250)
            {
                memset(dnp,/'0/',i);
                Sleep(100);
                do{
                    c4 = 1;
                    for(j=1;j
                    {
                        c4 = c4 * c3;
                        if(c1%c4==0)
                            dnp[j]=/'0/';
                        else
                        {
                            dnp[j]++;
                            break;
                        }
                    }
                    b = 0;
                    for(k=1;k
                    {
                        c = dnp[k];
                        c = c ^ 0x96;
                        c = c*(k+1);
                        b += c;
                    }
                    e=d-b;    
                    
                    if((e^0x96)>=/'0/' && (e^0x96)<=/'Z/')
                    {
                        dnp[0]=(e^0x96);
                        printf(/"%s/n/",dnp);
                        return i;
                    }
                    c1++;
                }while(c1
            }
        }
    }
    return 0;    
}

当然,这个算法对VSS口令破解本身意义不大,拥有um.dat写权限的直接拷贝别人的知道口令的um.dat文件覆盖就可以,或者修改其中的散列,不知道的呢,也可以直接通过共享拷贝数据文件再使用um.dat覆盖或者在vss程序中饶过口令达到图破权限,写这点东西是重点强调一下破解算法的思路

VSS的口令破解算法的思路相关推荐

  1. 老牌破解神器L0phtCrack强势回归 口令破解速度提升500倍

    7年了,随着完全改版的第7版发布,Windows系统下老牌著名破解器L0phtCrack终于强势回归. 该口令破解器首次发布是在19年前,当时迅速风靡黑客圈,并导致微软不得不改变其处理口令安全的方式. ...

  2. 20155220吴思其 实验2 Windows口令破解

    实验目的: 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 实验人数 每组一人 系统环境 windows 实验工具 LC5 SuperDic 实验原理 口令破解方法 ...

  3. 20155207实验2 Windows口令破解

    20155207实验2 Windows口令破解 实验目的 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 实验原理 口令破解方法 口令破解主要有两种方法:字典破解和 ...

  4. # 2017-2018-1 20155336《信息安全技术》实验二——Windows口令破解

    2017-2018-1 20155336<信息安全技术>实验二--Windows口令破解 实验原理 口令破解方法 口令破解主要有两种方法:字典破解和暴力破解. 字典破解是指通过破解者对管理 ...

  5. python编程思维代码_Python编程快速上手——强口令检测算法案例分析

    本文实例讲述了Python强口令检测算法.分享给大家供大家参考,具体如下: 强口令检测 题目如下: 写一个函数,它使用正则表达式,确保传入的口令字符串是强口令.强口令定义:长度不少于8个字符,同时包含 ...

  6. 通过L0phtcrack 7进行账号口令破解

    目录 前言 一 实验目的 二 实验环境 三 原理简介 四 实验步骤 1. 安装l0phtcrack软件 ​2.攻击方开始攻击 总结 前言 学习通过L0phtcrack 7进行账号口令破解,不是让大家侵 ...

  7. 【网络与系统安全实验】口令破解及防御

    [网络与系统安全实验]口令破解及防御 口令的历史与现状 20世纪80年代,当计算机开始在公司里广泛应用时,人们很快就意识到需要保护计算机中的信息.仅用userID标识自己,很容易被其他人得到,出于这个 ...

  8. # 2017-2018-1 20155232《信息安全技术》实验二——Windows口令破解

    2017-2018-1 20155232<信息安全技术>实验二--Windows口令破解 [实验目的] 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 ...

  9. 暴力破解算法思想(2)

    暴力破解算法思想(2) 题目:古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在示 大数的时候,现在看起来简直不能忍受,所以在现代很少使用了.之所以这样,不 是因为发明表示法的人的 ...

  10. 学习使用口令破解工具:hashcat、LC、SamInside

    在学习使用口令破解工具之前,我们要先创建一个用户账号,原理是利用其哈希值进行破解. 很关键的一点是,要在虚拟机里面创建用户!!! 很关键的一点是,要在虚拟机里面创建用户!!! 很关键的一点是,要在虚拟 ...

最新文章

  1. java md5加密32位小写_Java生成MD5的方法,简单封装并转为32位小写
  2. 【算法】算法秋招个人总结
  3. SQL Server Compact的DLL文件介绍
  4. .NET架构小技巧(7)——做好小的项目
  5. WPF的样式(Style)继承
  6. 02 算术、字符串与变量(1)
  7. [cb]SceneView 获取鼠标位置
  8. 群体智能优化算法之蚁群优化算法(ACO)
  9. UNITY游戏开发源码
  10. WMS仓库管理系统---(12)货位库存管理
  11. ubuntu虚拟机ping通内网
  12. Blob和File对象API与兼容性问题
  13. TikTok引流独立站的方式
  14. 医院信息管理系统源码 HIS系统源码
  15. SpringCloud Getway服务网关
  16. Android有线IPV6总结(二):内核中RS与RA的一点学习
  17. C:\KEIL\C51\intrins.h包含不正确的路径。Keil 头文件路径错误
  18. 【腾讯云 Finops Crane 集训营】降本增效利器Crane应用实战
  19. 计算机毕业设计-ssm智能小区管理系统(源码+数据库+文档)社区维修管理系统-小区缴费管理系统javaweb项目
  20. Android颜色透明度16进制表

热门文章

  1. JS手写实现call、apply、bind
  2. High Scalability创始人Todd Hoff:Facebook网络性能的秘密武器
  3. Taulia任命Todd Musselman为首席福祉官
  4. Python创建临时文件和文件夹
  5. PowerVR SDK编译环境的搭建
  6. 《触动人心设计优秀iphone应用》读后感
  7. 从12306.cn谈大网站架构与性能优化
  8. linux常用指令pro,第二章:Linux常用基本命令及常用技巧
  9. vulnhub-Tiki - 类oscp靶机攻略1
  10. 一篇文章学习完RabbitMQ