目录:
一、产品概述
1.1、App端防护能决哪些安全问题
1.2、如何为应用开启App防护
二、产品整体框架
三、初始化逻辑
四、环境检测与设备指纹
五、签名流程
六、算法还原
七、总结
对旧版产品本感兴趣的可以移步到这里:https://mp.weixin.qq.com/s/S6BpQYWsYhufh9DsnbXPsA
App防护提供的SDK安全方案解决以下原生App端的安全问题:
恶意注册、撞库、暴力破解
针对App的大流量CC攻击
短信、验证码接口被刷
薅羊毛、抢红包
恶意秒杀限时限购商品
恶意查票、刷票(例如,机票、酒店等场景)
价值资讯爬取(例如,价格、征信、融资、小说等内容)
机器批量投票
灌水、恶意评论
注册登录,提交配置,获取APPKEY与SDK,APP中集成SDK后可以在后台开启App防护状态开关,并设置App防护策略,流程如图1-2所示:
图1-2
App集成SDK主要用于对通过App客户端发起的请求时对请求体进行签名发送到应用服务器。WAF服务端获得应用服务器收到的请求后,通过解析校验签名串(wToken)进行风险识别、拦截恶意请求,识别App业务中的风险,实现App防护的目的。它整体的框架如图2-1所示:
图2-1
SDK初始化接口定义:
int init(Context context, String appkey, int type);
功能:初始化SDK,执行一次初始化采集。一次初始化采集表示采集一次终端设备信息,您可以根据业务的不同,重新调用init函数进行初始化采集。
初始化采集分为两种模式:采集全量数据、采集除需授权字段外的数据(不采集涉及终端设备用户隐私的字段,包括:imei、imsi、simSerial、wifiMac、wifiList、bluetoothMac)。
接口参数:
<context>:Context类型,传入您应用的上下文。
<appkey>:String类型,设置为您的SDK认证密钥。
<type>:CollectType类型,设置采集模式。取值:
DEFAULT:表示采集全量数据。
NO_GRANTED:表示采集除需授权字段外的数据。
返回值:int类型,返回初始化结果,0表示成功,-1表示失败。
加载so与定义几个Native方法:
public class TigerTallyAPI {
protected static final String TAG = "Alibg_SDK";
private static final ExecutorService executorService;
private static int initRet;
private static a sensorInitInfo;
static {
TigerTallyAPI.executorService = Executors.newSingleThreadExecutor();
TigerTallyAPI.sensorInitInfo = null;
System.loadLibrary("tiger_tally");
}
private static native int _genericNt(String arg0, int arg1) {
}
private static native int _genericNt2(int arg0, String[] arg1) {
}
private static native String _genericNt3(int arg0, byte[] arg1) {
}
static int access$100() {
return TigerTallyAPI.initRet;
}
private static int genericNt(String arg0, int arg1) {
return TigerTallyAPI._genericNt(arg0, arg1);
}
private static int genericNt2(int arg0, String[] arg1) {
return TigerTallyAPI._genericNt2(arg0, arg1);
}
//走到so层
public static int init(Context arg3, String arg4, int arg5) {
AppInfo.setContext(arg3);
try {
TigerTallyAPI.initRet = 0;
CountDownLatch v0 = new CountDownLatch(1);
TigerTallyAPI.genericNt2(2, new String[]{arg4});
TigerTallyAPI.executorService.execute(new Runnable() {
@Override
public final void run() {
try {
TigerTallyAPI.sensorInitInfo = AppInfo.rS();
Thread.sleep(50L);
TigerTallyAPI.initRet = TigerTallyAPI.genericNt("", this.a);
AppInfo.uS(TigerTallyAPI.sensorInitInfo);
TigerTallyAPI.access$100();
}
catch(Throwable v0) {
try {
v0.printStackTrace();
}
catch(Throwable v0_1) {
arg5.countDown();
throw v0_1;
}
}
arg5.countDown();
}
});
v0.await(100L, TimeUnit.MILLISECONDS);
}
catch(Throwable v3) {
v3.printStackTrace();
TigerTallyAPI.initRet = -1;
}
return TigerTallyAPI.initRet;
}
Native方法说明:
.text:CB138170 F2 F7 16 F8 BL Dec_RiskString_sub_CEE741A0
.text:CB138174 DF F8 A8 C0 LDR.W R12, =(off_CB215C28 - 0xCB13817E) ; "_genericNt"
.text:CB138178 06 A9 ADD R1, SP, #0x68+var_50
_genericNt2_sub_CDDFF308:解密appkey
_genericNt_sub_CDDFF2B4:获取设备信息,生成设备指纹
_genericNt3_sub_CDDFF500:签名生成
解密字符串,so中字符串都是加密的,全部解密方法如下:
.text:CB129D30 DecString_loc_CEE73D30
.text:CB129D30 2D E9 F0 4F PUSH.W {R4-R11,LR}
.text:CB129D34 85 B0 SUB SP, SP, #0x14
.text:CB129D36 03 92 STR R2, [SP,#0xC]
.text:CB129D38 42 F6 A0 62+MOV R2, #0xAD992EA0
.text:CB129D38 CA F6 99 52
.text:CB129D40 11 44 ADD R1, R2
.text:CB129D42 10 44 ADD R0, R2
.text:CB129D44 4F 4A LDR R2, =(off_CB21C5F8 - 0xCB129D50)
.text:CB129D46 02 91 STR R1, [SP,#8]
.text:CB129D48 4F F6 42 5A MOVW R10, #0xFD42
.text:CB129D4C 7A 44 ADD R2, PC ; off_CB21C5F8
.text:CB129D4E DD F8 38 C0 LDR.W R12, [SP,#0x38]
.text:CB129D52 4D F6 AF 06 MOVW R6, #0xD8AF
.text:CB129D56 04 90 STR R0, [SP,#0x10]
.text:CB129D58 12 68 LDR R2, [R2] ; off_CB21D280
.text:CB129D5A 0E 20 MOVS R0, #0xE
.text:CB129D5C 01 92 STR R2, [SP,#4]
.text:CB129D5E 4F F0 00 08 MOV.W R8, #0
.text:CB129D62 49 4A LDR R2, =(off_CB21C5FC - 0xCB129D74)
.text:CB129D64 C0 F6 1B 5A MOVT R10, #0xD1B
.text:CB129D68 49 F6 9D 75 MOVW R5, #0x9F9D
.text:CB129D6C CF F2 5B 66 MOVT R6, #0xF65B
.text:CB129D70 7A 44 ADD R2, PC ; off_CB21C5FC
.text:CB129D72 D2 F8 00 90 LDR.W R9, [R2] ; off_CB21D1F0
.text:CB129D76 45 4A LDR R2, =(off_CB21C5F8 - 0xCB129D7C)
.text:CB129D78 7A 44 ADD R2, PC ; off_CB21C5F8
.text:CB129D7A 17 68 LDR R7, [R2] ; off_CB21D280
.text:CB129D7C 40 4A LDR R2, =(off_CB21C5F8 - 0xCB129D82)
.text:CB129D7E 7A 44 ADD R2, PC ; off_CB21C5F8
.text:CB129D80 11 68 LDR R1, [R2] ; off_CB21D280
.text:CB129D82 44 4A LDR R2, =(off_CB21C600 - 0xCB129D8E)
.text:CB129D84 00 91 STR R1, [SP]
.text:CB129D86 44 F6 A7 61 MOVW R1, #0x4EA7
.text:CB129D8A 7A 44 ADD R2, PC ; off_CB21C600
.text:CB129D8C C8 F2 54 41 MOVT R1, #0x8454
.text:CB129D90 D2 F8 00 E0 LDR.W LR, [R2] ; unk_CB21D250
.text:CB129D94 3E 4A LDR R2, =(off_CB21C5F8 - 0xCB129D9A)
.text:CB129D96 7A 44 ADD R2, PC ; off_CB21C5F8
.text:CB129D98 D2 F8 00 B0 LDR.W R11, [R2] ; off_CB21D280
.text:CB129D9C
.text:CB129D9C ; .text:CB129E6C↓j
.text:CB129D9C ; DATA XREF: ...
.text:CB129D9C 02 46 MOV R2, R0
.text:CB129D9E 0D 2A CMP R2, #0xD
.text:CB129DA0 00 F3 55 80 BGT.W loc_CB129E4E
.text:CB129DA4 09 2A CMP R2, #9
.text:CB129DA6 1C D1 BNE loc_CB129DE2
.text:CB129DA8 01 9A LDR R2, [SP,#4]
.text:CB129DAA 50 69 LDR R0, [R2,#0x14]
.text:CB129DAC D2 F8 A4 20 LDR.W R2, [R2,#0xA4]
.text:CB129DB0 50 43 MULS R0, R2
.text:CB129DB2 50 45 CMP R0, R10
.text:CB129DB4 01 D1 BNE loc_CB129DBA
.text:CB129DB6 09 22 MOVS R2, #9
.text:CB129DB8 43 E0 B loc_CB129E42
.text:CB129DBA
.text:CB129DBA loc_CB129DBA
.text:CB129DBA 8C F8 00 30 STRB.W R3, [R12]
.text:CB129DBE B9 F8 56 00 LDRH.W R0, [R9,#(word_CB21D246 - 0xCB21D1F0)]
.text:CB129DC2 A8 42 CMP R0, R5
.text:CB129DC4 30 D0 BEQ loc_CB129E28
.text:CB129DC6 B8 88 LDRH R0, [R7,#(dword_CB21D284 - 0xCB21D280)]
.text:CB129DC8 0D 6A LDR R5, [R1,#0x20]
.text:CB129DCA 7C 3A SUBS R2, #0x7C ; '|'
.text:CB129DCC 6A 01 LSLS R2, R5, #5
.text:CB129DCE C6 6E LDR R6, [R0,#0x6C]
.text:CB129DD0 89 F1 78 69+DCD 0x6978F189, 0x20A4F8D7, 0x22094350, 0xD1EC4550
.text:CB129DE0 2F E0 B loc_CB129E42
.text:CB129DE2
.text:CB129DE2 loc_CB129DE2
.text:CB129DE2 02 98 LDR R0, [SP,#8]
.text:CB129DE4 75 46 MOV R5, LR
.text:CB129DE6 04 9C LDR R4, [SP,#0x10]
.text:CB129DE8 43 F2 E0 2E+MOV LR, #0x89DD32E0
.text:CB129DE8 C8 F6 DD 1E
.text:CB129DF0 10 F8 08 00 LDRB.W R0, [R0,R8]
.text:CB129DF4 6A 30 ADDS R0, #0x6A ; 'j'
.text:CB129DF6 80 EA 08 00 EOR.W R0, R0, R8
.text:CB129DFA 18 44 ADD R0, R3
.text:CB129DFC 04 F8 08 00 STRB.W R0, [R4,R8]
.text:CB129E00 08 F1 01 08 ADD.W R8, R8, #1
.text:CB129E04 00 9C LDR R4, [SP]
.text:CB129E06 D4 F8 CC 00 LDR.W R0, [R4,#0xCC]
.text:CB129E0A D4 F8 20 41 LDR.W R4, [R4,#0x120]
.text:CB129E0E 44 43 MULS R4, R0
.text:CB129E10 03 98 LDR R0, [SP,#0xC]
.text:CB129E12 80 45 CMP R8, R0
.text:CB129E14 4F F0 09 00 MOV.W R0, #9
.text:CB129E18 38 BF IT CC
.text:CB129E1A 08 20 MOVCC R0, #8
.text:CB129E1C 74 45 CMP R4, LR
.text:CB129E1E AE 46 MOV LR, R5
.text:CB129E20 49 F6 9D 75 MOVW R5, #0x9F9D
.text:CB129E24 BA D0 BEQ loc_CB129D9C
.text:CB129E26 14 E0 B loc_CB129E52
.text:CB129E28
.text:CB129E28 loc_CB129E28
.text:CB129E28 10 22 MOVS R2, #0x10
.text:CB129E2A 20 E0 B loc_CB129E6E
.text:CB129E2C
.text:CB129E2C loc_CB129E2C
.text:CB129E2C BC 97 STR R7, [SP,#0x2F0]
.text:CB129E2E 4A 5B LDRH R2, [R1,R5]
.text:CB129E30 25 48 LDR R0, loc_CB129EC6+2
.text:CB129E32 7F 4E LDR R6, loc_CB12A02E+2
.text:CB129E34 05 E0 B loc_CB129E42
.text:CB129E36
.text:CB129E36 loc_CB129E36
.text:CB129E36 59 D1 BNE loc_CB129EEC
.text:CB129E38 FD 64 STR R5, [R7,#(off_CB21D2CC - 0xCB21D280)]
.text:CB129E3A A9 1F SUBS R1, R5, #6
.text:CB129E3C
.text:CB129E3C loc_CB129E3C
.text:CB129E3C FC CB LDM R3, {R2-R7}
.text:CB129E3E 3A 1F SUBS R2, R7, #4
.text:CB129E40 59 4A LDR R2, =unk_E0026909
.text:CB129E42
.text:CB129E42 loc_CB129E42
.text:CB129E42 1C 38 SUBS R0, #0x1C
.text:CB129E44 C9 2E CMP R6, #0xC9
.text:CB129E46 C7 92 STR R2, [SP,#0x31C]
.text:CB129E48 9D 3F SUBS R7, #0x9D
.text:CB129E4A 1B E8 DCW 0xE81B
.text:CB129E4C F6 DA BGE loc_CB129E3C
.text:CB129E4E
.text:CB129E4E loc_CB129E4E
.text:CB129E4E 10 2A CMP R2, #0x10
.text:CB129E50 0D DA BGE loc_CB129E6E
.text:CB129E52
.text:CB129E52 loc_CB129E52
.text:CB129E52 9C F8 00 40 LDRB.W R4, [R12]
.text:CB129E56 90 1C ADDS R0, R2, #2
.text:CB129E58 4F F0 00 08 MOV.W R8, #0
.text:CB129E5C 00 2C CMP R4, #0
.text:CB129E5E 08 BF IT EQ
.text:CB129E60 82 F0 06 00 EOREQ.W R0, R2, #6
.text:CB129E64 9E F8 27 40 LDRB.W R4, [LR,#(byte_CB21D277 - 0xCB21D250)]
.text:CB129E68 95 2C CMP R4, #0x95
.text:CB129E6A E4 D1 BNE loc_CB129E36
.text:CB129E6C 96 E7 B loc_CB129D9C
.text:CB129E6E
.text:CB129E6E loc_CB129E6E
.text:CB129E6E DB F8 D4 00 LDR.W R0, [R11,#(dword_CB21D354 - 0xCB21D280)]
.text:CB129E72 48 43 MULS R0, R1
.text:CB129E74 B0 42 CMP R0, R6
.text:CB129E76 D9 D0 BEQ loc_CB129E2C
.text:CB129E78 04 98 LDR R0, [SP,#0x10]
.text:CB129E7A 05 B0 ADD SP, SP, #0x14
.text:CB129E7C BD E8 F0 8F POP.W {R4-R11,PC}
注册Native方法:
解密Native方法名
.data.rel.ro:CB215C28 ; "_genericNt"
.data.rel.ro:CB215C2C 5E 31 22 CB DCD aLjavaLangStrin ; "(Ljava/lang/String;I)I"
.data.rel.ro:CB215C30 B5 42 14 CB DCD _genericNt_sub_CDDFF2B4+1
.data.rel.ro:CB215C34 4B 30 22 CB DCD aGenericnt2 ; "_genericNt2"
.data.rel.ro:CB215C38 33 30 22 CB DCD aILjavaLangStri ; "(I[Ljava/lang/String;)I"
.data.rel.ro:CB215C3C 09 43 14 CB DCD _genericNt2_sub_CDDFF308+1
.data.rel.ro:CB215C40 27 30 22 CB off_CB215C40 DCD aGenericnt3 ; DATA XREF: RegNative_sub_CDB0C110+72↑o
.data.rel.ro:CB215C40 ; "_genericNt3"
.data.rel.ro:CB215C44 0F 30 22 CB DCD aIBLjavaLangStr ; "(I[B)Ljava/lang/String;"
.data.rel.ro:CB215C48 01 45 14 CB DCD _genericNt3_sub_CDDFF500+1
.data.rel.ro:CB215C4C 0A 30 22 CB DCD aOnsc ; "onSc"
.data.rel.ro:CB215C50 AF 2F 22 CB DCD aLandroidHardwa ; "(Landroid/hardware/SensorManager;Lcom/a"...
.data.rel.ro:CB215C54 19 46 14 CB DCD onSc_sub_CDDFF618+1
注册方法
.text:CB1381D8 F1 F7 AA FD BL DecString_loc_CEE73D30 ; com/aliyun/TigerTally/TigerTallyAPI
.text:CB1381DC 03 99 LDR R1, [SP,#0x68+var_5C]
.text:CB1381DE 04 22 MOVS R2, #4
.text:CB1381E0 0B F0 3A FF BL RegNative_loc_CEE8E058 //RegisterNatives
.text:CB1381E4 0C 49 LDR R1, =(__stack_chk_guard_ptr - 0xCB1381EC)
.text:CB1381E6 12 9A LDR R2, [SP,#0x68+var_20]
获取java层传入的sdk appkey
.text:CB131490 getString_sub_CF0FF490
.text:CB131490
.text:CB131490 var_30= -0x30
.text:CB131490 var_28= -0x28
.text:CB131490 var_21= -0x21
.text:CB131490 var_20= -0x20
.text:CB131490
.text:CB131490 ; __unwind { // CB1C8914
.text:CB131490 F0 B5 PUSH {R4-R7,LR}
.text:CB131492 03 AF ADD R7, SP, #0xC
.text:CB131494 2D E9 00 0F PUSH.W {R8-R11}
.text:CB131498 85 B0 SUB SP, SP, #0x14
.text:CB13149A 04 46 MOV R4, R0
.text:CB13149C 38 48 LDR R0, =(__stack_chk_guard_ptr - 0xCB1314A6)
.text:CB13149E 0E 46 MOV R6, R1
.text:CB1314A0 91 46 MOV R9, R2
.text:CB1314A2 78 44 ADD R0, PC ; __stack_chk_guard_ptr
.text:CB1314A4 00 2E CMP R6, #0
.text:CB1314A6 00 68 LDR R0, [R0] ; __stack_chk_guard
.text:CB1314A8 00 68 LDR R0, [R0]
.text:CB1314AA 07 F8 21 3C STRB.W R3, [R7,#var_21]
.text:CB1314AE 04 90 STR R0, [SP,#0x30+var_20]
.text:CB1314B0 24 D0 BEQ loc_CB1314FC
.text:CB1314B2 B9 F1 00 0F CMP.W R9, #0
.text:CB1314B6 21 D0 BEQ loc_CB1314FC
.text:CB1314B8 30 68 LDR R0, [R6]
.text:CB1314BA A7 F1 21 02 SUB.W R2, R7, #-var_21
.text:CB1314BE 49 46 MOV R1, R9
.text:CB1314C0 D0 F8 A4 32 LDR.W R3, [R0,#0x2A4]
.text:CB1314C4 30 46 MOV R0, R6
.text:CB1314C6 98 47 BLX R3 ; GetStringUTFChars
.text:CB1314C8 80 46 MOV R8, R0
.text:CB1314CA B8 F1 00 0F CMP.W R8, #0
.text:CB1314CE 15 D0 BEQ loc_CB1314FC
.text:CB1314D0 00 20 MOVS R0, #0
.text:CB1314D2 02 90 STR R0, [SP,#0x30+var_28]
.text:CB1314D4 CD E9 00 00 STRD.W R0, R0, [SP,#0x30+var_30]
.text:CB1314D8 40 46 MOV R0, R8 ; s
.text:CB1314DA F7 F7 CE E8 BLX strlen
.text:CB1314DE 05 46 MOV R5, R0
.text:CB1314E0 15 F1 10 0F CMN.W R5, #0x10
.text:CB1314E4 3D D2 BCS loc_CB131562
.text:CB1314E6 0B 2D CMP R5, #0xB
.text:CB1314E8 0D D2 BCS loc_CB131506
.text:CB1314EA 68 00 LSLS R0, R5, #1
.text:CB1314EC 00 2D CMP R5, #0
.text:CB1314EE 8D F8 00 00 STRB.W R0, [SP,#0x30+var_30]
.text:CB1314F2 68 46 MOV R0, SP
.text:CB1314F4 40 F0 01 0A ORR.W R10, R0, #1
.text:CB1314F8 13 D1 BNE loc_CB131522
.text:CB1314FA 17 E0 B loc_CB13152C
.text:CB1314FC
.text:CB1314FC loc_CB1314FC
.text:CB1314FC 00 20 MOVS R0, #0
.text:CB1314FE 20 60 STR R0, [R4]
.text:CB131500 60 60 STR R0, [R4,#4]
.text:CB131502 A0 60 STR R0, [R4,#8]
.text:CB131504 20 E0 B loc_CB131548
.text:CB131506 loc_CB131506
.text:CB131506 05 F1 10 00 ADD.W R0, R5, #0x10
.text:CB13150A 20 F0 0F 0B BIC.W R11, R0, #0xF
.text:CB13150E 58 46 MOV R0, R11
.text:CB131510 98 F0 BA FF BL malloc_sub_CF198488
.text:CB131514 82 46 MOV R10, R0
.text:CB131516 4B F0 01 00 ORR.W R0, R11, #1
.text:CB13151A CD F8 08 A0 STR.W R10, [SP,#0x30+var_28]
.text:CB13151E CD E9 00 05 STRD.W R0, R5, [SP,#0x30+var_30]
.text:CB131522
.text:CB131522 loc_CB131522
.text:CB131522 50 46 MOV R0, R10
.text:CB131524 41 46 MOV R1, R8
.text:CB131526 2A 46 MOV R2, R5
.text:CB131528 F7 F7 12 E9 BLX __aeabi_memcpy
.text:CB13152C
.text:CB13152C loc_CB13152C
.text:CB13152C 00 20 MOVS R0, #0
.text:CB13152E 0A F8 05 00 STRB.W R0, [R10,R5]
.text:CB131532 30 68 LDR R0, [R6]
.text:CB131534 D0 F8 A8 32 LDR.W R3, [R0,#0x2A8]
.text:CB131538 30 46 MOV R0, R6
.text:CB13153A 49 46 MOV R1, R9
.text:CB13153C 42 46 MOV R2, R8
.text:CB13153E 98 47 BLX R3 ; ReleaseStringUTFChars
.text:CB131540 68 46 MOV R0, SP
.text:CB131542 90 E8 0E 00 LDM.W R0, {R1-R3}
.text:CB131546 0E C4 STM R4!, {R1-R3}
.text:CB131548
.text:CB131548 loc_CB131548
.text:CB131548 0E 48 LDR R0, =(__stack_chk_guard_ptr - 0xCB131550)
.text:CB13154A 04 99 LDR R1, [SP,#0x30+var_20]
.text:CB13154C 78 44 ADD R0, PC ; __stack_chk_guard_ptr
.text:CB13154E 00 68 LDR R0, [R0] ; __stack_chk_guard
.text:CB131550 00 68 LDR R0, [R0]
.text:CB131552 40 1A SUBS R0, R0, R1
.text:CB131554 02 BF ITTT EQ
.text:CB131556 05 B0 ADDEQ SP, SP, #0x14
.text:CB131558 BD E8 00 0F POPEQ.W {R8-R11}
.text:CB13155C F0 BD POPEQ {R4-R7,PC}
获取到的sdk appkey
E2CAD3C0 73 76 67 46 39 77 6B 42 42 62 36 32 62 7A 70 78 svgF9wkBBb62bzpx
E2CAD3D0 41 68 55 75 75 37 70 73 4F 6C 57 35 37 52 79 77 AhUuu7psOlW57Ryw
E2CAD3E0 53 52 49 38 73 4C 52 6C 62 43 76 4F 62 6C 50 4D SRI8sLRlbCvOblPM
E2CAD3F0 79 6D 6E 69 63 47 71 48 6B 54 34 69 51 4C 30 71 ymnicGqHkT4iQL0q
E2CAD400 62 2D 69 55 54 52 33 43 4E 6E 67 64 50 71 73 43 b-iUTR3CNngdPqsC
E2CAD410 35 6C 7A 31 62 45 61 46 4C 78 54 35 47 53 69 33 5lz1bEaFLxT5GSi3
E2CAD420 51 66 57 6B 5A 35 64 63 67 69 4F 6C 39 61 5F 6A QfWkZ5dcgiOl9a_j
E2CAD430 47 5A 4D 75 4E 62 41 61 52 41 55 76 43 74 52 7A GZMuNbFaSAUvCtRz
E2CAD440 4E 54 6A 57 54 4E 30 56 5F 62 51 63 79 75 72 52 NTjWTN0V_bQcyurR
E2CAD450 72 6D 4F 70 30 41 3D 3D 00 00 00 00 00 00 31 31 rmOp0A==
Base64与AES解密appkey
.text:CB18E1C0 DecAppkey_SplitStr_sub_CF15C1C0
.text:CB18E1C0
.text:CB18E1C0 var_150= -0x150
.text:CB18E1C0 var_148= -0x148
.text:CB18E1C0 ptr= -0x144
.text:CB18E1C0 s= -0x140
.text:CB18E1C0 var_13C= -0x13C
.text:CB18E1C0 var_138= -0x138
.text:CB18E1C0 var_134= -0x134
.text:CB18E1C0 var_130= -0x130
.text:CB18E1C0 var_12C= -0x12C
.text:CB18E1C0 var_128= -0x128
.text:CB18E1C0 var_124= -0x124
.text:CB18E1C0 var_120= -0x120
.text:CB18E1C0 var_11C= -0x11C
.text:CB18E1C0 var_118= -0x118
.text:CB18E1C0 var_114= -0x114
.text:CB18E1C0 var_110= -0x110
.text:CB18E1C0 var_10C= -0x10C
.text:CB18E1C0 var_108= -0x108
.text:CB18E1C0 var_104= -0x104
.text:CB18E1C0 var_100= -0x100
.text:CB18E1C0 var_FC= -0xFC
.text:CB18E1C0 var_F8= -0xF8
.text:CB18E1C0 var_F4= -0xF4
.text:CB18E1C0 var_F0= -0xF0
.text:CB18E1C0 anonymous_0= -0xEC
.text:CB18E1C0 var_E8= -0xE8
.text:CB18E1C0 var_E4= -0xE4
.text:CB18E1C0 var_E0= -0xE0
.text:CB18E1C0 var_20= -0x20
.text:CB18E1C0
.text:CB18E1C0 ; __unwind { // CB1C8914
.text:CB18E1C0 F0 B5 PUSH {R4-R7,LR}
.text:CB18E1C2 03 AF ADD R7, SP, #0xC
.text:CB18E1C4 2D E9 00 0F PUSH.W {R8-R11}
.text:CB18E1C8 CD B0 SUB SP, SP, #0x134
.text:CB18E1CA 81 46 MOV R9, R0
.text:CB18E1CC DF F8 0C 08 LDR.W R0, =(__stack_chk_guard_ptr - 0xCB18E1D6)
.text:CB18E1D0 88 46 MOV R8, R1
.text:CB18E1D2 78 44 ADD R0, PC ; __stack_chk_guard_ptr
.text:CB18E1D4 00 68 LDR R0, [R0] ; __stack_chk_guard
.text:CB18E1D6 00 68 LDR R0, [R0]
.text:CB18E1D8 4C 90 STR R0, [SP,#0x150+var_20]
.text:CB18E1DA 00 F0 25 FC BL DecString_loc_C5D9FA28
.text:CB18E1DE 00 26 MOVS R6, #0
.text:CB18E1E0 CB 46 MOV R11, R9
.text:CB18E1E2 48 46 MOV R0, R9
.text:CB18E1E4 2C 21 MOVS R1, #0x2C ; ','
.text:CB18E1E6 C9 F8 94 60 STR.W R6, [R9,#0x94]
.text:CB18E1EA 4B F8 90 6F STR.W R6, [R11,#0x90]!
.text:CB18E1EE 9A F7 7A EA BLX __aeabi_memclr4
.text:CB18E1F2 09 F1 38 0A ADD.W R10, R9, #0x38 ; '8'
.text:CB18E1F6 54 21 MOVS R1, #0x54 ; 'T'
.text:CB18E1F8 50 46 MOV R0, R10
.text:CB18E1FA 9A F7 74 EA BLX __aeabi_memclr4
.text:CB18E1FE 48 46 MOV R0, R9
.text:CB18E200 C9 F8 8C B0 STR.W R11, [R9,#0x8C]
.text:CB18E204 40 F8 9C 6F STR.W R6, [R0,#0x9C]!
.text:CB18E208 09 F1 C8 04 ADD.W R4, R9, #0xC8
.text:CB18E20C 17 90 STR R0, [SP,#0x150+var_F4]
.text:CB18E20E 4D 46 MOV R5, R9
.text:CB18E210 C9 F8 98 00 STR.W R0, [R9,#0x98]
.text:CB18E214 48 46 MOV R0, R9
.text:CB18E216 40 F8 A8 6F STR.W R6, [R0,#0xA8]!
.text:CB18E21A 30 21 MOVS R1, #0x30 ; '0'
.text:CB18E21C C9 F8 A0 60 STR.W R6, [R9,#0xA0]
.text:CB18E220 16 90 STR R0, [SP,#0x150+var_F8]
.text:CB18E222 C9 F8 A4 00 STR.W R0, [R9,#0xA4]
.text:CB18E226 48 46 MOV R0, R9
.text:CB18E228 40 F8 B4 6F STR.W R6, [R0,#0xB4]!
.text:CB18E22C C9 F8 AC 60 STR.W R6, [R9,#0xAC]
.text:CB18E230 15 90 STR R0, [SP,#0x150+var_FC]
.text:CB18E232 C9 F8 B0 00 STR.W R0, [R9,#0xB0]
.text:CB18E236 48 46 MOV R0, R9
.text:CB18E238 C9 F8 C4 60 STR.W R6, [R9,#0xC4]
.text:CB18E23C 40 F8 C0 6F STR.W R6, [R0,#0xC0]!
.text:CB18E240 C9 F8 B8 60 STR.W R6, [R9,#0xB8]
.text:CB18E244 14 90 STR R0, [SP,#0x150+var_100]
.text:CB18E246 C9 F8 BC 00 STR.W R0, [R9,#0xBC]
.text:CB18E24A 20 46 MOV R0, R4
.text:CB18E24C C9 E9 40 66 STRD.W R6, R6, [R9,#0x100]
.text:CB18E250 45 F8 FC 6F STR.W R6, [R5,#0xFC]!
.text:CB18E254 9A F7 46 EA BLX __aeabi_memclr4
.text:CB18E258 4B 46 MOV R3, R9
.text:CB18E25A 0B 95 STR R5, [SP,#0x150+var_124]
.text:CB18E25C 2E 80 STRH R6, [R5]
.text:CB18E25E 23 F8 5C 6F STRH.W R6, [R3,#0x5C]!
.text:CB18E262 18 46 MOV R0, R3
.text:CB18E264 1D 46 MOV R5, R3
.text:CB18E266 20 F8 24 6F STRH.W R6, [R0,#0x24]!
.text:CB18E26A 0C 90 STR R0, [SP,#0x150+var_120]
.text:CB18E26C 18 46 MOV R0, R3
.text:CB18E26E 20 F8 18 6F STRH.W R6, [R0,#0x18]!
.text:CB18E272 0D 90 STR R0, [SP,#0x150+var_11C]
.text:CB18E274 25 F8 0C 6F STRH.W R6, [R5,#0xC]!
.text:CB18E278 13 F8 3C 0C LDRB.W R0, [R3,#-0x3C]
.text:CB18E27C C0 07 LSLS R0, R0, #0x1F
.text:CB18E27E 02 D1 BNE loc_CB18E286
.text:CB18E280 A9 F8 20 60 STRH.W R6, [R9,#0x20]
.text:CB18E284 04 E0 B loc_CB18E290
.text:CB18E286
.text:CB18E286 loc_CB18E286
.text:CB18E286 D9 F8 28 00 LDR.W R0, [R9,#0x28]
.text:CB18E28A 06 70 STRB R6, [R0]
.text:CB18E28C C9 F8 24 60 STR.W R6, [R9,#0x24]
.text:CB18E290
.text:CB18E290 loc_CB18E290
.text:CB18E290 99 F8 00 00 LDRB.W R0, [R9]
.text:CB18E294 C0 07 LSLS R0, R0, #0x1F
.text:CB18E296 03 D1 BNE loc_CB18E2A0
.text:CB18E298 00 20 MOVS R0, #0
.text:CB18E29A A9 F8 00 00 STRH.W R0, [R9]
.text:CB18E29E 05 E0 B loc_CB18E2AC
.text:CB18E2A0
.text:CB18E2A0 loc_CB18E2A0
.text:CB18E2A0 D9 F8 08 00 LDR.W R0, [R9,#8]
.text:CB18E2A4 00 21 MOVS R1, #0
.text:CB18E2A6 01 70 STRB R1, [R0]
.text:CB18E2A8 C9 F8 04 10 STR.W R1, [R9,#4]
.text:CB18E2AC
.text:CB18E2AC loc_CB18E2AC
.text:CB18E2AC 09 F1 BC 00 ADD.W R0, R9, #0xBC
.text:CB18E2B0 11 90 STR R0, [SP,#0x150+var_10C]
.text:CB18E2B2 09 F1 B0 00 ADD.W R0, R9, #0xB0
.text:CB18E2B6 12 90 STR R0, [SP,#0x150+var_108]
.text:CB18E2B8 09 F1 A4 00 ADD.W R0, R9, #0xA4
.text:CB18E2BC 13 90 STR R0, [SP,#0x150+var_104]
.text:CB18E2BE 09 F1 98 00 ADD.W R0, R9, #0x98
.text:CB18E2C2 10 90 STR R0, [SP,#0x150+var_110]
.text:CB18E2C4 99 F8 0C 10 LDRB.W R1, [R9,#0xC]
.text:CB18E2C8 09 F1 8C 00 ADD.W R0, R9, #0x8C
.text:CB18E2CC 07 94 STR R4, [SP,#0x150+var_134]
.text:CB18E2CE C9 07 LSLS R1, R1, #0x1F
.text:CB18E2D0 03 D1 BNE loc_CB18E2DA
.text:CB18E2D2 00 21 MOVS R1, #0
.text:CB18E2D4 A9 F8 0C 10 STRH.W R1, [R9,#0xC]
.text:CB18E2D8 05 E0 B loc_CB18E2E6
.text:CB18E2DA
.text:CB18E2DA loc_CB18E2DA
.text:CB18E2DA D9 F8 14 20 LDR.W R2, [R9,#0x14]
.text:CB18E2DE 00 21 MOVS R1, #0
.text:CB18E2E0 11 70 STRB R1, [R2]
.text:CB18E2E2 C9 F8 10 10 STR.W R1, [R9,#0x10]
.text:CB18E2E6
.text:CB18E2E6 loc_CB18E2E6
.text:CB18E2E6 99 F8 38 10 LDRB.W R1, [R9,#0x38]
.text:CB18E2EA 00 26 MOVS R6, #0
.text:CB18E2EC A3 F1 40 02 SUB.W R2, R3, #0x40 ; '@'
.text:CB18E2F0 C9 F8 34 60 STR.W R6, [R9,#0x34]
.text:CB18E2F4 A3 F1 44 04 SUB.W R4, R3, #0x44 ; 'D'
.text:CB18E2F8 0A 94 STR R4, [SP,#0x150+var_128]
.text:CB18E2FA C9 07 LSLS R1, R1, #0x1F
.text:CB18E2FC 08 92 STR R2, [SP,#0x150+var_130]
.text:CB18E2FE CD E9 0E 53 STRD.W R5, R3, [SP,#0x150+var_118]
.text:CB18E302 02 D1 BNE loc_CB18E30A
.text:CB18E304 AA F8 00 60 STRH.W R6, [R10]
.text:CB18E308 04 E0 B loc_CB18E314
.text:CB18E30A
.text:CB18E30A loc_CB18E30A
.text:CB18E30A D9 F8 40 10 LDR.W R1, [R9,#0x40]
.text:CB18E30E 0E 70 STRB R6, [R1]
.text:CB18E310 C9 F8 3C 60 STR.W R6, [R9,#0x3C]
.text:CB18E314
.text:CB18E314 loc_CB18E314
.text:CB18E314 D9 F8 90 10 LDR.W R1, [R9,#0x90]
.text:CB18E318 D9 F8 44 30 LDR.W R3, [R9,#0x44]
.text:CB18E31C D9 F8 50 20 LDR.W R2, [R9,#0x50]
.text:CB18E320 C9 F8 48 30 STR.W R3, [R9,#0x48]
.text:CB18E324 C9 F8 54 20 STR.W R2, [R9,#0x54]
.text:CB18E328 06 90 STR R0, [SP,#0x150+var_138]
.text:CB18E32A 00 F0 6F FF BL nop_sub_CF15D20C
.text:CB18E32E 00 26 MOVS R6, #0
.text:CB18E330 D9 F8 9C 10 LDR.W R1, [R9,#0x9C]
.text:CB18E334 CD F8 24 B0 STR.W R11, [SP,#0x150+var_12C]
.text:CB18E338 C9 E9 23 B6 STRD.W R11, R6, [R9,#0x8C]
.text:CB18E33C C9 F8 94 60 STR.W R6, [R9,#0x94]
.text:CB18E340 DD F8 40 B0 LDR.W R11, [SP,#0x150+var_110]
.text:CB18E344 58 46 MOV R0, R11
.text:CB18E346 00 F0 61 FF BL nop_sub_CF15D20C
.text:CB18E34A 17 98 LDR R0, [SP,#0x150+var_F4]
.text:CB18E34C D9 F8 B4 10 LDR.W R1, [R9,#0xB4]
.text:CB18E350 C9 E9 26 06 STRD.W R0, R6, [R9,#0x98]
.text:CB18E354 C9 F8 A0 60 STR.W R6, [R9,#0xA0]
.text:CB18E358 12 98 LDR R0, [SP,#0x150+var_108]
.text:CB18E35A 00 F0 57 FF BL nop_sub_CF15D20C
.text:CB18E35E 15 98 LDR R0, [SP,#0x150+var_FC]
.text:CB18E360 D9 F8 A8 10 LDR.W R1, [R9,#0xA8]
.text:CB18E364 C9 E9 2C 06 STRD.W R0, R6, [R9,#0xB0]
.text:CB18E368 C9 F8 B8 60 STR.W R6, [R9,#0xB8]
.text:CB18E36C 13 98 LDR R0, [SP,#0x150+var_104]
.text:CB18E36E 00 F0 4D FF BL nop_sub_CF15D20C
.text:CB18E372 16 98 LDR R0, [SP,#0x150+var_F8]
.text:CB18E374 D9 F8 C0 10 LDR.W R1, [R9,#0xC0]
.text:CB18E378 C9 E9 29 06 STRD.W R0, R6, [R9,#0xA4]
.text:CB18E37C C9 F8 AC 60 STR.W R6, [R9,#0xAC]
.text:CB18E380 11 98 LDR R0, [SP,#0x150+var_10C]
.text:CB18E382 00 F0 43 FF BL nop_sub_CF15D20C
.text:CB18E386 14 9D LDR R5, [SP,#0x150+var_100]
.text:CB18E388 2C 24 MOVS R4, #0x2C ; ','
.text:CB18E38A D9 F8 C8 00 LDR.W R0, [R9,#0xC8]
.text:CB18E38E D9 F8 D4 10 LDR.W R1, [R9,#0xD4]
.text:CB18E392 D9 F8 E0 20 LDR.W R2, [R9,#0xE0]
.text:CB18E396 D9 F8 EC 30 LDR.W R3, [R9,#0xEC]
.text:CB18E39A C9 E9 2F 56 STRD.W R5, R6, [R9,#0xBC]
.text:CB18E39E 64 25 MOVS R5, #0x64 ; 'd'
.text:CB18E3A0 C9 F8 C4 60 STR.W R6, [R9,#0xC4]
.text:CB18E3A4 89 F8 1C 61 STRB.W R6, [R9,#0x11C]
.text:CB18E3A8 89 F8 32 60 STRB.W R6, [R9,#0x32]
.text:CB18E3AC A9 F8 30 60 STRH.W R6, [R9,#0x30]
.text:CB18E3B0 C9 F8 2C 60 STR.W R6, [R9,#0x2C]
.text:CB18E3B4 48 F2 1F 56+MOV R6, #0x51EB851F
.text:CB18E3B4 C5 F2 EB 16
.text:CB18E3BC C9 F8 CC 00 STR.W R0, [R9,#0xCC]
.text:CB18E3C0 C9 F8 D8 10 STR.W R1, [R9,#0xD8]
.text:CB18E3C4 C9 F8 E4 20 STR.W R2, [R9,#0xE4]
.text:CB18E3C8 C9 F8 F0 30 STR.W R3, [R9,#0xF0]
.text:CB18E3CC
.text:CB18E3CC loc_CB18E3CC
.text:CB18E3CC 9A F7 E0 EA BLX arc4random
.text:CB18E3D0 A0 FB 06 12 UMULL.W R1, R2, R0, R6
.text:CB18E3D4 51 09 LSRS R1, R2, #5
.text:CB18E3D6 01 FB 15 00 MLS.W R0, R1, R5, R0
.text:CB18E3DA A4 F1 2C 01 SUB.W R1, R4, #0x2C ; ','
.text:CB18E3DE 06 29 CMP R1, #6
.text:CB18E3E0 09 F8 04 00 STRB.W R0, [R9,R4]
.text:CB18E3E4 04 F1 01 00 ADD.W R0, R4, #1
.text:CB18E3E8 04 46 MOV R4, R0
.text:CB18E3EA EF D3 BCC loc_CB18E3CC
.text:CB18E3EC 00 20 MOVS R0, #0
.text:CB18E3EE 1B 90 STR R0, [SP,#0x150+var_E4]
.text:CB18E3F0 40 46 MOV R0, R8 ; s
.text:CB18E3F2 9A F7 42 E9 BLX strlen
.text:CB18E3F6 01 46 MOV R1, R0
.text:CB18E3F8 1B AA ADD R2, SP, #0x150+var_E4
.text:CB18E3FA 40 46 MOV R0, R8
.text:CB18E3FC 01 23 MOVS R3, #1
.text:CB18E3FE FF F7 77 FD BL decBase64_sub_CF15BEF0 ; R3:1解密,R3:0加密
.text:CB18E402 80 46 MOV R8, R0
.text:CB18E404 DF F8 D8 05 LDR.W R0, =(off_CB219D7C - 0xCB18E412)
.text:CB18E408 2B 23 MOVS R3, #0x2B ; '+'
.text:CB18E40A DF F8 D8 15 LDR.W R1, =(off_CB219D80 - 0xCB18E418)
.text:CB18E40E 78 44 ADD R0, PC ; off_CB219D7C
.text:CB18E410 DF F8 D4 25 LDR.W R2, =(unk_CB226C40 - 0xCB18E41C)
.text:CB18E414 79 44 ADD R1, PC ; off_CB219D80
.text:CB18E416 00 68 LDR R0, [R0] ; unk_DE32430B
.text:CB18E418 7A 44 ADD R2, PC ; unk_CB226C40
.text:CB18E41A 09 68 LDR R1, [R1] ; unk_DE30CE9A
.text:CB18E41C 00 92 STR R2, [SP,#0x150+var_150]
.text:CB18E41E 11 22 MOVS R2, #0x11
.text:CB18E420 00 F0 F2 FD BL DecString_loc_CF15D008 ; 24e96202f2d6fe64,aeskey
.text:CB18E424 DF F8 C8 15 LDR.W R1, =(off_CB219D88 - 0xCB18E434)
.text:CB18E428 05 46 MOV R5, R0
.text:CB18E42A DF F8 C0 05 LDR.W R0, =(off_CB219D84 - 0xCB18E43A)
.text:CB18E42E 6B 23 MOVS R3, #0x6B ; 'k'
.text:CB18E430 79 44 ADD R1, PC ; off_CB219D88
.text:CB18E432 DF F8 C0 25 LDR.W R2, =(unk_CB226C41 - 0xCB18E43C)
.text:CB18E436 78 44 ADD R0, PC ; off_CB219D84
.text:CB18E438 7A 44 ADD R2, PC ; unk_CB226C41
.text:CB18E43A 00 68 LDR R0, [R0] ; unk_DE3242FA
.text:CB18E43C 09 68 LDR R1, [R1] ; unk_DE30CE7A
.text:CB18E43E 00 92 STR R2, [SP,#0x150+var_150]
.text:CB18E440 11 22 MOVS R2, #0x11
.text:CB18E442 00 F0 E1 FD BL DecString_loc_CF15D008 ; 632870a7427e3bdc iv
.text:CB18E446 02 46 MOV R2, R0
.text:CB18E448 1C A8 ADD R0, SP, #0x150+var_E0
.text:CB18E44A 29 46 MOV R1, R5
.text:CB18E44C EF F7 CC FA BL AES_initkey_sub_CDB519E8 ; R1:KEY,R2:IV
.text:CB18E450 1B 9A LDR R2, [SP,#0x150+var_E4]
.text:CB18E452 1C A8 ADD R0, SP, #0x150+var_E0
.text:CB18E454 41 46 MOV R1, R8
.text:CB18E456 F0 F7 9B FC BL AES_DecAppkey_sub_CF14CD90 ; r0:key,r1:数据,r2:大小,r3:初始化key,r4:大小
.text:CB18E45A DF F8 9C 05 LDR.W R0, =(off_CB219D8C - 0xCB18E46A)
.text:CB18E45E 02 22 MOVS R2, #2
.text:CB18E460 DF F8 98 15 LDR.W R1, =(off_CB219D90 - 0xCB18E470)
.text:CB18E464 5C 23 MOVS R3, #0x5C ; '\'
.text:CB18E466 78 44 ADD R0, PC ; off_CB219D8C
.text:CB18E468 DF F8 94 65 LDR.W R6, =(unk_CB226C44 - 0xCB18E474)
.text:CB18E46C 79 44 ADD R1, PC ; off_CB219D90
.text:CB18E46E 00 68 LDR R0, [R0] ; unk_DE32426C
.text:CB18E470 7E 44 ADD R6, PC ; unk_CB226C44
.text:CB18E472 09 68 LDR R1, [R1] ; unk_DE30CE6B
.text:CB18E474 00 96 STR