added API call for extracting keystrokes from client.ui.keyscan_dump

git-svn-id: file:///home/svn/framework3/trunk@12323 4d416f70-5f16-0410-b530-b9f4589650da
unstable
Carlos Perez 2011-04-15 02:21:40 +00:00
parent 9ac36d6e0a
commit 904e7af88b
2 changed files with 33 additions and 26 deletions

View File

@ -219,6 +219,38 @@ class UI < Rex::Post::UI
return response.get_tlv_value(TLV_TYPE_KEYS_DUMP); return response.get_tlv_value(TLV_TYPE_KEYS_DUMP);
end end
#
# Extract the keystroke from the buffer data
#
def keyscan_extract(buffer_data)
outp = ""
buffer_data.unpack("n*").each do |inp|
fl = (inp & 0xff00) >> 8
vk = (inp & 0xff)
kc = VirtualKeyCodes[vk]
f_shift = fl & (1<<1)
f_ctrl = fl & (1<<2)
f_alt = fl & (1<<3)
if(kc)
name = ((f_shift != 0 and kc.length > 1) ? kc[1] : kc[0])
case name
when /^.$/
outp << name
when /shift|click/i
when 'Space'
outp << " "
else
outp << " <#{name}> "
end
else
outp << " <0x%.2x> " % vk
end
end
return outp
end
protected protected
attr_accessor :client # :nodoc: attr_accessor :client # :nodoc:

View File

@ -277,32 +277,7 @@ class Console::CommandDispatcher::Stdapi::Ui
def cmd_keyscan_dump(*args) def cmd_keyscan_dump(*args)
print_line("Dumping captured keystrokes...") print_line("Dumping captured keystrokes...")
data = client.ui.keyscan_dump data = client.ui.keyscan_dump
outp = "" print_line(client.ui.keyscan_extract(data))
data.unpack("n*").each do |inp|
fl = (inp & 0xff00) >> 8
vk = (inp & 0xff)
kc = VirtualKeyCodes[vk]
f_shift = fl & (1<<1)
f_ctrl = fl & (1<<2)
f_alt = fl & (1<<3)
if(kc)
name = ((f_shift != 0 and kc.length > 1) ? kc[1] : kc[0])
case name
when /^.$/
outp << name
when /shift|click/i
when 'Space'
outp << " "
else
outp << " <#{name}> "
end
else
outp << " <0x%.2x> " % vk
end
end
print_line(outp)
return true return true
end end