电竞

iOS安全攻防八键盘缓存与安全键盘

2019-10-08 18:39:16来源:励志吧0次阅读

  大部分中文应用弹出的默认键盘是简体中文输入法键盘,在输入用户名和密码的时候,如果使用简体中文输入法键盘,输入英文字符和数字字符的用户名和密码时,会自动启动系统输入法自动更正提示,然后用户的输入记录会被缓存下来。

  系统键盘缓存最方便拿到的就是利用系统输入法自动更正的字符串输入记录。

  缓存文件的地址是:/private/var/mobile/Library/Keyboard/t

  导出该缓存文件,查看内容,欣喜的发现一切输入记录都是明文存储的。因为系统不会把所有的用户输入记录都当作密码等敏感信息来处理。

  一般情况下,一个常规iPhone用户的t文件,高频率出现的字符串就是用户名和密码。

  所以,一般银行客户端app输入密码时都不使用系统键盘,而使用自己定制的键盘,原因主要有2个:

  1)避免第三方读取系统键盘缓存

  2)防止屏幕录制 (自己定制的键盘按键不加按下效果)

  那么,如何实现自定义安全键盘呢?大致思路如下:

  1)首先捕获系统键盘的弹出、收回通知

  2)创建一个更高级别的window挡住系统键盘

  3)需要抛出一个 idUITextInputtextInput 的弱引用切换焦点

  下面给出一个简单的安全键盘模型:

  @interfaceWQSafeKeyboard:UIWindow @property(nonatomic,weak,setter=focusOnTextFiled:)UITextField*textFiled; +(WQSafeKeyboard*)deploySafeKeyboard; @end @interfaceWQSafeKeyboard() @property(nonatomic,strong)WQInterKeyboard*keyboard; @end @implementationWQSafeKeyboard +(WQSafeKeyboard*)deploySafeKeyboard { WQSafeKeyboard*kb=[[WQSafeKeyboardalloc]init]; [kbaddObserver]; returnkb; } -(instancetype)init { if(self=[superinit]){ ndowLevel=UIWindowLevelAlert; ame=CGRectZero; otViewController=yboard; } returnself; } -(void)dealloc { [[NSNotificationCenterdefaultCenter]removeObserver:self]; } -(WQInterKeyboard*)keyboard { if(!_keyboard){ _keyboard=[[WQInterKeyboardalloc]init]; } return_keyboard; } -(void)focusOnTextFiled:(UITextField*)textFiled { _textFiled=textFiled; xtField=_textFiled; } -(void)addObserver { [[NSNotificationCenterdefaultCenter]addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenterdefaultCenter]addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; } -(void)keyboardWillShow:(NSNotification*)notification { if(![xtFiledisFirstResponder]){ return; } [selfkeyboardAnimationWithNotification:notification]; } -(void)keyboardWillHide:(NSNotification*)notification { if(![xtFiledisFirstResponder]){ return; } [selfkeyboardAnimationWithNotification:notification]; } -(void)keyboardAnimationWithNotification:(NSNotification*)notification { [selfmakeKeyAndVisible]; NSDictionary*userInfo=[notificationuserInfo]; CGRectkbFrame_end,kbFrame_begin; NSTimeIntervalanimationDuration; UIViewAnimationCurveanimationCurve; [userInfo[UIKeyboardFrameEndUserInfoKey]getValue:kbFrame_end]; [userInfo[UIKeyboardFrameBeginUserInfoKey]getValue:kbFrame_begin]; [userInfo[UIKeyboardAnimationCurveUserInfoKey]getValue:animationCurve]; [userInfo[UIKeyboardAnimationDurationUserInfoKey]getValue:animationDuration]; ame=[selfresizeFrameToAdjust:kbFrame_begin]; [UIViewanimateWithDuration:animationDuration delay:0 options:(animationCurve16) animations:^{ ame=[selfresizeFrameToAdjust:kbFrame_end]; }completion:^(BOOLfinished){ }]; if([isEqualToString:UIKeyboardWillHideNotification]){ [selfresignKeyWindow]; } } -(CGRect)resizeFrameToAdjust:(CGRect)frame { if([[UIApplicationsharedApplication]isStatusBarHidden]) returnframe; if(SYSTEM_VERSION_LESS_THAN(@7.0)){ frame=CGRectMake(igin.x, igin.y-STATUSBAR_HEIGHT, dth, ight); } returnframe; } @end

中医新闻
从化汽车网站
云计算
分享到: