首页
社区
课程
招聘
[求助]主板里面的bin 怎么看啊
发表于: 2013-6-21 11:01 7303

[求助]主板里面的bin 怎么看啊

2013-6-21 11:01
7303
ida打开看怎么都是  000   没数据~~提取是有数据的
System BIOS.bin

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 5
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
楼上有答案了吗?
2013-8-8 14:38
0
雪    币: 5
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个在哪里查看呢?

就是怎么你这段BIN怎么提取出来的?
2013-8-8 15:12
0
雪    币: 219
活跃值: (738)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
4
访问 bios 物理—>线性 —>读—>写 回答完毕
2013-8-8 15:14
0
雪    币: 5
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
等于没回答。

具体点啊!
2013-8-9 04:03
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
6
  invoke MmMapIoSpace,0f0000h,0,64*1024,MmNonCached

物理地址映射为线性地址,返回值就是BIOS的开始地址,大小为10000h(64K)
2013-8-9 21:45
0
雪    币: 5
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我看了。

但是我的保存下来居然没有找到DEL 这个字符串。不是应该有的吗?
2013-8-10 02:20
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
8
每个BIOS不一样  ,不过64K里应该有类似品牌的字符串,用记事本可以看到。
2013-8-10 22:15
0
雪    币: 608
活跃值: (643)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
不一定
最好找到主板的BIOS芯片的型号,找到主板的SMI Port,根据Flash的DataSheet仿写读时序,这样可以把整个主板的BIOS内容全部DUMP出来~
话说AWARD的貌似有源码,捷威的UEFI 2.3.1的Source也Leak了,有心的肯定能找到~
2013-8-10 22:33
0
雪    币: 608
活跃值: (643)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
很多BIOS里面的代码都不止64K,有些主板是SST 25VF080B这个芯片 这个芯片是8Mb的,有1MB的数据,功能模块都以PCI模块形式储存在FLASH里,使用的时候映射地址,不用的时候解除映射~
2013-8-10 22:35
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
11
楼主这个肯定错误的
记事本打开发现下面内容:

嬈^]? N a m e d P i p e   d:\xpsp\base\fs\npfs\create.c   d:\xpsp\base\fs\npfs\create.c   d:\xpsp\base\fs\npfs\create.c   d:\xpsp\base\fs\npfs\create.c 烫烫烫?U嬱冹僥?僥鸖媇V媢W3?E鼚}臬媨$岶P佺  塃X

下面是一个BIOS读取的测试程序:

APP:




.386
.model flat, stdcall
option casemap:none

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; I N C L U D E F I L E S
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

include windows.inc

include kernel32.inc
include user32.inc
include advapi32.inc

includelib kernel32.lib
includelib user32.lib
includelib advapi32.lib



include \RadASM\masm32\Macros\Strings.mac


IOCTL_GET_INFO equ CTL_CODE(FILE_DEVICE_UNKNOWN, 800h, METHOD_BUFFERED, FILE_READ_ACCESS + FILE_WRITE_ACCESS)
; Macro definition for defining IOCTL and FSCTL function control codes. Note
; that function codes 0-2047 are reserved for Microsoft Corporation, and
; 2048-4095 are reserved for customers.
CTL_CODE MACRO DeviceType:=<0>, Function:=<0>, Method:=<0>, Access:=<0>
EXITM %(((DeviceType) SHL 16) OR ((Access) SHL 14) OR ((Function) SHL 2) OR (Method))
ENDM


.const
.data
sysname db "ReadBios.sys",0 ;驱动程序名
device db "ReadBios",0
driver db "ReadBios Driver",0
abyInBuffer db 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,111,128,128,180,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;传输试验数据用
abyOutBuffer db 128*512 dup(0) ;用于存放驱动传回的64kbios数据
name_buffer db 'ReadBios.bin',0 ;读取的bios数据保存到bios_tst.bin
ok_1 db "读取成功,请查看ReadBios.bin",0
dwBytesReturned dd 0
.data?
hFile HANDLE ? ;文件句柄
SizeReadWrite DWORD ? ;文件中实际写入的字节数
.code

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; start
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

start proc uses esi edi

local hSCManager:HANDLE
local hService:HANDLE
local acModulePath[MAX_PATH]:CHAR
local _ss:SERVICE_STATUS
local hDevice:HANDLE

local acVersion[16]:CHAR

; Open a handle to the SC Manager database
invoke OpenSCManager, NULL, NULL, SC_MANAGER_ALL_ACCESS
.if eax != NULL
mov hSCManager, eax

;invoke GetCurrentDirectory, sizeof g_acBuffer, addr g_acBuffer
push eax
invoke GetFullPathName, addr sysname, sizeof acModulePath, addr acModulePath, esp
pop eax

; Install service
invoke CreateService, hSCManager, addr device, addr driver, \
SERVICE_START + SERVICE_STOP + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, \
SERVICE_ERROR_IGNORE, addr acModulePath, NULL, NULL, NULL, NULL, NULL

