BIOS级的VB,高手进哟

huaxiamengqing 2010-06-02 11:37:05
我想请教如何写自动定时开机程序,声明本人BIOs设置里面没有这一项,我主要是想了解一下CIH病毒的原理,以及有没可能用VB实现!写bios恐怕中国没几人吧。
...全文
252 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
huaxiamengqing 2010-06-10
  • 打赏
  • 举报
回复
几天没来,讨论的这么热闹,小弟学习了。路漫漫其修远兮,吾将上下而求索...
赵4老师 2010-06-09
  • 打赏
  • 举报
回复
读BIOS用你们这么费劲吗?!
c:\>debug
-n bios.mem
-r bx
1
-r cx
0
-w f000:0
-q
c:\>dir bios.mem
2010-06-09 11:33 65,536 BIOS.MEM
tzwsoho 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 mydo 的回复:]
你的这段代码在2k3以后无效,估计在xp sp3下也无效
这些系统增加了安全性,不允许以物理内存的方式进行引用了。
[/Quote]

恩恩恩。。。。想想貌似也对。。。。NtDebugControl一类的Native API在SP3下都不好使了。。。
大熊猫侯佩 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 tzwsoho 的回复:]

读BIOS的C代码,直接在Ring3下读!!!

C/C++ code
// biossave.cpp : 定义应用程序的入口点。
//
#define MAX_LOADSTRING 100

typedef struct _UNICODE_STRING {
USHORT Length;//长度
USHORT MaximumLength;//最大长度
PWSTR Buff……
[/Quote]

你的这段代码在2k3以后无效,估计在xp sp3下也无效
这些系统增加了安全性,不允许以物理内存的方式进行引用了。
舉杯邀明月 2010-06-08
  • 打赏
  • 举报
回复
.....................
liguicd 2010-06-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huaxiamengqing 的回复:]

雪里面?
[/Quote]

www.pediy.com
tzwsoho 2010-06-07
  • 打赏
  • 举报
回复
17楼代码我转来的。。。原作者不详。。。原工程文件名为biossave。。。特意声明下。。。
tzwsoho 2010-06-07
  • 打赏
  • 举报
回复
读BIOS的C代码,直接在Ring3下读!!!

// biossave.cpp : 定义应用程序的入口点。
//
#define MAX_LOADSTRING 100

typedef struct _UNICODE_STRING {
USHORT Length;//长度
USHORT MaximumLength;//最大长度
PWSTR Buffer;//缓存指针,访问物理内存时,此处指向UNICODE字符串"\device\physicalmemory"
} UNICODE_STRING,*PUNICODE_STRING;


typedef struct _OBJECT_ATTRIBUTES {
ULONG Length;//长度 18h
HANDLE RootDirectory;// 00000000
PUNICODE_STRING ObjectName;//指向对象名的指针
ULONG Attributes;//对象属性00000040h
PVOID SecurityDescriptor; // Points to type SECURITY_DESCRIPTOR,0
PVOID SecurityQualityOfService; // Points to type SECURITY_QUALITY_OF_SERVICE,0
} OBJECT_ATTRIBUTES;
typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES;

