我妈找我说,能够邮递杨梅了。我二话不说,直接开端给她我的邮递地址。快速输入的地址让我想到一个问题,现在的输入法是不是知道的太多了?

我只要打出“浙江省杭州市”,联想出来的就是我地点的市区和大街,下面就是我地点的小区……虽然足够便利,但是假如键盘被黑灰产绑架,那么,也足够危险。

26键 or 九宫格?不论哪个都不耽误黑客们窃取你的信息!

而现在市面上根据键盘输入数据的各类信息盗取进犯非常普遍。包含移动金融、电子商务、第三方支付、网络游戏、交际软件等App都存在各类用户信息泄露的环节。大量诸如账号、暗码、手机号码、信誉卡号、银行卡号、身份证件号码、家庭住址信息、公司地址信息、家庭成员信息、个人私密信息、商业信息等敏感数据被经过App键盘录入移动互联网中。黑客们经过反编译这些流行运用,将键盘钩子(监控程序)捆绑嵌入其中,以监控、盗取用户经过键盘输入的各项数据。

一些常见的键盘进犯行为

一些流行的键盘输入进犯包含:

  • 输入数据监听进犯
  • 键盘截屏进犯
  • 破解加密算法
  • 盗取输入数据
  • 其他进犯等等
  • 键盘绑架进犯
  • 输入数据篡改进犯
  • 未加密前篡改
  • 来自体系底层的内存dump进犯

针对一些涉及到买卖的App,经过对键盘的进犯,能够获得用户账户、证件、暗码、银行卡信息、转账信息以及有用联系办法等个人重要信息。 以移动金融、手机网游、交际、移动购物为例,App键盘进犯将会带来以下危险:

  • 银行卡账户暗码、买卖金额、买卖信息、买卖凭证等被盗取然后形成财产损失
  • 被监听游戏帐号、暗码,然后形成虚拟财产损失
  • 被盗取交际运用账号、暗码,被运用交际联系网络进行精准诈骗
  • 被盗取用户材料或商业机密并被售卖
  • 买卖金额被篡改

根据上述问题,我们要如何防备?

产品阐明

  • 安全键盘SDK: 是一款具有避免被歹意输入,数据被歹意篡改,实在数据被监听的安全键盘。安全键盘给予你从底层、发动前、输入时、输入后等多个维度进行输入数据维护。
  • 作用范畴:金融职业,银行职业等敏感数据输入场景。

底层技能

  • 暗码在内存中全程加密存储选用高强度的组合加密算法和机制,对安全键盘输入的信息在全流程施行加密,不留下危险空当。
  • 全程安全检测维护排除不合法环境输入(root,越狱,调试形式等),并提示用户
  • 防截屏进犯对截屏进犯进行防御,不回显输入信息。
  • 避免从底层获取暗码经过随机布局键盘,避免被底层分析输入节点从而获取暗码。
  • 避免底层dump内存读取暗码关于底层的内存dump做了有用防护,避免被dump出内存暗码的明文拷贝等危险。(android)
  • 防输入日志泄露对输入输出的日志进行维护,避免输出信息打印出明文暗码帐户信息。(android)
  • 暗码so文件加壳维护在so文件中保存密钥,并对so文件高强度加壳。(android)

安全键盘接入

Android接入

26键 or 九宫格?不论哪个都不耽误黑客们窃取你的信息!

一、环境要求

条目 阐明
开发方针 Android 4.0+
开发环境 Android Studio 3.0.1 或许 Eclipse + ADT
CPU架构 ARM 或许 x86
SDK三方依靠

二、 集成SDK

2.1 获取SDK
  1. 拜访技能官网,注册账号
  2. 进入安全键盘SDK后台
  3. 新增App,填写相关信息
  4. 下载对应渠道SDK
2.2 SDK文件结构
  • SDK目录结构

    • aar –dx-keyboard-x.x.x.aar包含java代码,资源等
    • so – 支撑4种abi渠道的so,键盘native 中心代码
