cmos密码破解原理介绍
有关cmos密码破解及原理
我们的天性就是破坏!!!! …… …… …… …… 哈哈,Sorry,失态了。我叫糖醋排骨,今天由我跟大家上一节破解课,我实在是不讨厌破坏,因为我们要防止一切阻挠我们的东西存在,首先呢,就是可恼的CMOS密码。尽管有很多文章介绍了这方面的知识,我还是想介绍一点与单纯破坏不同的东西以及原理。 首先介绍CMOS,你要是不感兴趣,可以睡觉。 经过我的努力,总算找到了CMOS中128个字节各自的功用(查书查了我一天): 00 ~~ 09 系统时钟 0A ~~ 0D 寄存器状态 0E 诊断状态 (不知道什么意思) 0F 下电状态 (不知道什么意思) 10 软驱类型 11 密码域/保留 (还是不清楚是什么) 12 硬盘类型 14 设备字节 15 ~~ 18 内存 (基本,扩充) 19 ~~ 1A 硬盘参数 2E ~~ 2F 校检和 (非常重要,以后有用!!) 30 ~~ 31 扩充内存 32 世纪值 33 标志码 38 ~~ 3B 密码储存区域 (关键的东东!) 没提到的就都是保留字节。 下面说说最基本的破解方法及原理: debug -o 70 10 -o 71 11 -q 这是流传得最广泛的破解方法,破解率为 99.609375%,这个数字不是胡诌的,在写入的地方总共有256种可能,万一你倒霉到写入的和原来的一样,就等于白干了,所以破解率为255/256为99.609375%。原理在于上面所说的2E~~2F字节储存的内容,它是10~~2D单元的和,每次计算机都要校检,如果不对的话,则需要重新设置。无耻的“黑客”(如果算得上的话)利用了这一点来破解,尽管它也许并不知道原理。其中端口70h是个只写的端口,设置CMOS中数据的读写地址,端口71h就是在70h设置的地址进行读写的端口(很拗口)。上面两句意思是设置地址为10h,然后写入数据11。你也可以用其他的高级语言实现: Basic out 70,10: out 71,11: (输出语句是 out 端口值,写入数据) C/C++ outport(70,10); outport(71,11); (输出函数是 void outport(int,int)) 很遗憾,我只知道Basic和C/C++,而且Basic是初中学的,C++是大学才接触,如果有错的,希望同学们能指出来。 下面就是最精彩的了,密码的加密与破解原理!!请大家坐好,那位同学,请不要乱动,嗯……很好,我喝口水就来,渴死我了,现在是15:15,天气异常的炎热,成都怎么会这样呢…… 上面说了38h~~3Bh是密码储存的区域,具体来说,39h和3Bh长期为零,估计没有什么用处(事实上也是),关键呢,就在38h和3Ah,这两个字节储存了可恶的密码,我们要搞定它!! 有的密码长达7、8位,怎么可以只存在2个字节里呢?原因就是经过了相应的一些处理,方法如下: 假如有一密码,ABCDEFGH,将其按下列公式运算: ┌─────────────────────┐ │ H+4*G+10*F+40*E+100*D+400*C+1000*B+4000*A│ └─────────────────────┘ 结果转化为十六进制,设由低到高位为A B C,那么,A+C就是38h的值,B就是3Ah的值! 至于解密呢,你知道怎么办吗?嗯……那位举手的同学,你说说? 斗鸡眼同学甲:“就是用逆向工程,反算出密码1 旁听的领导乙:“笨蛋,来上这个班的智商怎么这么低,拖出去,毙了!所谓的加密,一般都是用的不可逆的映射,像2的2的X次方等等。为什么是一般呢?因为如果像刚才那个白痴,用可逆的映射也是完全有可能的!所以呢,我们可以用一个古老而又有效的办法,穷举法!反正计算机速度快,很快就试出密码了。” ……两个白痴…… 既然什么都知道了,为什么还要去算密码呢?我们可以自选一个密码,经过运算,然后写回CMOS不就行了吗?程序太简单了,同学们自己做成家庭作业交上来。嗯……时间不早了,我还要看Cartoon Network,好了,下课! 糖醋排骨于2000年7月10日下午3:52 中华技术网整理发布 http://www.asfocus.com http://www.netqu.com