typedef DWORD (__stdcall *ZWOS)(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
typedef DWORD (__stdcall *ZWMV)(HANDLE,HANDLE,PVOID,ULONG,ULONG,PLARGE_INTEGER,PSIZE_T,DWORD,ULONG,ULONG);
typedef DWORD (__stdcall *ZWUMV)(HANDLE,PVOID);


// 全局变量:
HINSTANCE hInst; // 当前实例
TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名


// 此代码模块中包含的函数的前向声明:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
// TODO: 在此放置代码。
MSG msg;
HACCEL hAccelTable;
UNICODE_STRING struniph;
OBJECT_ATTRIBUTES obj_ar;
ZWOS ZWopenS;
ZWMV ZWmapV;
ZWUMV ZWunmapV;
HANDLE hSection;
HMODULE hinstLib;
DWORD ba;
LARGE_INTEGER so;
SIZE_T ssize;
so.LowPart=0x000f0000;//物理内存的基址,就是f000:0000
so.HighPart=0x00000000;
ssize=0xffff;
wchar_t strPH[30]=L"\\device\\physicalmemory";
FILE *f1;

// 初始化全局字符串
//变量初始化
ba=0;//联系后的基址将在这里返回
struniph.Buffer=strPH;
struniph.Length=0x2c;//注意大小是按字节算
struniph.MaximumLength =0x2e;//也是字节
obj_ar.Attributes =64;//属性
obj_ar.Length =24;//OBJECT_ATTRIBUTES类型的长度
obj_ar.ObjectName=&struniph;//指向对象的指针
obj_ar.RootDirectory=0;
obj_ar.SecurityDescriptor=0;
obj_ar.SecurityQualityOfService =0;
//读入ntdll.dll,得到函数地址
hinstLib = LoadLibrary("ntdll.dll");
ZWopenS=(ZWOS)GetProcAddress(hinstLib,"ZwOpenSection");
ZWmapV=(ZWMV)GetProcAddress(hinstLib,"ZwMapViewOfSection");
ZWunmapV=(ZWUMV)GetProcAddress(hinstLib,"ZwUnmapViewOfSection");
//调用函数,对物理内存进行映射
ZWopenS(&hSection,4,&obj_ar);
ZWmapV((HANDLE)hSection,(HANDLE)0xffffffff,&ba,0,0xffff,&so,&ssize,1,0,2);
f1=fopen("bios.mem","wb+");
fwrite((void*)ba,65536,1,f1);
fclose(f1);
MessageBox(NULL,"Bios saved to bios.mem!","Save OK",MB_OK);
return 0;

}
用户 昵称 2010-06-07
  • 打赏
  • 举报
回复
见过vb翻译汇编指令到机器码,vb写bios可能用得着。
无·法 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huaxiamengqing 的回复:]

雪里面?
[/Quote]。。。
icansaymyabc 2010-06-06
  • 打赏
  • 举报
回复
VB非常强大,可以写出那种可以毁灭太阳系的程序。
大熊猫侯佩 2010-06-02
  • 打赏
  • 举报
回复
你的需求用VB本身完成实在是使错劲了,无外乎是一个Core Driver + 接口dll

然后VB调用的问题。换句话说,VB只管界面上的事。

大熊猫侯佩 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 huaxiamengqing 的回复:]
写bios恐怕中国没几人吧。
[/Quote]

大错特错!不仅有而且多了去了
贝隆 2010-06-02
  • 打赏
  • 举报
回复
这个不会,帮顶!!!
yangxie5201314 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huaxiamengqing 的回复:]

雪里面?
[/Quote]
看雪,My God~~~
chinaboyzyq 2010-06-02
  • 打赏
  • 举报
回复
VB里嵌入机器码,去写BIOS应该是可以的,但没有测试过。

N久前我用GWBASIC在dos下写过286的BIOS
N久以前我用QB4.5在dos下写486的BIOS

转到widnows后没有写过BIOS

VB应该写不出CIH一样的病毒,因为它是用汇编写的大小1K左右。
CIH擦除CMOS是有前提条件的,那就是这CMOS是电可擦写的。

VB写底层的东西不是好工具,楼主想玩底层的东西去学汇编、C,VC...
huaxiamengqing 2010-06-02
  • 打赏
  • 举报
回复
雪里面?
神马都能聊 2010-06-02
  • 打赏
  • 举报
回复
看雪里面有一些人可以,这里不知道有没人会。
threenewbee 2010-06-02
  • 打赏
  • 举报
回复
(1)cih病毒没有bios的功能,它只是用垃圾数据填充eeprom,破坏bios,之所以能写入eeprom,是因为利用win9x vxd的一个漏洞,将自身提升到特权指令权限。
(2)bios经过多年的发展,生存下来的只有award ami等几个,一般都是主板厂家拿到award ami的源代码和开发包,结合主板功能做二次开发。
现在的bios也是很模块化的,个人往bios里面集成一个驱动,或者导入一个开机画面也不是难事。
(3)如果你想学bios开发,必须对主板自身有研究,而且显然你要有一台rom编程器,一个交叉调试平台(用另一台电脑调试开发主板),你应该懂汇编……这些和VB没有关系。
个人觉得和修改bios花费的硬件投入还有人工成本比,你直接买一个支持自动开机的主板就很好。大部分主板都是支持的。
加载更多回复(3)

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