如何在windows下破解CMOS密码
如题
我用C写的破解CMOS密码的小工具,为什么在windows下执行无效,在DOS下却可以?
有什么解决的办法?
问题点数:50、回复次数:30Top
1 楼snowbirdfly(专心搞好嵌入式~~~)回复于 2006-01-03 19:14:11 得分 0
没有做过~~
帮顶一下~~~Top
2 楼qifa(DoItNow)回复于 2006-01-03 20:57:27 得分 0
顶一下Top
3 楼eleek(宿迁人自己的社区(www.sqren.cn))回复于 2006-01-03 21:14:20 得分 0
能看看代码嘛?Top
4 楼libotudou(土豆)回复于 2006-01-03 21:28:52 得分 0
就是,看看源码,学习一下。
:)Top
5 楼FindFullMoon(寻找自己)回复于 2006-01-03 21:40:42 得分 5
是不是因为WIN32的保护模式呀
DOS程序在WINDOWS 2000以上的机器上应该都是系统用类似虚拟的方式支持的
所以支持得也是相当有限的
不能运行我想也是可以理解的吧?Top
6 楼yzx1983(捕风捉影)回复于 2006-01-04 09:26:59 得分 5
当然,访问cmos空间需要有访问物理地址的权限。
dos下没有任何的内存保护机制,你可以任意访问你想要访问的地址
但是windows自95之后就是32位的操作系统,用上了cpu的优先级保护,你的代码访问的地址不过是系统虚拟出来的线性地址,不是真正的物理地址,因此你在dos下有效的程序放到xp里,不但不能达到效果,十有八九还会出一堆访存违例的错误提示。Top
7 楼DiabloWalkOnTheEarth(我想到个绝妙的昵称,只是地方太小,写不下)回复于 2006-01-04 09:42:38 得分 0
用户态就不要想读写70,71端口鸟, 在95/98下应该还可以. 在NT/2K/XP下都是IO敏感指令, 会GP地. 找个端口读写的驱动装上就可以了, 实在找不到就自己写个小驱动搞这种无聊的东西 ...Top
8 楼cyberHunK(→迈克·老猫←)回复于 2006-01-04 10:53:07 得分 0
方法很多!
最直接简单的是放电,把主板COMS电池卸下来短接一下电池插座的两个弹簧叉!不过这都是以前的方法,现在主板上应该直接给跳线的,看下说明书!
再就是可以把71、70的端口给冲掉!不过这种方法,我在98之后就没有使用过!现在的操作系统应该带有保护!
具体实现方法:
c:\debug
-o 70 21
-o 71 20
-qTop
9 楼cyberHunK(→迈克·老猫←)回复于 2006-01-04 10:55:37 得分 0
我用C写的破解CMOS密码的小工具,为什么在windows下执行无效,在DOS下却可以?
/////////////////////////////////////////////////////////////
我倒!原来要问的是这个!
楼主肯定是冲71、70这个端口了!要是不行,就别想了,现在的操作系统不跟以前了!Top
10 楼fiftymetre(50米深蓝)回复于 2006-01-04 11:16:54 得分 0
当系统自检完毕,准备引导Windows时按下(P8)键,选择“Safe mode command prompt only”(安全命令模式),在DOS状态下(也可在Windows95的DOS下),键入以下命令:
c:>copy con cmos.com
然后进入编辑状态,一手按住[Alt]键,另一只手在小键盘(按键盘上面那—排数字键是没有作用的)上敲击下列数字串,再同时抬起双手,如此反复:179,55,136,216, 230,112,176,32,230,113,254,195,128,251,64,117,241,195。输入过程中,每松开一次[Alt]键屏幕上都会出现一个乱字符,不必管它。完成后,再按[Ctrl+Z]或[F6]键保存,得到一个新的程序Cmos.com。
直接运行Yk.com这个文件,屏幕上应该没有任何提示信息,然后重新启动计算机即可清除CMOS里的密码。当然,CMOS里的其他设置也会同时被清除,这就需要重新设置了。
可以用“Type Corm.com”命令显示文件内容,显示的内容应为ASCII码Top
11 楼yzx1983(捕风捉影)回复于 2006-01-04 11:22:37 得分 0
50m 回帖不看贴……Top
12 楼iamcaicainiao(老菜,长征)回复于 2006-01-04 11:25:46 得分 0
进入安全模式,运行你的程序看看。Top
13 楼jsjjms(专心研究嵌入式)回复于 2006-01-04 11:45:29 得分 0
直接放电就可以,dos和windows运行的模式可能不一样.Top
14 楼yzx1983(捕风捉影)回复于 2006-01-04 12:01:39 得分 5
晕了,想起一个问题,楼主你不会是把dos下编好的exe直接在windows下运行了吧?那样是在windows虚拟出来的一个16位系统中跑的,更加不着边际了。Top
15 楼qinxiaolin(绝口不提爱你)回复于 2006-01-05 11:08:35 得分 5
你先用一个软盘做一个dos启动盘,然后拷贝一个masm 里的debug 到这个软盘里面
!
按下面的方法操作:
cmos中数据的访问是通过端口70H和71H实现的,70H是一个字节的地址端口,用来设置cmos中数据的地址。
71H是用来读写端口70H设置的对应单元的数据的。。
方法:
进入debug
直接输入:
o 70 10
o 70 10
或者
o 70 16
o 71 16
或者
o 70 10
o 71 ff
最后用q退出debug
重启计算机,按del不用密码进入cmos.
上面的3个东西你逐个试试看,我以前用过的!好用的!
Top
16 楼qifa(DoItNow)回复于 2006-01-05 20:11:46 得分 0
C程序是用TC编译的,在windows下确实可以运行,也确实可以读取出一部分数据,(至少读出来的日期和时间是对的),不过后面的数据似乎就不太正确了,把汇编代码嵌入到VC当中运行就出问题,说是什么权限指令之类的,
====================
DiabloWalkOnTheEarth(WorldOfWg( 狗城是个烂代理 )) ( ) 说:找个端口读写的驱动装上,要什么样的端口读写驱动?
=========================
下面是在TC下的读CMOS数据的代码:
for(i=0;i<MAX_CMOS_SIZE;i++)
{
outportb(0x70,i);
buf[i]=inportb(0x71);
}Top
17 楼qifa(DoItNow)回复于 2006-01-06 16:52:09 得分 0
顶一下Top
18 楼yzx1983(捕风捉影)回复于 2006-01-06 17:12:30 得分 0
用tc编好的程序只会是16位的,windows为了兼容dos下的应用程序,虚拟出了一个“16位操作系统”,你的程序只是在这个虚拟的系统下运行的,无法操作真正的端口,读出来的cmos数据显然也是window为你准备好的,不是真的cmos数据。Top
19 楼qifa(DoItNow)回复于 2006-01-07 14:27:31 得分 0
看来是不能在windows下读取了,谢谢各位了Top
20 楼yzx1983(捕风捉影)回复于 2006-01-07 15:59:34 得分 0
当然不是完全没有办法,你所需要的仅仅是获取ring0级权限。
有兴趣的话可以研究一下臭名昭著的CIH病毒的代码。
比较正统的方法是编写驱动。Top
21 楼qifa(DoItNow)回复于 2006-01-07 17:24:16 得分 0
========================
当然不是完全没有办法,你所需要的仅仅是获取ring0级权限。
有兴趣的话可以研究一下臭名昭著的CIH病毒的代码。
比较正统的方法是编写驱动。
========================
驱动我不怎么会写啊,你能说说具体的实现过程吗?大概讲述一下即可Top
22 楼JIABAOYU111()回复于 2006-01-07 19:23:17 得分 0
xdncgbm,Top
23 楼qifa(DoItNow)回复于 2006-01-07 23:54:51 得分 0
=============JIABAOYU111()===========
xdncgbm,-
===============\
什么东东??
Top
24 楼mostideal(三甲)回复于 2006-01-08 10:51:59 得分 0
楼上有好多办法应该都可行的.
upTop
25 楼soft_2008(冬天到了,春天还远吗?)回复于 2006-01-08 12:33:22 得分 0
hehe...................
用C调用DEBUG,传入
c:\debug
-o 70 21
-o 71 20
-q
或者索性写成ASM
Top
26 楼Kenmark(fenix)回复于 2006-01-08 17:03:49 得分 5
#include <stdio.h>
#include <dos.h>
#include <conio.h>
main()
{
int i;
char result;
char temp=0;
printf("The award bios password is:");
outportb(0x70,0x1d);
result=inportb(0x71);
for(i=6;i>=0;i-=2)
{
temp=result;
temp>>=i;
temp=temp&0x03;
printf("%d",temp);
}
outportb(0x70,0x1c);
result=inportb(0x71);
for(i=6;i>=0;i-=2)
{
temp=result;
temp>>=i;
temp=temp&0x03;
printf("%d",temp);
}
return 0;
}
屏幕输出的就是密码Top
27 楼darwin001(天下无钱)回复于 2006-01-08 18:25:30 得分 0
楼上的程序,通不过。
--------------------Configuration: 1 - Win32 Debug--------------------
Compiling...
1.cpp
E:\Works\1.cpp(25) : error C2065: 'outportb' : undeclared identifier
E:\Works\1.cpp(26) : error C2065: 'inportb' : undeclared identifier
Error executing cl.exe.
1.obj - 2 error(s), 0 warning(s)
Top
28 楼qifa(DoItNow)回复于 2006-01-09 16:48:15 得分 0
=====================
晕~~,这些都是在DOS下用的,我都会了
我要的是能在windows下的实现啊
=====================
== darwin001(天下无钱)==
outportb()和inportb()是TC的库函数
在VC下是_outp()和_inp()【conio.h】,注:只是为了兼容windows95的而保留的,
在NT系统运行会出错!
/////////////////////////////////
DiabloWalkOnTheEarth(WorldOfWg)说要用驱动实现,不知道是怎么弄的?Top
29 楼DiabloWalkOnTheEarth(我想到个绝妙的昵称,只是地方太小,写不下)回复于 2006-01-09 17:20:11 得分 25
WIN 下的驱动都一个模子印出来的, 你随便找个驱动改改就是, RW 例程就不用了, 就写个 IOCTL 例程, 实现两个IOCTL , 一个 READ_PORT , 一个 WRITE_PORT . 在驱动里,如果你 RP 比较好就调 READ_PORT_UCHAR , WRITE_PORT_UCHAR , 如果觉得不爽就直接嵌汇编 in , out 就是.
然后写一个 ring3 的程序, CreateFile 打开你的驱动, 就调 DeviceIoControl 读写端口就是.Top
30 楼qifa(DoItNow)回复于 2006-01-24 18:02:40 得分 0
多谢:
DiabloWalkOnTheEarth(WorldOfWg( 狗城是个烂代理 )) ( )
呵呵,搞定了Top




