├── .gitignore ├── README.md ├── seTokenInfo.db ├── se_check_collector.sh ├── se_gentoken.sh ├── serverManager_linux ├── serverManager_mac └── sesdk-release.aar /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Object files 5 | *.o 6 | *.ko 7 | *.obj 8 | *.elf 9 | 10 | # Linker output 11 | *.ilk 12 | *.map 13 | *.exp 14 | 15 | # Precompiled Headers 16 | *.gch 17 | *.pch 18 | 19 | # Libraries 20 | *.lib 21 | *.a 22 | *.la 23 | *.lo 24 | 25 | # Shared objects (inc. Windows DLLs) 26 | *.dll 27 | *.so 28 | *.so.* 29 | *.dylib 30 | 31 | # Executables 32 | *.exe 33 | *.out 34 | *.app 35 | *.i*86 36 | *.x86_64 37 | *.hex 38 | 39 | # Debug files 40 | *.dSYM/ 41 | *.su 42 | *.idb 43 | *.pdb 44 | 45 | # Kernel Module Compile Results 46 | *.mod* 47 | *.cmd 48 | .tmp_versions/ 49 | modules.order 50 | Module.symvers 51 | Mkfile.old 52 | dkms.conf 53 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RepackedDetect 2 | Android Apk 重打包检测 3 | 4 | # Usage 5 | 6 | ## 1. 生成token信息 7 | 说明:需要先使用`serverManager`工具来生成客户端sdk集成,以及服务端数据查询用的token,分别记位:`Client Token`以及`Server Token` 8 | 9 | Token的生成依赖于三个参数,分别位: 10 | - apk的包名,即packagename 11 | - 签名md5信息(可使用`keytool -printcert -file CERT.RSA`或`keytool -printcert -jarfile xxx.apk`来获取到)。 12 | - 随机key,自定义字符串。 13 | 14 | 可参考脚本se_gentoken.sh,例子如下: 15 | ```bash 16 | packagename="com.village.security.demo" 17 | sign_md5="2A:2D:6D:18:95:33:5A:AA:A4:5E:EC:E5:AE:B0:D9:4A" 18 | key="test" 19 | ./serverManager_mac -g -p "$packagename" -s "$sign_md5" -k "$key" 20 | ``` 21 | 22 | 使用生成,结果如下: 23 | ```bash 24 | [Gen Token] 25 | GenToken Init new public/private key 26 | ---------------------------------------------------- 27 | [Client Token]:WxTLFOGfRI4AU8oP6dZOtxR29Bq00jffAVHNXZfcTcVBhvF1yGklsgCsiGPMLnHWO/PEU7UnbPMHuOR9vhtcwl7JFFC+BOHGTZ80B4ft27aoPc2Xf5s4WfbpWaqPxWcFmz3ffRu1V/WbPd99G6VH5Zs9330btVf1mz3ffRuFZ8VbPZ9927UX9Vs9n33bpQflWz2ffdu1F/VbPZ9928VnhRu9332bNVf1G73ffZslR+Ubvd99mzVX9Ru9332bBWfFW70ffds1l/VbvR992yWH5Vu9H33bNZf1W70ffdvFZwWbPd99G7VX9Zs9330bpUflmz3ffRu1V/WbPd99G4VnxVs9n33btRf1Wz2ffdulB+VbPZ9927UX9Vs9n33bMR8JbxKkuUSm9tAFgOf333F45/wnR7ec+letD+kona9N4ovnEi2fsYElU8Ckz33p+KKg1GWXIMF76crlNbr6fnZPrJg42HgYuFj4mDjYeBi4WPiYONh4GLhY+Jg42HgYuFj4WDiYeNi4GPhYOJh42LgY+Fg4mHjYuBj4WDiYeNi4GPgYuNh4mDhY+Bi42HiYOFj4GLjYeJg4WPgYuNh4mDhY+Fi4GHjYOJj4WLgYeNg4mPhYuBh42DiY+Fi4GHjYOJj4mDjYeBi4WPiYONh4GLhY+Jg42HgYuFj4mDjYeBi4WPhYOJh42LgY+Fg4mHjYuBj4WDiYeNi4GPhYOJh42LgY+Bi42HiYOFj4GLjYeJg4WPgYuNh4mDhY+Bi42HiYOFj4WLgYeNg4mPhYuBh42DiY+Fi4GHjYOJj4WLgYeNg5mPk= 28 | ---------------------------------------------------- 29 | ---------------------------------------------------- 30 | [Server Token]:CiRwUWJHcys3Y3VoYmJ1SDN0TytKWEt5a0s3MDZSL3hYdC9nPT0= 31 | ---------------------------------------------------- 32 | ``` 33 | 执行后会在根目录下生成`seTokenInfo.db`文件,该文件会存放输入的`包名`以及`签名md5`信息,可用于对客户端采集上来的数据做重打包判断。 34 | 35 | 执行`./serverManager_mac -g xxx`生成的客户端以及服务端token。 36 | - [Client Token],用于客户端sdk函数调用的输入参数,详情见下面`Client Android`节。 37 | - [Server Token],用于服务端对客户端采集上来的数据做校验,判断是否存在重打包,详情见下面`Server Check`节。 38 | 39 | ## 2. Client Android 40 | 41 | ### Application中初始化sdk 42 | ```Java 43 | public class MyApplication extends Application { 44 | 45 | @Override 46 | public void onCreate() { 47 | super.onCreate(); 48 | 49 | SecuritySdk.InitSecuritySdk(this); 50 | } 51 | } 52 | 53 | ``` 54 | ### 调用获取apk信息 55 | 调用`SecuritySdk.getCollectorMsg(clientToken)`函数会采集客户端apk信息,app开发者将该信息上报到服务端,做重打包校验,实例代码如下: 56 | ```Java 57 | public class MainActivity extends AppCompatActivity { 58 | @Override 59 | protected void onCreate(Bundle savedInstanceState) { 60 | super.onCreate(savedInstanceState); 61 | setContentView(R.layout.activity_main); 62 | String clientToken = "WxTLFOGfRI4AU8oP6dZOtxR29Bq00jffAVHNXZfcTcVBhvF1yGklsgCsiGPMLnHWO/PEU7UnbPMHuOR9vhtcwl7JFFC+BOHGTZ80B4ft27aoPc2Xf5s4WfbpWaqPxWcFmz3ffRu1V/WbPd99G6VH5Zs9330btVf1mz3ffRuFZ8VbPZ9927UX9Vs9n33bpQflWz2ffdu1F/VbPZ9928VnhRu9332bNVf1G73ffZslR+Ubvd99mzVX9Ru9332bBWfFW70ffds1l/VbvR992yWH5Vu9H33bNZf1W70ffdvFZwWbPd99G7VX9Zs9330bpUflmz3ffRu1V/WbPd99G4VnxVs9n33btRf1Wz2ffdulB+VbPZ9927UX9Vs9n33bMR8JbxKkuUSm9tAFgOf333F45/wnR7ec+letD+kona9N4ovnEi2fsYElU8Ckz33p+KKg1GWXIMF76crlNbr6fnZPrJg42HgYuFj4mDjYeBi4WPiYONh4GLhY+Jg42HgYuFj4WDiYeNi4GPhYOJh42LgY+Fg4mHjYuBj4WDiYeNi4GPgYuNh4mDhY+Bi42HiYOFj4GLjYeJg4WPgYuNh4mDhY+Fi4GHjYOJj4WLgYeNg4mPhYuBh42DiY+Fi4GHjYOJj4mDjYeBi4WPiYONh4GLhY+Jg42HgYuFj4mDjYeBi4WPhYOJh42LgY+Fg4mHjYuBj4WDiYeNi4GPhYOJh42LgY+Bi42HiYOFj4GLjYeJg4WPgYuNh4mDhY+Bi42HiYOFj4WLgYeNg4mPhYuBh42DiY+Fi4GHjYOJj4WLgYeNg5mPk="; 63 | Button btn = findViewById(R.id.button); 64 | btn.setOnClickListener(new View.OnClickListener() { 65 | @Override 66 | public void onClick(View view) { 67 | String collectMsg = SecuritySdk.getCollectorMsg(clientToken); 68 | Log.i("SESDK", "msg: " + collectMsg); 69 | } 70 | }); 71 | } 72 | } 73 | 74 | ``` 75 | 76 | ## 3. Server Check 77 | 服务端使用`serverManager`来对采集上来的信息做校验,判断当前包是否存在重打包问题,可参考`se_check_collector.sh`脚本。 78 | ```bash 79 | collectorData="QOfB2Xq69pndorTXdVL7shV5OEHen1Ru+lk87yuXyJw37EZXW3kcVNlDPTBB7gLdb72wDjINdGeyU8hShpG/xg9UbctWAT/Vp6JH6/7ULUxUDODF9Z2P1QukRCt60KMytxd3+Xp7oRDJNhd61/8KiqVaB6WbJnS4eDt2KSBImWXIdQGskuWEVLqYGhiU96uqYE7GGc3fvbmVKCxWOgKmz6t296Aq0whr9ZTkMPVZOGwGMirKAYPH5GRn6yUMA3YOMAxI6VgtdqqZ61RSulPofKujPIp+gEhj/2W3VAfzauj8+dgTPsTN9+OHCrF/+gZiMOU5conOcIVMcDhsWAHgpz+ksJuXGi3o/jfy5lFMG15j+3malUW2lU9ll2mHfksfvMsZNr0zAtEfykWpjxpyLXN0c2NmqwHzkG1e1OYL4fM54soBrzG4AKk72QKBgZBsxVtQS96yGdTY9CGMFpXUeO6vy30IETKw4uZrT/PGtrsgTi3ZfJaYg5mAHehv11TDGaFZ8i2nk25UQY/J7vfjWZLDvcNh0nK2uijfOwgiKFdMyg1epDEdAprTIqVmOfK6FH0vHAsG2cpvF0PLnPD2omzjPLFtb433g/Fc3OVbFuXFlnjfTqtSi31FAZd+I5EpQhTQ8iss8jRjEJvqdvk9iMRKn+3VDViWiJA4IElxVEOswu7z40OtiuFUEjwYoP8M9iEiQhtB3qxKfX3imzVFeLiZae+BEMv6JoBVCg05txWCbIiGKSstBfPEjrx/g9fGYizSgLeaGNxaaFQD7ClAobneXuEoNaoXCAsn9mrBYKgTHC3P4PSjZEt15hsQk97UpQ==" 80 | 81 | serverToken="CiRwUWJHcys3Y3VoYmJ1SDN0TytKWEt5a0s3MDZSL3hYdC9nPT0=" 82 | 83 | ./serverManager_mac -c -l "$serverToken" -t "$collectorData" 84 | ``` 85 | 注:`collectorData`为由客户端调用`SecuritySdk.getCollectorMsg(clientToken)`采集上来的数据,`serverToken`为`步骤1`中国呢生成的`[Server Token]` 86 | 87 | ## 4. 错误码判断 88 | 执行`serverManager -c xxx`后会输出错误码信息,来判断当前是否是重打包,日志格式如下: 89 | ```bash 90 | [Check Collector Data] 91 | errno :2048 92 | ``` 93 | 上面日志表示错误码为:2048。 94 | 95 | 错误码目前使用到8个bit来表征。 96 | 97 | 各个错误码代表含义如下: 98 | - errno & (1 + 2 + 4 + 8) != 0 : 数据格式有误被篡改(serverToken/collectorData) 99 | - errno & (16 + 32 + 64 + 128 + 256 + 512 + 1024) != 0 : 检测到重打包。 100 | - errno & (2048 + 4096) != 0 : collectorData数据过期。 101 | 102 | -------------------------------------------------------------------------------- /seTokenInfo.db: -------------------------------------------------------------------------------- 1 | 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 3 | -------------------------------------------------------------------------------- /se_check_collector.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## -c check CollectorData By serverToken 4 | collectorData="QOfB2Xq69pndorTXdVL7shV5OEHen1Ru+lk87yuXyJw37EZXW3kcVNlDPTBB7gLdb72wDjINdGeyU8hShpG/xg9UbctWAT/Vp6JH6/7ULUxUDODF9Z2P1QukRCt60KMytxd3+Xp7oRDJNhd61/8KiqVaB6WbJnS4eDt2KSBImWXIdQGskuWEVLqYGhiU96uqYE7GGc3fvbmVKCxWOgKmz6t296Aq0whr9ZTkMPVZOGwGMirKAYPH5GRn6yUMA3YOMAxI6VgtdqqZ61RSulPofKujPIp+gEhj/2W3VAfzauj8+dgTPsTN9+OHCrF/+gZiMOU5conOcIVMcDhsWAHgpz+ksJuXGi3o/jfy5lFMG15j+3malUW2lU9ll2mHfksfvMsZNr0zAtEfykWpjxpyLXN0c2NmqwHzkG1e1OYL4fM54soBrzG4AKk72QKBgZBsxVtQS96yGdTY9CGMFpXUeO6vy30IETKw4uZrT/PGtrsgTi3ZfJaYg5mAHehv11TDGaFZ8i2nk25UQY/J7vfjWZLDvcNh0nK2uijfOwgiKFdMyg1epDEdAprTIqVmOfK6FH0vHAsG2cpvF0PLnPD2omzjPLFtb433g/Fc3OVbFuXFlnjfTqtSi31FAZd+I5EpQhTQ8iss8jRjEJvqdvk9iMRKn+3VDViWiJA4IElxVEOswu7z40OtiuFUEjwYoP8M9iEiQhtB3qxKfX3imzVFeLiZae+BEMv6JoBVCg05txWCbIiGKSstBfPEjrx/g9fGYizSgLeaGNxaaFQD7ClAobneXuEoNaoXCAsn9mrBYKgTHC3P4PSjZEt15hsQk97UpQ==" 5 | 6 | serverToken="CiRwUWJHcys3Y3VoYmJ1SDN0TytKWEt5a0s3MDZSL3hYdC9nPT0=" 7 | 8 | ./serverManager_mac -c -l "$serverToken" -t "$collectorData" 9 | 10 | -------------------------------------------------------------------------------- /se_gentoken.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # -g gen Clienttoken && ServerToken 4 | # -p input packagename 5 | # -s input apk sign md5 6 | # -k input key(by yourself) 7 | packagename="com.village.security.demo" 8 | sign_md5="2A:2D:6D:18:95:33:5A:AA:A4:5E:EC:E5:AE:B0:D9:4A" 9 | key="test" 10 | ./serverManager_mac -g -p "$packagename" -s "$sign_md5" -k "$key" 11 | 12 | echo "errno: "$? -------------------------------------------------------------------------------- /serverManager_linux: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kstom/RepackedDetect/49d007d387b481df901d47814a6d097f5df1f773/serverManager_linux -------------------------------------------------------------------------------- /serverManager_mac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kstom/RepackedDetect/49d007d387b481df901d47814a6d097f5df1f773/serverManager_mac -------------------------------------------------------------------------------- /sesdk-release.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kstom/RepackedDetect/49d007d387b481df901d47814a6d097f5df1f773/sesdk-release.aar --------------------------------------------------------------------------------