产品文档 > 全平台端安全 > 安全键盘SDK Android

顶象安全键盘 for Android 使用说明

一、环境现状说明

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

常见键盘攻击行为:

一些流行的键盘输入攻击包括:

  • 输入数据监听攻击
  • 键盘截屏攻击
  • 破解加密算法
  • 窃取输入数据
  • 其他攻击等等
  • 键盘劫持攻击
  • 输入数据篡改攻击
  • 未加密前篡改
  • 来自系统底层的内存dump攻击?

针对一些涉及到交易的App,通过对键盘的攻击,可以获得用户账户、证件、密码、银行卡信息、转账信息以及有效联系方式等个人重要信息。 以移动金融、手机网游、社交、移动购物为例,App键盘攻击将会带来以下风险:

  • 银行卡账户密码、交易金额、交易信息、交易凭证等被窃取从而造成财产损失
  • 被监听游戏帐号、密码,从而造成虚拟财产损失
  • 被窃取社交应用账号、密码,被利用社交关系网络进行精准诈骗
  • 被窃取用户资料或商业机密并被售卖
  • 交易金额被篡改

二、产品说明

  • 安全键盘SDK: 是一款具有防止被恶意输入,数据被恶意篡改,真实数据被监听的安全键盘。安全键盘给予你从底层、启动前、输入时、输入后等多个维度进行输入数据保护。
  • 作用领域:金融行业,银行行业等敏感数据输入场景。

三、底层技术

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

四、环境要求

条目说明
开发目标Android 4.0+
开发环境Android Studio 3.0.1 或者 Eclipse + ADT
CPU架构ARM 或者 x86
SDK三方依赖

五、集成SDK

5.1 SDK获取

  1. 访问顶象技术官网,注册账号
  2. 登录控制台,访问“全流程端防控->安全键盘SDK”模块
  3. 新增App,填写相关信息
  4. 下载对应平台SDK

5.2 SDK文件结构

  • SDK目录结构 SDK目录结构

    • dx-keyboard-x.x.x.aar - Android Studio的接入包
    • libs/* - 4种abi平台的so

5.3 Android Studio 集成

点击下载Demo

5.3.1 Android Studio导入aar, so

  • 把dx-keyboard-x.x.x.aar文件放到相应模块的libs目录下

    android-dx-keyboard-as.png

  • 在该Module的build.gradle中如下配置:

android{
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

    repositories{
        flatDir{
            dirs 'libs'
        }
    }
}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation (name:'dx-keyboard-x.x.x', ext:'aar')
}

六、API使用

6.1 xml调用

  • 在View所加载的布局文件xml中配置“安全键盘”组件
<com.dingxiang.mobile.keyboard.DXSafeEditView
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:focusableInTouchMode="false"
     android:inputType="textPassword" />

6.2 Webview调用

  • 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);
}

七、接口说明

// 获取DXSafeEditView的真实的数值接口
DXSafeEditView.getEditString()

八、混淆配置

-keep class com.dingxiang.mobile.keyboard.DX.** { *; }

九、问题错误汇总

错误码错误描述
-1000 , -1101授权失败,请联系顶象客服人员
-1102试用版本已过期,请联系顶象客服人员
-1103包名或签名相关不正确,请校对包名/签名信息是否跟生成库提供的包名/签名一致
其他设备运行在危险环境中,如注入、调试等环境
400-8786-123