Part of Slepp's ProjectsPastebinTURLImagebinFilebin
Feedback -- English French German Japanese
Create Upload Newest Tools Donate

Advertising

Paste Description for Kon-B00t VGA Code

Kon B00t VGA Code

reverse engineered by Peter Kleissner

Kon-B00t VGA Code
Sunday, July 26th, 2009 at 8:21:59am UTC 

  1. ; Kon-B00t VGA display code
  2. ; executed at 0000h:2C00h
  3.  
  4. ; es:bx = 9XXXh:0000h, 41 KB allocated memory & 128 sectors read in there, data
  5. ;   2 sectors     from sector LBA 10
  6. ;   126 sectors   from sector LBA 12
  7. ;   128 sectors = 64 KB, most probably some picture data
  8. ; ds:0000h = picture data (like es)
  9.  
  10. ; this module handles VGA display
  11.  
  12. 00000000  90                nop
  13.  
  14. ; display the initial picture (the picture data is passed in ds:0000h)
  15. 00000001  E8B300            call word Display_Raw_Picture
  16. 00000004  E80201            call word Clear_768_bytes_Buffer                    ; clear 768 bytes after the picture
  17.  
  18. ; get the current video mode
  19. 00000007  B40F              mov ah,0Fh                                          ; Function 0Fh = Get Current Video Mode
  20. 00000009  CD10              int 0x10                                            ; Video Interrupt, al = display mode, bh = active page
  21. 0000000B  50                push ax                                             ; remember the display mode (al)
  22. 0000000C  1E                push ds
  23.  
  24. ; set the video mode to 13h = T  40x25  9x16  360x400   16   8   B800 VGA
  25. 0000000D  B81300            mov ax,0013h                                        ; Function 00h = Set Video Mode
  26. 00000010  CD10              int 0x10
  27.  
  28. ; reset the palette using the zeroed 768 bytes
  29. 00000012  E8DB00            call word Set_VGA_Palette
  30.  
  31. ; display the picture using the new video mode
  32. 00000015  E89F00            call word Display_Raw_Picture
  33.  
  34. ; set a new palette
  35. 00000018  33DB              xor bx,bx                                           ; palette multipler = 0+
  36. Loop_Palette_1:
  37. 0000001A  E85701            call word Wait_For_Vertical_Retrace_Sync
  38. 0000001D  E82301            call word Clone_Palette
  39. 00000020  E8CD00            call word Set_VGA_Palette
  40. 00000023  B80A00            mov ax,10
  41. 00000026  E8EE00            call word Wait_Refresh_Cycle                        ; wait 10 refresh cycles
  42. 00000029  43                inc bx                                              ; next time
  43. 0000002A  83FB20            cmp bx,byte +0x20                                   ; 20 times
  44. 0000002D  75EB              jnz Loop_Palette_1
  45.  
  46. 0000002F  E85001            call word Get_Font_Pointer
  47. 00000032  33DB              xor bx,bx
  48.  
  49. Show_User_Interface_Animation:
  50. 00000034  E85B01            call word Display_KryptosLogic_Message              ; display the message
  51. 00000037  B8F000            mov ax,0xf0
  52. 0000003A  E8DA00            call word Wait_Refresh_Cycle                        ; wait 240 refresh cycles
  53. 0000003D  1E                push ds
  54. 0000003E  06                push es
  55. 0000003F  1F                pop ds                                              ; set ds to es
  56. 00000040  E87400            call word Display_Raw_Picture
  57. 00000043  1F                pop ds
  58. 00000044  43                inc bx                                              ; multiplier for the displayed message position
  59. 00000045  83FB0A            cmp bx,byte +0xa                                    ; within range (10)?
  60. 00000048  7C02              jl Within_Range
  61. 0000004A  33DB              xor bx,bx                                           ; otherwise wrap around
  62. Something_1:
  63. 0000004C  B401              mov ah,0x1                                          ; 01h Check For Keystroke
  64. 0000004E  CD16              int 0x16
  65. 00000050  74E2              jz Show_User_Interface_Animation                    ; if not, repeat
  66. 00000052  1F                pop ds
  67.  
  68. ; set another palette
  69. 00000053  BB2000            mov bx,0x20                                         ; palette multiplier = 32-
  70. Loop_Palette_2:
  71. 00000056  E81B01            call word Wait_For_Vertical_Retrace_Sync
  72. 00000059  E8E700            call word Clone_Palette
  73. 0000005C  E89100            call word Set_VGA_Palette
  74. 0000005F  B80A00            mov ax,10
  75. 00000062  E8B200            call word Wait_Refresh_Cycle                        ; wait 10 refresh cycles
  76. 00000065  4B                dec bx                                              ; next time
  77. 00000066  75EE              jnz Loop_Palette_2
  78.  
  79. ; wait for a keypress
  80. 00000068  32E4              xor ah,ah                                           ; Function 00h = Get Keystroke
  81. 0000006A  CD16              int 0x16                                            ; Keyboard Interrupt
  82.  
  83. ; reset to the original video mode
  84. 0000006C  58                pop ax                                              ; restore the original mode
  85. 0000006D  B400              mov ah,0x0                                          ; Function 00h = Set Video Mode
  86. 0000006F  CD10              int 0x10                                            ; Video Interrupt
  87.  
  88. ; return to the boot sector
  89. 00000071  6A00              push byte +0x0                                      ; segment = 0000h
  90. 00000073  68937C            push word 0x7c93                                    ; offset = 7C93h
  91.  
  92. 00000076  CB                retf
  93.  
  94.  
  95. ; some interesting data:
  96. 00000077  FPU_Data_1        dw  00B4h
  97. 00000079  FPU_Data_2        dw  0000h
  98. 0000007B  FPU_Data_3        dw  0004h
  99. 0000007D  FPU_Data_4        dw  0005h
  100. 0000007F  FPU_Data_5        dw  0130h               ; some pixel position multiplier
  101. 00000081  FPU_Data_6        dw  0005h
  102.  
  103. ; some interesting FPU function:
  104. 00000083  9BDBE3            finit
  105. 00000086  2EDF06772C        fild word [cs:FPU_Data_1]
  106. 0000008B  D9EB              fldpi
  107. 0000008D  DEF9              fdivp st1
  108. 0000008F  2EDF067D2C        fild word [cs:FPU_Data_4]
  109. 00000094  DEC9              fmulp st1
  110. 00000096  2EDF067F2C        fild word [cs:FPU_Data_5]
  111. 0000009B  DEC9              fmulp st1
  112. 0000009D  2EDF06812C        fild word [cs:FPU_Data_6]
  113. 000000A2  DEC1              faddp st1
  114. 000000A4  D9FE              fsin
  115. 000000A6  2EDF067B2C        fild word [cs:FPU_Data_3]
  116. 000000AB  DEC9              fmulp st1
  117. 000000AD  2EDF1E792C        fistp word [cs:FPU_Data_2]
  118. 000000B2  2EA1792C          mov ax,[cs:FPU_Data_2]                              ; return value in ax
  119. 000000B6  C3                ret
  120.  
  121.  
  122. Display_Raw_Picture:
  123.  
  124. ; copys a raw picture from ds:0000h to A000h:0000h
  125. ; picture must be 360*400 resolution with 4 bits per pixel
  126.  
  127. 000000B7  06                push es                                             ; of course store register contents
  128. 000000B8  60                pushaw
  129.  
  130. 000000B9  B800A0            mov ax,0A000h                                       ; = VGA buffer
  131. 000000BC  8EC0              mov es,ax                                           ; es will point to it
  132.  
  133. 000000BE  33FF              xor di,di                                           ; destination = A000h:0000h
  134. 000000C0  33F6              xor si,si                                           ; source = ds:0000h
  135. 000000C2  B9007D            mov cx,0x7d00                                       ; size = 32000 * 2 bytes
  136. 000000C5  FC                cld
  137. 000000C6  F3A5              rep movsw                                           ; copy!
  138.  
  139. 000000C8  61                popaw                                               ; restore the register contents
  140. 000000C9  07                pop es
  141. 000000CA  C3                ret
  142.  
  143.  
  144. Erase_VGA_memory:                                                               ; (unused)
  145.  
  146. ; erasing the VGA memory
  147. 000000CB  06                push es
  148. 000000CC  60                pushaw
  149. 000000CD  B800A0            mov ax,0A000h                                       ; = VGA buffer
  150. 000000D0  8EC0              mov es,ax
  151. 000000D2  33FF              xor di,di
  152. 000000D4  33C0              xor ax,ax                                           ; store zeroes
  153. 000000D6  B9007D            mov cx,0x7d00                                       ; size = 32000 * 2 bytes
  154. 000000D9  FC                cld
  155. 000000DA  F3AB              rep stosw
  156.  
  157. 000000DC  61                popaw                                               ; restore the register contents
  158. 000000DD  07                pop es
  159.  
  160. 000000DE  C3                ret
  161.  
  162.  
  163. Set_VGA_Palette_2:                                                              ; (unused)
  164. ; sets a new palette (source = ds:FC00h) using the Digital-Analog Converter Registers
  165. 000000DF  32C0              xor al,al                                           ; register zero = Palette
  166. 000000E1  BAC803            mov dx,0x3c8                                        ; 3C8h  PEL Address Register
  167. 000000E4  EE                out dx,al                                           ; select register 0, writing palette to data port
  168. 000000E5  42                inc dx                                              ; 3C8h  PEL Address Register
  169. 000000E6  B90003            mov cx,768                                          ; data (palette) size = 768 bytes
  170. 000000E9  BE00FC            mov si,0xfc00                                       ; ds:FC00h (FF00h was the first palette)
  171. 000000EC  F36E              rep outsb                                           ; write out
  172. 000000EE  C3                ret
  173.  
  174. 000000EF  C3                ret                                                 ; JUNK
  175.  
  176.  
  177. Set_VGA_Palette:
  178. ; sets a new palette (source = ds:FF00h) using the Digital-Analog Converter Registers
  179. 000000F0  1E                push ds
  180. 000000F1  8CD8              mov ax,ds                                           ; get data segment
  181. 000000F3  05F00F            add ax,0xff0                                        ;  + FF0h, =  + 63,75 KB
  182. 000000F6  BE0000            mov si,0x0                                          ; offset = 0000h
  183. 000000F9  8ED8              mov ds,ax                                           ; segment = somewhere at end of memory + 0FF0h
  184. 000000FB  32C0              xor al,al                                           ; register zero = Palette
  185. 000000FD  BAC803            mov dx,0x3C8                                        ; 3C8h  PEL Address Register
  186. 00000100  EE                out dx,al                                           ; select register 0, writing palette to data port
  187. 00000101  42                inc dx                                              ; 3C9h  PEL Data Register
  188. 00000102  B90003            mov cx,768                                          ; data (palette) size = 768 bytes
  189. 00000105  F36E              rep outsb                                           ; write out!
  190. 00000107  1F                pop ds
  191. 00000108  C3                ret
  192.  
  193.  
  194. Clear_768_bytes_Buffer:
  195. ; clearing es:di
  196. 00000109  06                push es                                             ; store es even it won't be modified
  197. 0000010A  8CC0              mov ax,es                                           ;   this is a joke
  198. 0000010C  8EC0              mov es,ax                                           ;   is it (these 2 instructions have no effect)
  199. 0000010E  B90003            mov cx,768                                          ; size = 768 bytes
  200. 00000111  32C0              xor al,al                                           ; overwrite it with zeroes
  201. 00000113  F3AA              rep stosb
  202. 00000115  07                pop es
  203. 00000116  C3                ret
  204.  
  205.  
  206. Wait_Refresh_Cycle:
  207. ; waits for refresh cycles, must be eax * 19E5h / 64h times
  208. 00000117  60                pushaw
  209. 00000118  66BBE5190000      mov ebx,0x19e5
  210. 0000011E  66B964000000      mov ecx,0x64
  211. 00000124  66F7E3            mul ebx                                             ; * 19E5h
  212. 00000127  66F7F1            div ecx                                             ; / 64h
  213. 0000012A  668BC8            mov ecx,eax
  214. 0000012D  E461              in al,0x61                                          ; System Control Port
  215. 0000012F  2410              and al,00010000b                                    ; bit 4: toggles with each refresh request
  216. 00000131  8AE0              mov ah,al
  217. Wait_Refresh_Cycle_Loop:
  218. 00000133  E461              in al,0x61                                          ; System Control Port
  219. 00000135  2410              and al,00010000b                                    ; bit 4: toggles with each refresh request
  220. 00000137  3AC4              cmp al,ah                                           ; always a full refresh cycle (1 to 0 and 0 to 1)
  221. 00000139  74F8              jz Wait_Refresh_Cycle_Loop
  222. 0000013B  8AE0              mov ah,al
  223. 0000013D  6649              dec ecx                                             ; in a loop
  224. 0000013F  75F2              jnz Wait_Refresh_Cycle_Loop
  225. 00000141  61                popaw
  226. 00000142  C3                ret
  227.  
  228.  
  229. Clone_Palette:
  230. ; bl = multiplier (x16) for each palette color
  231. 00000143  06                push es                                             ; of course store segment registers
  232. 00000144  1E                push ds
  233. 00000145  33C0              xor ax,ax                                           ; (junk code)
  234. 00000147  8CC0              mov ax,es
  235. 00000149  05F00F            add ax,0xff0                                        ;  + FF0h, palette 1
  236. 0000014C  BF0000            mov di,0x0                                          ; (destination offset = 0000h)
  237. 0000014F  8EC0              mov es,ax
  238. 00000151  8CD8              mov ax,ds
  239. 00000153  05C00F            add ax,0xfc0                                        ;  + FC0h, palette 2
  240. 00000156  BE0000            mov si,0x0                                          ; (source offset = 0000h)
  241. 00000159  8ED8              mov ds,ax
  242. 0000015B  33ED              xor bp,bp                                           ; bp will be used as index
  243. Multiply_Palette_Loop:
  244. 0000015D  33C0              xor ax,ax
  245. 0000015F  3E8A02            mov al,[ds:bp+si]                                   ; get source palette color
  246. 00000162  F6E3              mul bl                                              ; multiplier
  247. 00000164  C1E805            shr ax,0x5                                          ; * 16
  248. 00000167  268803            mov [es:bp+di],al                                   ; store the modified color
  249. 0000016A  45                inc bp                                              ; next palette color
  250. 0000016B  81FD0003          cmp bp,768                                          ; already the whole palette?
  251. 0000016F  75EC              jnz Multiply_Palette_Loop
  252. 00000171  1F                pop ds                                              ; restore segment registers
  253. 00000172  07                pop es
  254. 00000173  C3                ret
  255.  
  256.  
  257. Wait_For_Vertical_Retrace_Sync:
  258. ; waits until vertrical retrace is cleared
  259. 00000174  BADA03            mov dx,0x3da                                        ; 3DAh Input Status #1 Register
  260. Vertical_Retrace_loop:
  261. 00000177  EC                in al,dx                                            ; (read it)
  262. 00000178  A808              test al,00001000b                                   ;      bit 3: Vertical Retrace in progress if set
  263. 0000017A  75FB              jnz Vertical_Retrace_loop                           ; wait until it is synced
  264. Vertical_Retrace_loop2:
  265. 0000017C  EC                in al,dx                                            ; second time
  266. 0000017D  A808              test al,00001000b
  267. 0000017F  74FB              jz Vertical_Retrace_loop2
  268. 00000181  C3                ret
  269.  
  270.  
  271. Get_Font_Pointer:
  272. 00000182  06                push es
  273. 00000183  55                push bp
  274. 00000184  B83011            mov ax,0x1130                                       ; 11h = Get Font Information
  275. 00000187  B703              mov bh,0x3                                          ; 03h ROM 8x8 double dot font pointer
  276. 00000189  CD10              int 0x10                                            ; get it
  277. 0000018B  8BF5              mov si,bp                                           ; ES:BP = specified pointer
  278. 0000018D  5D                pop bp
  279. 0000018E  06                push es                                             ; ds:bp will point to the font table
  280. 0000018F  1F                pop ds
  281. 00000190  07                pop es
  282. 00000191  C3                ret
  283.  
  284.  
  285. Display_KryptosLogic_Message:
  286. 00000192  60                pushaw
  287. 00000193  BFE92D            mov di,KryptosLogic_Message                         ; write out the message
  288. 00000196  33ED              xor bp,bp                                           ; index
  289. 00000198  2E8B0E7F2C        mov cx,[cs:FPU_Data_5]                              ; initial value 304
  290. 0000019D  49                dec cx                                              ; -1
  291. 0000019E  83E909            sub cx,9                                            ; -9 (why not)
  292. 000001A1  51                push cx                                             ; store that initial value
  293.  
  294. Next_Message_Character:
  295. 000001A2  83C107            add cx,7                                            ; +7, pixelz?
  296. 000001A5  81F93001          cmp cx,0x130                                        ; in the range?
  297. 000001A9  7F2B              jg End_Text_Message
  298. 000001AB  83F900            cmp cx,byte +0x0                                    ; negative value?
  299. 000001AE  7E23              jng Next_Character
  300. 000001B0  81FDE800          cmp bp,233-1                                        ; index > strlen(Message)?
  301. 000001B4  7F20              jg End_Text_Message                                 ; if yes done!
  302. 000001B6  2E8A3B            mov bh,[cs:bp+di]                                   ; otherwise get the next character
  303. 000001B9  2E890E7F2C        mov [cs:FPU_Data_5],cx                              ; store some run data
  304. 000001BE  33C0              xor ax,ax
  305. 000001C0  B3FF              mov bl,0xff
  306. 000001C2  8BD1              mov dx,cx
  307. 000001C4  05AF00            add ax,0xaf
  308. 000001C7  E80801            call word Display_Text_In_Line
  309. 000001CA  40                inc ax
  310. 000001CB  4A                dec dx
  311. 000001CC  B370              mov bl,0x70
  312. 000001CE  8BD1              mov dx,cx
  313. 000001D0  E8FF00            call word Display_Text_In_Line
  314. Next_Character:
  315. 000001D3  45                inc bp                                              ; next character (index++)
  316. 000001D4  EBCC              jmp short Next_Message_Character                    ; to print out
  317.  
  318. End_Text_Message:
  319. 000001D6  2E8F067F2C        pop word [cs:FPU_Data_5]                            ; restore that initial value
  320. 000001DB  83F920            cmp cx,byte +0x20                                   ; if cx > 20h
  321. 000001DE  7F07              jg End_Text_Message_Done
  322. 000001E0  2EC7067F2C3001    mov word [cs:FPU_Data_5],0x130                      ; restore original value
  323. End_Text_Message_Done:
  324. 000001E7  61                popaw
  325. 000001E8  C3                ret
  326.  
  327.  
  328. ; 1E9h
  329. KryptosLogic_Message:
  330. db  "KryptosLogic.com proudly presents, a Piotr Bania project: -> KON-BOOT <- a Windows and Linux password hacking utility"
  331. db  "                    *** stay tuned for new releases!!! ***     >>> www.kryptoslogic.com ..... www.piotrbania.com <<<"
  332.  
  333.  
  334.  
  335. Display_Text_In_Line:                                                           ; or something
  336.  
  337. ; store register contents
  338. 000002D2  06                push es
  339. 000002D3  60                pushaw
  340.  
  341. 000002D4  6800A0            push word 0xA000                                    ; = VGA buffer
  342. 000002D7  07                pop es                                              ; es will point to it
  343.  
  344. 000002D8  52                push dx
  345. 000002D9  69C04001          imul ax,ax,word 0x140                               ; pixel position * width (320)
  346. 000002DD  5A                pop dx
  347. 000002DE  8BF8              mov di,ax                                           ; destination
  348. 000002E0  03FA              add di,dx                                           ; + line offset
  349. 000002E2  0FB6C7            movzx ax,bh
  350. 000002E5  C1E003            shl ax,0x3
  351. 000002E8  03F0              add si,ax
  352. 000002EA  8AC3              mov al,bl
  353. 000002EC  B90800            mov cx,8                                            ; 8 lines
  354.  
  355. Next_Line:
  356. 000002EF  8A1C              mov bl,[si]
  357. 000002F1  B401              mov ah,0x1
  358. 000002F3  BD0700            mov bp,0x7
  359. 000002F6  84DC              test ah,bl
  360. 000002F8  7403              jz 0x2fd
  361. 000002FA  268803            mov [es:bp+di],al
  362. 000002FD  D0E4              shl ah,1
  363. 000002FF  4D                dec bp
  364. 00000300  73F4              jnc 0x2f6
  365. 00000302  46                inc si
  366. 00000303  81C74001          add di,320                                          ; next line, +320 pixels
  367. 00000307  E2E6              loop Next_Line
  368.  
  369. ; restore register contents and exit
  370. 00000309  61                popaw
  371. 0000030A  07                pop es
  372.  
  373. 0000030B  C3                ret
  374.  
  375.  
  376. ; fill with nops
  377. times 1024-($-$$) db 90h

advertising

Update the Post

Either update this post and resubmit it with changes, or make a new post.

You may also comment on this post.

update paste below
details of the post (optional)

Note: Only the paste content is required, though the following information can be useful to others.

Save name / title?

(space separated, optional)



Please note that information posted here will not expire by default. If you do not want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords. All illegal activities will be reported and any information will be handed over to the authorities, so be good.

comments powered by Disqus
worth-right
worth-right