更新记录

1.0.1(2020-07-20) 下载此版本

update license.md

1.0(2020-07-17) 下载此版本

首次发布


平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 11.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


本插件基于知名开源Android检测刷子党库EasyProtector封装

EasyProtector Github地址:https://github.com/lamster2018/EasyProtector

体验检测能力

安装Demo的Apk,快速体验检测能力

链接下载:点我下载安装Demo Apk

扫码下载

扫码下载

拥有羊毛党、模拟器、是否root、Xposed、多开环境等等十多项检测能力💨🚀

方法快速一览

  • checkByPrivateFilePath
  • checkByOriginApkPackageName
  • checkByMultiApkPackageName
  • checkByHasSameUid
  • checkByPortListening
  • checkIsRunningInVirtualApk
  • checkIsRoot
  • checkIsDebug
  • checkIsUsbCharging
  • checkIsDebuggerConnected
  • checkIsBeingTracedByC
  • checkIsXposedExist
  • checkIsRunningInEmulator

快速上手

安装原生插件

打开插件详情页,点击云打包按钮,然后导入到自己想要使用的项目

manifest.json -> App原生插件配置 ->云端插件 选择EasyProtector

导入EasyProtector插件
const easyProtector = uni.requireNativePlugin('easy-protector');
使用EasyProtector插件
const easyProtector = uni.requireNativePlugin('easy-protector');

export default {
  data() {
    return {
      title: 'Hello',
      out: "",
    }
  },

  onLoad() {
    this.log("easyProtector exist" + JSON.stringify(easyProtector))
  },

  methods: {

    checkByPrivateFilePath(){
      let ret = easyProtector.checkByPrivateFilePath();
      this.log("checkByPrivateFilePath:" + ret);
    },

    checkByOriginApkPackageName(){
      let ret = easyProtector.checkByOriginApkPackageName();
      this.log("checkByOriginApkPackageName:" + ret);
    },

    /**
     * 运行被克隆的应用,该应用会加载多开应用的so库
     * 检测已经加载的so里是否包含这些应用的包名
     */
    checkByMultiApkPackageName(){
      let ret = easyProtector.checkByMultiApkPackageName();
      this.log("checkByMultiApkPackageName:" + ret);
    },

    /**
      * Android系统一个app一个uid
      * 如果同一uid下有两个进程对应的包名,在"/data/data"下有两个私有目录,则该应用被多开了
      */
    checkByHasSameUid(){
      let ret = easyProtector.checkByHasSameUid();
      this.log("checkByHasSameUid:" + ret);
    },

    /**
     * 端口监听,先扫一遍已开启的端口并连接,
     * 如果发现能通信且通信信息一致,
     * 则认为之前有一个相同的自己打开了(也就是被多开了)
     * 如果没有,则开启监听
     * 这个方法没有 checkByCreateLocalServerSocket 方法简单,不推荐使用
     */
    checkByPortListening(){
      easyProtector.checkByPortListening();
      this.log("checkByPortListening:call");
    },

    checkIsRunningInVirtualApk(){
      let ret = easyProtector.checkIsRunningInVirtualApk();
      this.log("checkIsRunningInVirtualApk:" + ret);
    },

    checkIsRoot(){
      let ret = easyProtector.checkIsRoot();
      this.log("checkIsRoot:" + ret);
    },

    checkIsDebug(){
      let ret = easyProtector.checkIsDebug();
      this.log("checkIsDebug:" + ret);
    },

    checkIsUsbCharging(){
      let ret = easyProtector.checkIsUsbCharging();
      this.log("checkIsUsbCharging:" + ret);
    },

    checkIsDebuggerConnected(){
      let ret = easyProtector.checkIsDebuggerConnected();
      this.log("checkIsDebuggerConnected:" + ret);
    },

    checkIsBeingTracedByC(){
      easyProtector.checkIsBeingTracedByC();
      this.log("checkIsBeingTracedByC:call");
    },

    /**
     * 检测Xposed是否存在
     */
    checkIsXposedExist(){
      let ret = easyProtector.checkIsXposedExist();
      this.log("checkIsXposedExist:" + ret);
    },

    /**
     * 检测模拟器环境
     * 
     * suspectCount 为嫌疑值,值越大模拟器的嫌疑越高
     */
    checkIsRunningInEmulator(){
      easyProtector.checkIsRunningInEmulator((ret)=>{
        this.log("checkIsRunningInEmulator:" + ret);
      });
    },

    log(text){
      let now = new Date();
      let time = now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds();
      this.out = (time+": "+text) +"\n\n"+ this.out;
    },
  }
}
完整Demo下载

Github地址:https://github.com/fengerwoo/EasyProtectorDemo

加入交流群

扫码加我微信加入微信交流群(请备注:羊毛党检测Uni插件)




🤗 🤗 🤗 如果对您有帮助,请在本Uni插件右上角、EasyProtector源库 进行Star|点赞




隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT License

Copyright (c) 2020 easy-protector

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问