2.3 Android Studio 集成

点击下载Demo

2.3.1 Android Studio导入aar, so
  • libs下的aarso导入到项目对应的libs目录下

    26键 or 九宫格?不论哪个都不耽误黑客们窃取你的信息!

2.3.2 build.gradle 装备
android{
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
    repositories{
        flatDir{
            dirs 'libs'
        }
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation (name:'dx-keyboard-x.x.x', ext:'aar')
}

三、API运用

打开安全键盘有以下三种办法:

3.1 API办法调用
3.1.1 初始化
  • 主张在ActivityonCreate下调用
DXKeyboardManager.getInstance().init(context);
3.1.2 设置输入监听器
DXKeyboardManager.getInstance().setListener(new IDXKeyboardListener() {
            @Override
            public void onTextChange(CharSequence str) {
            }
            @Override
            public void onShow() {
            }
            @Override
            public void onHide() {
            }
            @Override
            public void onClickFinish() {
            }
            @Override
            public void onKbHeightChange(int height) {
            }
        });
3.1.3 设置Dialog不被键盘遮盖
DXKeyboardManager.getInstance().setAdjustDialogView(dialog);
3.1.4 显现键盘

 /**
  * 显现键盘选项
  */
  DXKeyboardOption option = new DXKeyboardOption();
  // 自定义“完结”按钮(只对数字键盘收效)。经过 onClickFinish 回调自行处理 
  option.setFinishBtn(true, "登录");
  // 指定纯数字键盘
  option.setKbType(DXKeyboardType.NUMBER);
  // 开启随机键
  option.setRandomKey(true);
/**
  * 显现键盘
  * activity 上下文
  * option 显现选项
  */
 DXKeyboardManager.getInstance().show(MainActivity.this, option);
3.1.5 躲藏键盘
DXKeyboardManager.getInstance().hide();
3.1.6 毁掉键盘
  • 主张在ActivityonDestroy下调用
DXKeyboardManager.getInstance().destroy();

3.2 DXSafeEditView办法调用

  • DXSafeEditView为承继体系EditText的文本输入控件
  • 支撑直接在xml上初始化,其中inputType的值为numberphone时,默认弹出数字键盘
<com.dingxiang.mobile.keyboard.api.view.DXSafeEditView
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:focusableInTouchMode="false"
     android:inputType="textPassword" />
  • DXSafeEditView 获取实在数据
DXSafeEditView.getEditString();

3.3 Webview办法调用

  • 支撑H5的输入控件引发顶象安全键盘
  • Java代码段调用
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
//顶象Javascript 对象初始化
DXJavascriptBridge jsInterface = new DXJavascriptBridge(mContext, mWebView);
mWebView.addJavascriptInterface(jsInterface, "DXobject");
  • Html调用
<input type="text" id="dx_id" name="yourpw" value="" readonly onfocus="requreFocus(this)" onblur="requestBlur(this)"/>
  • Js相关交互代码
<!—获取固定办法 -->
function requreFocus(e){
    e.blur();
    window.DXobject.requreFocus(e.name , e.type , e.id);
}
<!—获取固定办法 -->
function requestBlur(e){
    window.DXobject.requestBlur(e.name , e.type , e.id);
}

<!—获取固定办法 -->
function setText(name , str){
    window.document.getElementsByName(name)[0].value = str;
}
<!—获取真正的数值 -->
function getValue() {
    var e =  window.document.getElementById("dx_id");
    var _name = e.name;
    var _type = e.type;
    var _id = e.id;
    var value =  window.DXobject.getValue(_name , _type , _id);
    alert(value);
}

四、混淆装备

-dontwarn com.dingxiang.mobile.**
-dontwarn *.com.dingxiang.mobile.**
-dontwarn *.com.mobile.strenc.**
-keep class com.dingxiang.mobile.keyboard.**{*;}
-keep class *.com.dingxiang.mobile.**{*;}
-keep class com.security.inner.**{*;}
-keep class *.com.mobile.strenc.**{*;}
-keep class android.support.v4.content.LocalBroadcastManager{*;}

iOS接入

一、环境需求

条目 阐明
兼容渠道 iOS 9 .0+
开发环境 XCode 4.0 +
CPU架构 armv7, arm64, i386, x86_64
SDK依靠 libz, libresolv, libc++ , SystemConfiguration.framework

二、 集成SDK

2.1 获取SDK
  1. 拜访技能官网,注册账号
  2. 登录控制台,拜访“全流程端防控->安全键盘SDK”模块
  3. 新增App,填写相关信息
  4. 下载对应渠道SDK
2.2 SDK文件结构

顶象安全键盘iOS SDK,解压得以下几个文件

  • DXSafeKeyboard_iOS_xxxxx_debug.zip安全键盘debug 授权集成库
  • DXSafeKeyboard_iOS_xxxxx_release.zip安全键盘release 授权集成库

例如图:

26键 or 九宫格?不论哪个都不耽误黑客们窃取你的信息!

  • 解压DXSafeKeyboard_iOS_xxxxx_xxx.zip文件,得到以下文件

    • DXSafeKeyboard文件夹

      • DXSafeKeyboardFramework.framework已授权framework静态库
      • DXKeyboard.bundle资源文件
    • other_file授权描绘文件

点击下载Demo

2.3 xcode集成
  • DXSafeKeyboard文件夹拖入工程根目录,勾选Copy iterms if neededCreate groups, 并在Add to targets中按需勾选target
  • 在项目中增加Linking装备,选择Target->Build Settings,在Other Linker Flags里增加-ObjC装备
  • Build PhasesLink Binary With Libraries里增加SystemConfiguration.frameworklibc++.tbd

三、初始化

假设在ViewController中增加安全键盘,首要引进头文件

#import "DXSafeKeyboard.h"

然后完成DXSafeKeyboardDelegate协议中的keyboard:buttonClicked:办法,以接收验证成果回调

@interface ViewController () <DXSafeKeyboardDelegate>
@end
@implementation ViewController
- (void)keyboard:(DXSafeKeyboard *)keyboard buttonClicked:(DXKeyboardEvent *)action{
    //具体完成壳检查demo
}
@end

最终安全键盘组件,需求传入DXSafeKeyboardType,设置delegate

DXSafeKeyboard *letterKeyboard = [[DXSafeKeyboard alloc] initWithType:DXSafeKeyboardTypeLetter];
letterKeyboard.delegate = self;
letterTextField.inputView = letterKeyboard;

四、接口阐明

@interface DXSafeKeyboard : UIView
//初始化键盘,三种键盘可选:
//	字幕键盘(DXSafeKeyboardTypeLetter)
//	带操作键数字键盘(DXSafeKeyboardTypeNumberWithEnter)
//	纯数字键盘(DXSafeKeyboardTypeOnlyNumber)
- (instancetype)initWithType:(DXSafeKeyboardType)type;
//键盘代理,用于接收按钮回调
@property (nonatomic, weak) id<DXSafeKeyboardDelegate> delegate;
//enterButton文字
@property (nonatomic, strong) NSString *enterButtonTitle;
//enterButton颜色
@property (nonatomic, strong) UIColor *enterButtonColor;
//numberpad按下颜色
@property (nonatomic, strong) UIColor *numberPadHlightColor;
// 展现键盘(无输入焦点)
-(void) showKeyboard;
// 躲藏键盘
-(void) hiddenKeyboard;
@end

以上。

结语

现在金融银行等App一般都会运用乱码的键盘去防绑架,但是在技能发展的同时,黑灰产现在现已经过深度学习等办法找到破解办法,所以我们更需求“魔高一尺道高一丈”,去超前与黑灰产对抗。