.if eax != NULL
mov hService, eax

; Driver's DriverEntry procedure will be called
invoke StartService, hService, 0, NULL
.if eax != 0

; Driver will receive I/O request packet (IRP) of type IRP_MJ_CREATE
invoke CreateFile, $CTA0("\\\\.\\ReadBios"), GENERIC_READ + GENERIC_WRITE, \
0, NULL, OPEN_EXISTING, 0, NULL

.if eax != INVALID_HANDLE_VALUE
mov hDevice, eax

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

; Driver will receive IRP of type IRP_MJ_DEVICE_CONTROL
invoke DeviceIoControl, hDevice, IOCTL_GET_INFO, addr abyInBuffer, sizeof abyInBuffer, addr abyOutBuffer, sizeof abyOutBuffer, addr dwBytesReturned, NULL

.if ( eax != 0 ) && ( dwBytesReturned != 0 )


invoke MessageBox, NULL, addr ok_1, $CTA0("ReadBios"), MB_OK + MB_ICONINFORMATION

invoke CreateFile,ADDR name_buffer,\
GENERIC_READ or GENERIC_WRITE ,\
FILE_SHARE_READ or FILE_SHARE_WRITE,\
NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,\
NULL
mov hFile,eax
invoke WriteFile,hFile,ADDR abyOutBuffer,128*512,\
ADDR SizeReadWrite,NULL
invoke CloseHandle,hFile

tt_3:
.else
invoke MessageBox, NULL, $CTA0("发送控制失败."), NULL, MB_OK + MB_ICONSTOP
.endif

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


invoke CloseHandle, hDevice ; Driver will received IRP of type IRP_MJ_CLOSE
.else
invoke MessageBox, NULL, $CTA0("Device is not present."), NULL, MB_ICONSTOP
.endif

invoke ControlService, hService, SERVICE_CONTROL_STOP, addr _ss
; DriverUnload proc in our driver will be called
.else
invoke MessageBox, NULL, $CTA0("Can't start driver."), NULL, MB_OK + MB_ICONSTOP
.endif

invoke DeleteService, hService
invoke CloseServiceHandle, hService
.else
invoke MessageBox, NULL, $CTA0("Can't register driver."), NULL, MB_OK + MB_ICONSTOP
.endif
invoke CloseServiceHandle, hSCManager
.else
invoke MessageBox, NULL, $CTA0("Can't connect to Service Control Manager."), NULL, MB_OK + MB_ICONSTOP
.endif

invoke ExitProcess, 0

start endp

end start




Driver 核心代码:



;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;DispatchControlEx  驱动处理子程序,在应用程调用ControlService时被调用
;五个参数分别为用户层的控制代码,系统数据缓存,用户层输入缓存长度,用户层输出缓存长度,实际写出长度 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DispatchControlEx proc  uses  ebx ecx  edi esi  dwIoControlCode ,pSystemBuffer,pOutputBuffer,outBufLength,dwBytesRetLength
 
 LOCAL dwBytesReturned 
 mov dwBytesReturned ,0
 
 
  ;注意:必须为下面3个返回值
  ; STATUS_INVALID_DEVICE_REQUEST   ;错误
  ; STATUS_BUFFER_TOO_SMALL  ;输出缓冲区长度不足
  ; STATUS_SUCCESS  ;ok
  
  ; invoke PsGetCurrentProcess  ;取用户层进程ID
  ; invoke PsGetCurrentThread   ;取用户层线程ID
   
 
   ;=======================下面是个演示程序,读取主板BIOS信息并输出到用户缓存(64*1024)=======================
   
   .if dwIoControlCode==IOCTL_GET_INFO
   
         .if outBufLength>=10000h 
       
       
              invoke MmMapIoSpace,0f0000h,0,64*1024,MmNonCached ;物理地址映射为线性地址,返回值在eax
               mov esi,eax     ;源串指针
               push pSystemBuffer  
               pop edi            ;目的串指针
                mov ecx,10000h   ; 循环次数,此处表示读取字节数64K
               rep movsb      ;重复 字符串传送 
   ; 
                mov dwBytesReturned,10000h     ;实际写出长度,是系统从系统缓冲区拷贝到用户输出缓存区的拷贝长度,因此非常重要
    
               mov eax, STATUS_SUCCESS        ;操作成功      
       
           .else
       
                 mov eax,STATUS_BUFFER_TOO_SMALL ;缓存不足
                                                                
           .endif     
    
     .else
               
        mov eax ,STATUS_INVALID_DEVICE_REQUEST     ;操作失败
        
         
   .endif
   
   
   
   
     
       
    
 
   
   
   ;====================无需修改下面的代码=======================
   push dwBytesReturned
   mov ebx,dwBytesRetLength   
   pop [ebx]
  
   ret
             
DispatchControlEx endp      



上传的附件:
2013-8-16 15:50
0
游客
登录 | 注册 方可回帖
返回
//