笔者由于学校热水器费用过高 :( 所以想看看热水器是如何工作的 :D ,故有此篇文章
JEB 使用无静态读取解密
不知道为什么程序采用了非 BLE 的蓝牙(普通蓝牙),所以程序代码要看 bt 的而不是 ble 的
似乎是 bt 和 BLE 的代码写反了(?
特别感谢:
782K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6J5k6i4q4S2j5X3I4W2i4K6u0W2j5$3!0E0i4K6u0r3P5X3S2Q4x3X3c8o6e0W2)9J5c8R3`.`. 提供的免费支持!(好用)
使用 wx sdk,获取 code 之后访问 oauth2 获取 identifier 值登录
a44K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0K6i4K6u0W2N6$3g2A6P5r3W2F1i4K6u0W2M7i4q4Q4x3X3g2U0L8$3#2Q4x3V1k6V1L8$3y4Q4x3V1k6G2M7r3I4S2N6r3k6G2M7X3#2Q4x3V1k6y4L8$3u0A6L8r3g2Q4y4h3k6m8M7s2m8Q4x3V1k6i4k6f1y4Z5j5i4c8Q4y4h3k6x3L8$3N6A6L8W2)9J5c8V1c8W2N6X3g2D9L8%4m8E0k6h3&6@1i4K6g2X3c8%4g2A6k6r3g2Q4x3X3g2Z5N6r3#2D9
MD5(input) 后取后十位
以以下字段举例,首先键需要按照字典序进行排序,然后字符串拼接,<> 是不需要的
以上文本做一次 md5 后再做一次 md5,其中两次 md5 都是小写 32 长度
广告屏蔽
开发者开启 HCI 蓝牙日志,kill 一下蓝牙的进程,看看有没有该文件
/data/misc/bluetooth/logs/btsnoop_hci.log
提取出来之后放到 wireshark 里面,可能需要安装 f43K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6D9k6h3q4J5L8W2)9J5k6h3#2A6j5%4u0G2M7$3!0X3N6q4)9J5k6h3y4G2L8g2)9J5c8Y4A6Z5i4K6u0V1j5$3&6Q4x3V1k6%4K9h3&6V1L8%4N6K6i4K6u0V1K9r3q4J5k6s2N6S2M7X3g2Q4x3V1k6V1M7X3W2$3k6i4u0K6i4K6u0r3j5X3I4#2k6i4c8G2L8%4c8Z5i4K6u0r3N6r3g2K6N6r3W2F1k6#2)9J5k6r3u0@1M7q4)9J5k6s2y4W2N6s2g2H3i4K6u0V1M7r3q4U0K9$3q4Y4k6b7`.`. 、wireshark,使用 "C:\BTP\v1.14.0\x86\btvs.exe" 工具打开进行分析
wireshark 筛选通信
bluetooth.dst==<hide> || bluetooth.src == <hide>
没什么难点,主要是代码量确实大
BathingBtActivity.r3 重写 com.klcxkj.zqxy.ui.device.base.BaseDeviceActivity.r3
最主要的处理接收数据的地方是 case 2,即 AnalyTools.analyWaterDatas
通过分析,我们可以解析蓝牙设备返回的数据
解析完成之后,大多数都会执行 waterCodeListener0 的函数,这些函数定义在上面的 BathingBtActivity 类中
以查询设备信息举例,当 AnalyTools.analyWaterDatas 分析完查询设备的数据之后会调用
chaxueNewshebeiOnback ,该函数会按照 deviceState 和 mayDeviceType 的值来执行不同的功能(逻辑派发)
例如当 deviceState 为 0 且 mayDeviceType 为 0 时,下订单然后开启设备(开启热水),即
api 请求均在 BaseDeviceActivity 中实现
请求无误后执行 this.ac.parseDownRate(downRateResponse0);
该函数位于 BathingBtActivity
可以看到接收到数据之后执行 sendCommandOpenWater()
最终我们定位到一个发送数据的类,这里定义了数据如何被发送
当向热水器设备发送 downFateToDev 生成的数据之后,热水器被开启
同理,调用 caijishuju 获取返回数据之后上传数据到 upload api 即可结束计费
s 固定为
返回数据
389K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6A6b7$3!0V1K9h3&6Y4b7X3!0&6P5g2)9J5c8V1E0x3b7#2S2w2d9W2)9J5k6q4N6S2N6r3g2J5i4K6u0r3j5X3I4G2j5W2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8W2!0q4z5q4)9&6x3#2)9&6c8q4!0q4y4#2)9^5z5g2)9&6z5g2!0q4y4W2)9&6x3#2)9^5c8q4!0q4y4q4!0n7c8q4)9&6b7#2!0q4z5q4!0m8c8W2!0n7y4q4!0q4y4W2)9&6z5q4)9^5c8g2)9J5k6i4c8^5N6l9`.`.
453K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6*7K9r3W2I4N6h3q4F1L8r3!0Q4x3V1k6e0c8p5E0c8h3V1&6W2N6s2N6G2M7X3E0a6k6X3k6D9K9h3&6W2
POST /user/login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: v3-api.china-qzxy.cn
User-Agent: okhttp/4.2.2
identifier=oxxxxx-PXXXX&password=98ECF8427E&phoneSystem=android&type=1&version=<hide>
POST /user/login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: v3-api.china-qzxy.cn
User-Agent: okhttp/4.2.2
identifier=oxxxxx-PXXXX&password=98ECF8427E&phoneSystem=android&type=1&version=<hide>
POST /user/login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: v3-api.china-qzxy.cn
User-Agent: okhttp/4.2.2
identifier=&password=XXXXXXXXXX&phoneSystem=android&telephone=1xxxxxxxxxx&type=0&version=<hide>
POST /user/login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: v3-api.china-qzxy.cn
User-Agent: okhttp/4.2.2
identifier=&password=XXXXXXXXXX&phoneSystem=android&telephone=1xxxxxxxxxx&type=0&version=<hide>
{
"success": true,
"errorCode": 0,
"errorMessage": "成功",
"data": {
"userId": <hide>,
"telephone": "<hide>",
"alias": "<hide>",
"loginCode": "<hide>",
"tags": "<hide>",
"ioaw": 0,
"userAccount": {
"projectId": <hide>,
"accountId": <hide>,
"userId": <hide>,
"name": null,
"gender": 0,
"genderName": "未知",
"idCardNumber": null,
"gradeId": null,
"gradeName": null,
"deptType": null,
"classId": null,
"className": null,
"gradeClassFullName": "",
"oneCardAuthInfo": null,
"accountStatus": 0,
"accountRealMoney": <hide>,
"accountGivenMoney": 0,
"isCard": 0,
"cardStatus": -1
},
"quZhiCoin": null,
"aliPayAccount": null,
"aliPayName": null,
"loginType": 1,
"loginTime": "<hide>",
"phoneSystem": "android",
"version": "<hide>",
"loginIp": "<hide>"
}
}
{
"success": true,
"errorCode": 0,
"errorMessage": "成功",
"data": {
"userId": <hide>,
"telephone": "<hide>",
"alias": "<hide>",
"loginCode": "<hide>",
"tags": "<hide>",
"ioaw": 0,
"userAccount": {
"projectId": <hide>,
"accountId": <hide>,
"userId": <hide>,
"name": null,
"gender": 0,
"genderName": "未知",
"idCardNumber": null,
"gradeId": null,
"gradeName": null,
"deptType": null,
"classId": null,
"className": null,
"gradeClassFullName": "",
"oneCardAuthInfo": null,
"accountStatus": 0,
"accountRealMoney": <hide>,
"accountGivenMoney": 0,
"isCard": 0,
"cardStatus": -1
},
"quZhiCoin": null,
"aliPayAccount": null,
"aliPayName": null,
"loginType": 1,
"loginTime": "<hide>",
"phoneSystem": "android",
"version": "<hide>",
"loginIp": "<hide>"
}
}
GET /device/info/mac?macAddress=<hide>&phoneSystem=android&loginCode=<hide>&projectId=<hide>&version=<hide>&userId=<hide> HTTP/1.1
Host: v3-api.china-qzxy.cn
User-Agent: okhttp/4.2.2
>>>
{
"success": true,
"errorCode": 0,
"errorMessage": "成功",
"data": {
"deviceId": <hide>,
"deviceName": "<hide>",
"deviceDesc": "<hide>",
"areaId": 1,
"areaName": "<hide>",
"buildingId": <hide>,
"buildingName": "<hide>",
"floorId": <hide>,
"floorName": "<hide>",
"roomId": <hide>,
"roomName": "<hide>",
"isUse": 1,
"smallTypeId": 1,
"smallTypeName": "<hide>",
"bigTypeId": 4,
"bigTypeName": "<hide>",
"projectId": <hide>,
"projectName": "<hide>",
"ownStatusId": 0,
"isUpdateProtocol": null,
"isNewDryer": 0,
"snCode": "<hide>",
"macAddress": "<hide>",
"communicationTypeId": 0,
"onlineStatusId": 0,
"keyStatus": null,
"keyNo": null,
"deductionMethod": 0,
"withholdMoney": <hide>,
"modelCode": null,
"imei": null,
"isMigrated": 1,
"bindDeviceSnCode": null,
"leftGoodsId": null,
"rightGoodsId": null,
"leftGoodsMiss": null,
"leftGoodsVol": null,
"leftCodeNo": null,
"rightCodeNo": null,
"rightGoodsMiss": null,
"rightGoodsVol": null,
"timestamp": "<hide>",
"modeId": null,
"modeTime": null,
"deviceOrderPagePromptText": null,
"DevID": <hide>
}
}
GET /device/info/mac?macAddress=<hide>&phoneSystem=android&loginCode=<hide>&projectId=<hide>&version=<hide>&userId=<hide> HTTP/1.1
Host: v3-api.china-qzxy.cn
User-Agent: okhttp/4.2.2
>>>
{
"success": true,
"errorCode": 0,
"errorMessage": "成功",
"data": {
"deviceId": <hide>,
"deviceName": "<hide>",
"deviceDesc": "<hide>",
"areaId": 1,
"areaName": "<hide>",
"buildingId": <hide>,
"buildingName": "<hide>",
"floorId": <hide>,
"floorName": "<hide>",
"roomId": <hide>,
"roomName": "<hide>",
"isUse": 1,
"smallTypeId": 1,
"smallTypeName": "<hide>",
"bigTypeId": 4,
"bigTypeName": "<hide>",
"projectId": <hide>,
"projectName": "<hide>",
"ownStatusId": 0,
"isUpdateProtocol": null,
"isNewDryer": 0,
"snCode": "<hide>",
"macAddress": "<hide>",
"communicationTypeId": 0,
"onlineStatusId": 0,
"keyStatus": null,
"keyNo": null,
"deductionMethod": 0,
"withholdMoney": <hide>,
"modelCode": null,
"imei": null,
"isMigrated": 1,
"bindDeviceSnCode": null,
"leftGoodsId": null,
"rightGoodsId": null,
"leftGoodsMiss": null,
"leftGoodsVol": null,
"leftCodeNo": null,
"rightCodeNo": null,
"rightGoodsMiss": null,
"rightGoodsVol": null,
"timestamp": "<hide>",
"modeId": null,
"modeTime": null,
"deviceOrderPagePromptText": null,
"DevID": <hide>
}
}
POST /order/downRate/bluetooth/rateOrder HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: v3-api.china-qzxy.cn
User-Agent: okhttp/4.2.2
macType=0001&signature=<hide>&loginCode=<hide>&telephone=<hide>&protocolType=<hide>&deviceId=<hide>&userId=<hide>&version=<hide>&xfModel=0&bigTypeId=4&accountId=<hide>&macAddress=<hide>&telPhone=<hide>&phoneSystem=android&smallTypeId=1&randomNumber=<hide>&projectId=<hide>
>>>
{
"success": true,
"errorCode": 0,
"errorMessage": "成功",
"data": {
"accountId": <hide>,
"realMoney": "<hide>",
"givenMoney": "0.0",
"preDeductMoney": "<hide>",
"useCount": 1,
"downData": "<hide>",
"rate": <hide>,
"minTime": 0,
"minMoney": 0,
"chargeMethod": <hide>,
"minChargeUnit": <hide>,
"autoDisConTime": <hide>,
"consumeDate": "<hide>",
"liquidOrderNo": null,
"orderNo": null,
"preDeductMoneySend": "<hide>"
}
}
POST /order/downRate/bluetooth/rateOrder HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: v3-api.china-qzxy.cn
User-Agent: okhttp/4.2.2
macType=0001&signature=<hide>&loginCode=<hide>&telephone=<hide>&protocolType=<hide>&deviceId=<hide>&userId=<hide>&version=<hide>&xfModel=0&bigTypeId=4&accountId=<hide>&macAddress=<hide>&telPhone=<hide>&phoneSystem=android&smallTypeId=1&randomNumber=<hide>&projectId=<hide>
>>>
{
"success": true,
"errorCode": 0,
"errorMessage": "成功",
"data": {
"accountId": <hide>,
"realMoney": "<hide>",
"givenMoney": "0.0",
"preDeductMoney": "<hide>",
"useCount": 1,
"downData": "<hide>",
"rate": <hide>,
"minTime": 0,
"minMoney": 0,
"chargeMethod": <hide>,
"minChargeUnit": <hide>,
"autoDisConTime": <hide>,
"consumeDate": "<hide>",
"liquidOrderNo": null,
"orderNo": null,
"preDeductMoneySend": "<hide>"
}
}
POST /order/upload/bluetooth/data HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: v3-api.china-qzxy.cn
User-Agent: okhttp/4.2.2
accountId=<hide>&telPhone=<hide>&signature=<hide>&phoneSystem=android&randomNumber=<hide>&loginCode=<hide>&telephone=<hide>&protocolType=<hide>&xfData=<hide>&projectId=<hide>&userId=<hide>&version=<hide>
>>>
{
"success": true,
"errorCode": 0,
"errorMessage": "成功",
"data": {
"consumeTime": "<hide>",
"preDeductMoney": <hide>,
"preDeductMoneyAfter": <hide>,
"consumeMoney": <hide>,
"orderAccountId": <hide>,
"clData": "<hide>",
"telephone": "<hide>",
"createTime": "<hide>",
"modeName": null,
"liquidModeName": null,
"liquidConsumeMoney": null,
"deviceSnCode": "<hide>",
"orderNo": "<hide>",
"leftModeMoney": null,
"rightModeMoney": null,
"leftModeName": null,
"rightModeName": null
}
}
POST /order/upload/bluetooth/data HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: v3-api.china-qzxy.cn
User-Agent: okhttp/4.2.2
accountId=<hide>&telPhone=<hide>&signature=<hide>&phoneSystem=android&randomNumber=<hide>&loginCode=<hide>&telephone=<hide>&protocolType=<hide>&xfData=<hide>&projectId=<hide>&userId=<hide>&version=<hide>
>>>
{
"success": true,
"errorCode": 0,
"errorMessage": "成功",
"data": {
"consumeTime": "<hide>",
"preDeductMoney": <hide>,
"preDeductMoneyAfter": <hide>,
"consumeMoney": <hide>,
"orderAccountId": <hide>,
"clData": "<hide>",
"telephone": "<hide>",
"createTime": "<hide>",
"modeName": null,
"liquidModeName": null,
"liquidConsumeMoney": null,
"deviceSnCode": "<hide>",
"orderNo": "<hide>",
"leftModeMoney": null,
"rightModeMoney": null,
"leftModeName": null,
"rightModeName": null
}
}
loginCode<LoginCode>telephone<Phone>xfData<xfData>&key=<LoginCode>
loginCode<LoginCode>telephone<Phone>xfData<xfData>&key=<LoginCode>
<Md5><Key>
from reqable import *
import re
ad_regex_list = [
r'.*\.anythinktech.com',
r'.*-toutiao.*\.com',
r'.*\.umeng.com',
r'.*\.umengcloud.com',
r'.*\.yfanads.com',
r'.*\.gdt.qq.com',
r'.*\.netease.im',
r'.*\.beizi.biz',
r'.*\.zijieapi.com',
r'.*yunxin.*\.com',
r'open.e.kuaishou.c.*',
r'open.kuaishouzt.com',
r'open.kwaizt.com',
r'w1.kskwai.com',
r'webcast-open.douyin.com',
r'lf-cdn-tos.bytescm.com',
r'sdk.e.qq.com',
r'sdktmp.hubcloud.com.cn',
r'mdap.mpaas.cn-hangzhou.aliyuncs.com',
r'sdkoptedge.chinanetcenter.com',
r'pgdt.ugdtimg.com',
r'mssdk.volces.com'
]
def onRequest(context, request):
host = context.host
for pattern in ad_regex_list:
if re.search(pattern, host):
print(f"Blocked Domain: {host} (Matched: {pattern})")
return None
return request
def onResponse(context, response):
return response
from reqable import *
import re
ad_regex_list = [
r'.*\.anythinktech.com',
r'.*-toutiao.*\.com',
r'.*\.umeng.com',
r'.*\.umengcloud.com',
r'.*\.yfanads.com',
r'.*\.gdt.qq.com',
r'.*\.netease.im',
r'.*\.beizi.biz',
r'.*\.zijieapi.com',
r'.*yunxin.*\.com',
r'open.e.kuaishou.c.*',
r'open.kuaishouzt.com',
r'open.kwaizt.com',
r'w1.kskwai.com',
r'webcast-open.douyin.com',
r'lf-cdn-tos.bytescm.com',
r'sdk.e.qq.com',
r'sdktmp.hubcloud.com.cn',
r'mdap.mpaas.cn-hangzhou.aliyuncs.com',
r'sdkoptedge.chinanetcenter.com',
r'pgdt.ugdtimg.com',
r'mssdk.volces.com'
]
def onRequest(context, request):
host = context.host
for pattern in ad_regex_list:
if re.search(pattern, host):
print(f"Blocked Domain: {host} (Matched: {pattern})")
return None
return request
def onResponse(context, response):
return response
public BathingBtActivity() {
super();
this.protocolType = "";
this.x0 = false;
this.y0 = false;
this.z0 = false;
this.exist_deviceInfoKeyNo = false;
this.B0 = new c(this);
this.handleD_ = new Handler(new handleD(this));
this.mayAccountId_ = 0L;
this.K0 = 0;
}
public BathingBtActivity() {
super();
this.protocolType = "";
this.x0 = false;
this.y0 = false;
this.z0 = false;
this.exist_deviceInfoKeyNo = false;
this.B0 = new c(this);
this.handleD_ = new Handler(new handleD(this));
this.mayAccountId_ = 0L;
this.K0 = 0;
}
public class handleD implements Handler.Callback {
public final BathingBtActivity n;
public handleD(BathingBtActivity bathingBtActivity0) {
this.n = bathingBtActivity0;
super();
}
@Override
public boolean handleMessage(@NonNull Message message0) {
switch(message0.what) {
case 1: {
switch(message0.arg1) {
case 2: {
this.n.K5(37);
return false;
}
case 3: {
this.n.D5();
this.n.K5(34);
return false;
}
case 4: {
this.n.K5(38);
return false;
}
case 5: {
this.n.K5(33);
return false;
}
default: {
return false;
}
}
}
case 2: {
AnalyTools.analyWaterDatas(((byte[])message0.obj));
return false;
}
case 6: {
if(this.n.blueService != null && this.n.blueService.getState() == 3) {
this.n.blueService.stop();
this.n.z = 0;
return false;
}
return false;
}
case 20: {
this.n.F5(false);
return false;
}
default: {
return false;
}
}
}
}
public class handleD implements Handler.Callback {
public final BathingBtActivity n;
public handleD(BathingBtActivity bathingBtActivity0) {
this.n = bathingBtActivity0;
super();
}
@Override
public boolean handleMessage(@NonNull Message message0) {
switch(message0.what) {
case 1: {
switch(message0.arg1) {
case 2: {
this.n.K5(37);
return false;
}
case 3: {
this.n.D5();
this.n.K5(34);
return false;
}
case 4: {
this.n.K5(38);
return false;
}
case 5: {
this.n.K5(33);
return false;
}
default: {
return false;
}
}
}
case 2: {
AnalyTools.analyWaterDatas(((byte[])message0.obj));
return false;
}
case 6: {
if(this.n.blueService != null && this.n.blueService.getState() == 3) {
this.n.blueService.stop();
this.n.z = 0;
return false;
}
return false;
}
case 20: {
this.n.F5(false);
return false;
}
default: {
return false;
}
}
}
}
public class AnalyTools {
private static WaterCodeListener waterCodeListeners;
private static int projectId;
private static int deviceId;
private static int lastAccoundId;
private static byte[] snCode;
private static byte[] randomNumber;
private static int failedUnpackCount;
private static byte[] removeStartEndAndUnpackPayload(byte[] arr_b) {
String s = DigitalTrans.bytesToHexStringLower(arr_b);
return !s.startsWith("23") || !s.endsWith("0a") ? AnalyTools.unpackData(DigitalTrans.AsciiStringToString(null)) : AnalyTools.unpackData(DigitalTrans.AsciiStringToString(s.substring(2, s.length() - 2)));
}
public static void analyWaterDatas(byte[] arr_b) {
String partConsumeDate;
boolean z1;
int accountType;
int consumeMoney;
int v37;
int v36;
String s2;
int v31;
int v10;
int v9;
int v8;
int v7;
int v6;
int v30;
int v29;
int mayDeviceType2;
int mayDeviceType;
boolean querySuccess;
String protocolType;
int deviceState;
byte[] payload = AnalyTools.removeStartEndAndUnpackPayload(arr_b);
byte[] twoComplement = AnalyTools.removeStartEndAndConvTwoComplement(arr_b);
if (twoComplement != null && payload != null) {
String s = "";
int v = 0;
if (twoComplement[4] == 35) {
if (payload.length <= 0 || payload[0] != 0xFFFFFF80) {
label_195:
protocolType = "";
querySuccess = false;
deviceState = 0;
label_198:
mayDeviceType = 0;
mayDeviceType2 = 0;
v29 = 0;
v30 = 0;
} else {
switch (payload.length) {
case 23: {
byte[] arr_b9 = new byte[4];
for (int v11 = 0; v11 < 4; ++v11) {
arr_b9[v11] = payload[v11 + 1];
}
AnalyTools.projectId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b9));
byte[] arr_b10 = new byte[4];
for (int v12 = 0; v12 < 4; ++v12) {
arr_b10[v12] = payload[v12 + 5];
}
AnalyTools.deviceId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b10));
byte[] arr_b11 = new byte[4];
for (int v13 = 0; v13 < 4; ++v13) {
arr_b11[v13] = payload[v13 + 9];
}
AnalyTools.lastAccoundId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b11));
AnalyTools.snCode = new byte[6];
for (int v14 = 0; true; ++v14) {
byte[] arr_b12 = AnalyTools.snCode;
if (v14 >= arr_b12.length) {
break;
}
arr_b12[v14] = payload[v14 + 13];
}
AnalyTools.randomNumber = new byte[2];
for (int v15 = 0; true; ++v15) {
byte[] arr_b13 = AnalyTools.randomNumber;
if (v15 >= arr_b13.length) {
break;
}
arr_b13[v15] = payload[v15 + 21];
}
deviceState = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[19]}));
protocolType = "";
querySuccess = true;
mayDeviceType = 0;
mayDeviceType2 = 0;
v29 = 0;
v30 = 0;
}
case 28: {
byte[] arr_b14 = new byte[4];
for (int v17 = 0; v17 < 4; ++v17) {
arr_b14[v17] = payload[v17 + 1];
}
AnalyTools.projectId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b14));
byte[] arr_b15 = new byte[4];
for (int v18 = 0; v18 < 4; ++v18) {
arr_b15[v18] = payload[v18 + 5];
}
AnalyTools.deviceId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b15));
byte[] arr_b16 = new byte[4];
for (int v19 = 0; v19 < 4; ++v19) {
arr_b16[v19] = payload[v19 + 9];
}
AnalyTools.lastAccoundId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b16));
AnalyTools.snCode = new byte[6];
for (int v20 = 0; true; ++v20) {
byte[] arr_b17 = AnalyTools.snCode;
if (v20 >= arr_b17.length) {
break;
}
arr_b17[v20] = payload[v20 + 13];
}
AnalyTools.randomNumber = new byte[2];
for (int v21 = 0; true; ++v21) {
byte[] arr_b18 = AnalyTools.randomNumber;
if (v21 >= arr_b18.length) {
break;
}
arr_b18[v21] = payload[v21 + 21];
}
v6 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[19]}));
v7 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[23]}));
v8 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[24]}));
v9 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[25]}));
byte[] arr_b19 = new byte[2];
while (v < 2) {
arr_b19[v] = payload[v + 26];
++v;
}
v10 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b19));
deviceState = v6;
mayDeviceType = v7;
mayDeviceType2 = v8;
v29 = v9;
protocolType = s;
v30 = v10;
querySuccess = true;
break;
}
case 0x30: {
byte[] arr_b20 = new byte[4];
for (int v22 = 0; v22 < 4; ++v22) {
arr_b20[v22] = payload[v22 + 1];
}
AnalyTools.projectId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b20));
byte[] arr_b21 = new byte[4];
for (int v23 = 0; v23 < 4; ++v23) {
arr_b21[v23] = payload[v23 + 5];
}
AnalyTools.deviceId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b21));
byte[] arr_b22 = new byte[4];
for (int v24 = 0; v24 < 4; ++v24) {
arr_b22[v24] = payload[v24 + 9];
}
AnalyTools.lastAccoundId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b22));
AnalyTools.snCode = new byte[6];
for (int v25 = 0; true; ++v25) {
byte[] arr_b23 = AnalyTools.snCode;
if (v25 >= arr_b23.length) {
break;
}
arr_b23[v25] = payload[v25 + 13];
}
s = DigitalTrans.bytesToHexStringLower(new byte[]{payload[19]});
AnalyTools.randomNumber = new byte[4];
for (int v26 = 0; true; ++v26) {
byte[] arr_b24 = AnalyTools.randomNumber;
if (v26 >= arr_b24.length) {
break;
}
arr_b24[v26] = payload[v26 + 24];
}
v6 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[28]}));
v7 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[29]}));
v8 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[30]}));
v9 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[0x1F]}));
byte[] arr_b25 = new byte[2];
while (v < 2) {
arr_b25[v] = payload[v + 0x20];
++v;
}
v10 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b25));
label_187:
deviceState = v6;
mayDeviceType = v7;
mayDeviceType2 = v8;
v29 = v9;
protocolType = s;
v30 = v10;
querySuccess = true;
break;
}
default: {
if (payload.length >= 49) {
byte[] arr_b3 = new byte[4];
for (int v1 = 0; v1 < 4; ++v1) {
arr_b3[v1] = payload[v1 + 1];
}
AnalyTools.projectId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b3));
byte[] arr_b4 = new byte[4];
for (int v2 = 0; v2 < 4; ++v2) {
arr_b4[v2] = payload[v2 + 5];
}
AnalyTools.deviceId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b4));
byte[] arr_b5 = new byte[4];
for (int v3 = 0; v3 < 4; ++v3) {
arr_b5[v3] = payload[v3 + 9];
}
AnalyTools.lastAccoundId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b5));
AnalyTools.snCode = new byte[6];
for (int v4 = 0; true; ++v4) {
byte[] arr_b6 = AnalyTools.snCode;
if (v4 >= arr_b6.length) {
break;
}
arr_b6[v4] = payload[v4 + 13];
}
s = DigitalTrans.bytesToHexStringLower(new byte[]{payload[19]});
AnalyTools.randomNumber = new byte[4];
for (int v5 = 0; true; ++v5) {
byte[] arr_b7 = AnalyTools.randomNumber;
if (v5 >= arr_b7.length) {
break;
}
arr_b7[v5] = payload[v5 + 24];
}
v6 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[28]}));
v7 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[29]}));
v8 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[30]}));
v9 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[0x1F]}));
byte[] arr_b8 = new byte[2];
while (v < 2) {
arr_b8[v] = payload[v + 0x20];
++v;
}
v10 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b8));
deviceState = v6;
mayDeviceType = v7;
mayDeviceType2 = v8;
v29 = v9;
protocolType = s;
v30 = v10;
querySuccess = true;
break;
} else {
protocolType = "";
querySuccess = false;
deviceState = 0;
label_198:
mayDeviceType = 0;
mayDeviceType2 = 0;
v29 = 0;
v30 = 0;
}
}
}
}
WaterCodeListener waterCodeListener0 = AnalyTools.waterCodeListeners;
if (waterCodeListener0 != null) {
waterCodeListener0.chaxueNewshebeiOnback(querySuccess,
deviceState,
AnalyTools.deviceId,
AnalyTools.projectId,
AnalyTools.lastAccoundId,
AnalyTools.snCode,
AnalyTools.randomNumber,
mayDeviceType,
mayDeviceType2,
v29,
v30,
protocolType
);
}
} else {
switch (twoComplement[4]) {
case -8: {
if (payload.length <= 0 || payload[0] != 0xFFFFFF80) {
v31 = 0;
} else {
byte[] arr_b26 = new byte[1];
System.arraycopy(payload, 1, arr_b26, 0, 1);
v31 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b26));
byte[] arr_b27 = new byte[1];
System.arraycopy(payload, 2, arr_b27, 0, 1);
s = DigitalTrans.bytesToHexStringLower(arr_b27);
v = 1;
}
AnalyTools.waterCodeListeners.settingKeyCallback(v != 0, v31, s);
return;
}
case -6: {
if (payload.length > 0 && payload[0] == 0xFFFFFF80) {
v = 1;
}
AnalyTools.waterCodeListeners.fanhuicunchuOnback((v != 0));
return;
}
case -5: {
if (payload.length <= 0 || payload[0] != 0xFFFFFF80) {
errPath:
partConsumeDate = null;
z1 = false;
accountType = 2;
consumeMoney = 0;
} else if (payload.length == 42) {
byte[] arr_b28 = new byte[6];
for (int v32 = 0; v32 < 6; ++v32) {
arr_b28[v32] = payload[v32 + 1];
}
s2 = DigitalTrans.bytesToHexStringLower(arr_b28);
byte[] arr_b29 = new byte[4];
for (int v33 = 0; v33 < 4; ++v33) {
arr_b29[v33] = payload[v33 + 7];
}
AnalyTools.projectId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b29));
byte[] arr_b30 = new byte[4];
for (int v34 = 0; v34 < 4; ++v34) {
arr_b30[v34] = payload[v34 + 11];
}
AnalyTools.deviceId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b30));
byte[] arr_b31 = new byte[4];
for (int v35 = 0; v35 < 4; ++v35) {
arr_b31[v35] = payload[v35 + 15];
}
AnalyTools.lastAccoundId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b31));
v36 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[19]}));
byte[] arr_b32 = new byte[4];
while (v < 4) {
arr_b32[v] = payload[v + 28];
++v;
}
v37 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b32));
consumeMoney = v37;
accountType = v36;
z1 = true;
partConsumeDate = s2;
AnalyTools.waterCodeListeners.caijishujuOnback(z1, partConsumeDate, AnalyTools.projectId, AnalyTools.lastAccoundId, accountType, consumeMoney, payload);
return;
} else {
if (payload.length >= 62) {
byte[] arr_b33 = new byte[6];
for (int v38 = 0; v38 < 6; ++v38) {
arr_b33[v38] = payload[v38 + 1];
}
s2 = DigitalTrans.bytesToHexStringLower(arr_b33);
byte[] arr_b34 = new byte[4];
for (int v39 = 0; v39 < 4; ++v39) {
arr_b34[v39] = payload[v39 + 7];
}
AnalyTools.projectId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b34));
byte[] arr_b35 = new byte[4];
for (int v40 = 0; v40 < 4; ++v40) {
arr_b35[v40] = payload[v40 + 11];
}
AnalyTools.deviceId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b35));
byte[] arr_b36 = new byte[4];
for (int v41 = 0; v41 < 4; ++v41) {
arr_b36[v41] = payload[v41 + 15];
}
AnalyTools.lastAccoundId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b36));
v36 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[19]}));
byte[] arr_b37 = new byte[4];
while (v < 4) {
arr_b37[v] = payload[v + 28];
++v;
}
v37 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b37));
label_298:
consumeMoney = v37;
accountType = v36;
z1 = true;
partConsumeDate = s2;
AnalyTools.waterCodeListeners.caijishujuOnback(z1, partConsumeDate, AnalyTools.projectId, AnalyTools.lastAccoundId, accountType, consumeMoney, payload);
return;
}
partConsumeDate = null;
z1 = false;
accountType = 2;
consumeMoney = 0;
}
AnalyTools.waterCodeListeners.caijishujuOnback(z1, partConsumeDate, AnalyTools.projectId, AnalyTools.lastAccoundId, accountType, consumeMoney, payload);
return;
}
case 33: {
if (payload.length > 0 && payload[0] == 0xFFFFFF80) {
v = 1;
}
AnalyTools.waterCodeListeners.xiafafeilvOnback(v != 0, payload);
return;
}
case 34: {
if (payload.length > 0 && payload[0] == 0xFFFFFF80) {
v = 1;
}
AnalyTools.waterCodeListeners.jieshufeilvOnback(v != 0, AnalyTools.lastAccoundId);
return;
}
case 49: {
if (payload.length > 0 && payload[0] == 0xFFFFFF80) {
v = 1;
}
AnalyTools.waterCodeListeners.startDeal(v != 0, payload);
return;
}
case 50: {
if (payload.length > 0 && payload[0] == 0xFFFFFF80) {
v = 1;
}
AnalyTools.waterCodeListeners.stopDeal(v != 0);
return;
}
case 80: {
byte[] arr_b38 = new byte[1];
System.arraycopy(payload, 1, arr_b38, 0, 1);
int v44 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b38));
byte[] arr_b39 = new byte[1];
System.arraycopy(payload, 2, arr_b39, 0, 1);
String s4 = DigitalTrans.bytesToHexStringLower(arr_b39);
AnalyTools.waterCodeListeners.settingKeyCallback(true, v44, s4);
break;
}
}
}
}
}
private static byte[] removeStartEndAndConvTwoComplement(byte[] arr_b) {
String s = DigitalTrans.bytesToHexStringLower(arr_b);
return !s.startsWith("23") || !s.endsWith("0a") ? DigitalTrans.hexStringToByte(DigitalTrans.AsciiStringToString(null)) : DigitalTrans.hexStringToByte(DigitalTrans.AsciiStringToString(s.substring(2, s.length() - 2)));
}
private static byte[] unpackData(String s) {
byte[] arr_b = DigitalTrans.hexStringToBytes(s);
if (arr_b != null && arr_b.length >= 9) {
int v = ((arr_b[1] & 0xFF) << 8 | arr_b[2] & 0xFF) - 3;
if (v > 0) {
byte[] arr_b1 = new byte[v];
int v2 = 0;
for (int v1 = 0; v1 < v; ++v1) {
arr_b1[v1] = arr_b[v1 + 6];
v2 += arr_b[v1 + 6];
}
if (((byte) (v2 + arr_b[3] + arr_b[4] + arr_b[5] & 0xFF)) != arr_b[arr_b.length - 2]) {
int v3 = AnalyTools.failedUnpackCount + 1;
AnalyTools.failedUnpackCount = v3;
return v3 >= 5 ? arr_b1 : new byte[0];
}
return arr_b1;
}
return new byte[0];
}
return null;
}
public static void setWaterCodeListener(WaterCodeListener waterCodeListener0) {
AnalyTools.waterCodeListeners = waterCodeListener0;
}
}
public class AnalyTools {
private static WaterCodeListener waterCodeListeners;
private static int projectId;
private static int deviceId;
private static int lastAccoundId;
private static byte[] snCode;
private static byte[] randomNumber;
private static int failedUnpackCount;
private static byte[] removeStartEndAndUnpackPayload(byte[] arr_b) {
String s = DigitalTrans.bytesToHexStringLower(arr_b);
return !s.startsWith("23") || !s.endsWith("0a") ? AnalyTools.unpackData(DigitalTrans.AsciiStringToString(null)) : AnalyTools.unpackData(DigitalTrans.AsciiStringToString(s.substring(2, s.length() - 2)));
}
public static void analyWaterDatas(byte[] arr_b) {
String partConsumeDate;
boolean z1;
int accountType;
int consumeMoney;
int v37;
int v36;
String s2;
int v31;
int v10;
int v9;
int v8;
int v7;
int v6;
int v30;
int v29;
int mayDeviceType2;
int mayDeviceType;
boolean querySuccess;
String protocolType;
int deviceState;
byte[] payload = AnalyTools.removeStartEndAndUnpackPayload(arr_b);
byte[] twoComplement = AnalyTools.removeStartEndAndConvTwoComplement(arr_b);
if (twoComplement != null && payload != null) {
String s = "";
int v = 0;
if (twoComplement[4] == 35) {
if (payload.length <= 0 || payload[0] != 0xFFFFFF80) {
label_195:
protocolType = "";
querySuccess = false;
deviceState = 0;
label_198:
mayDeviceType = 0;
mayDeviceType2 = 0;
v29 = 0;
v30 = 0;
} else {
switch (payload.length) {
case 23: {
byte[] arr_b9 = new byte[4];
for (int v11 = 0; v11 < 4; ++v11) {
arr_b9[v11] = payload[v11 + 1];
}
AnalyTools.projectId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b9));
byte[] arr_b10 = new byte[4];
for (int v12 = 0; v12 < 4; ++v12) {
arr_b10[v12] = payload[v12 + 5];
}
AnalyTools.deviceId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b10));
byte[] arr_b11 = new byte[4];
for (int v13 = 0; v13 < 4; ++v13) {
arr_b11[v13] = payload[v13 + 9];
}
AnalyTools.lastAccoundId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b11));
AnalyTools.snCode = new byte[6];
for (int v14 = 0; true; ++v14) {
byte[] arr_b12 = AnalyTools.snCode;
if (v14 >= arr_b12.length) {
break;
}
arr_b12[v14] = payload[v14 + 13];
}
AnalyTools.randomNumber = new byte[2];
for (int v15 = 0; true; ++v15) {
byte[] arr_b13 = AnalyTools.randomNumber;
if (v15 >= arr_b13.length) {
break;
}
arr_b13[v15] = payload[v15 + 21];
}
deviceState = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[19]}));
protocolType = "";
querySuccess = true;
mayDeviceType = 0;
mayDeviceType2 = 0;
v29 = 0;
v30 = 0;
}
case 28: {
byte[] arr_b14 = new byte[4];
for (int v17 = 0; v17 < 4; ++v17) {
arr_b14[v17] = payload[v17 + 1];
}
AnalyTools.projectId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b14));
byte[] arr_b15 = new byte[4];
for (int v18 = 0; v18 < 4; ++v18) {
arr_b15[v18] = payload[v18 + 5];
}
AnalyTools.deviceId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b15));
byte[] arr_b16 = new byte[4];
for (int v19 = 0; v19 < 4; ++v19) {
arr_b16[v19] = payload[v19 + 9];
}
AnalyTools.lastAccoundId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b16));
AnalyTools.snCode = new byte[6];
for (int v20 = 0; true; ++v20) {
byte[] arr_b17 = AnalyTools.snCode;
if (v20 >= arr_b17.length) {
break;
}
arr_b17[v20] = payload[v20 + 13];
}
AnalyTools.randomNumber = new byte[2];
for (int v21 = 0; true; ++v21) {
byte[] arr_b18 = AnalyTools.randomNumber;
if (v21 >= arr_b18.length) {
break;
}
arr_b18[v21] = payload[v21 + 21];
}
v6 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[19]}));
v7 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[23]}));
v8 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[24]}));
v9 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[25]}));
byte[] arr_b19 = new byte[2];
while (v < 2) {
arr_b19[v] = payload[v + 26];
++v;
}
v10 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b19));
deviceState = v6;
mayDeviceType = v7;
mayDeviceType2 = v8;
v29 = v9;
protocolType = s;
v30 = v10;
querySuccess = true;
break;
}
case 0x30: {
byte[] arr_b20 = new byte[4];
for (int v22 = 0; v22 < 4; ++v22) {
arr_b20[v22] = payload[v22 + 1];
}
AnalyTools.projectId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b20));
byte[] arr_b21 = new byte[4];
for (int v23 = 0; v23 < 4; ++v23) {
arr_b21[v23] = payload[v23 + 5];
}
AnalyTools.deviceId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b21));
byte[] arr_b22 = new byte[4];
for (int v24 = 0; v24 < 4; ++v24) {
arr_b22[v24] = payload[v24 + 9];
}
AnalyTools.lastAccoundId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b22));
AnalyTools.snCode = new byte[6];
for (int v25 = 0; true; ++v25) {
byte[] arr_b23 = AnalyTools.snCode;
if (v25 >= arr_b23.length) {
break;
}
arr_b23[v25] = payload[v25 + 13];
}
s = DigitalTrans.bytesToHexStringLower(new byte[]{payload[19]});
AnalyTools.randomNumber = new byte[4];
for (int v26 = 0; true; ++v26) {
byte[] arr_b24 = AnalyTools.randomNumber;
if (v26 >= arr_b24.length) {
break;
}
arr_b24[v26] = payload[v26 + 24];
}
v6 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[28]}));
v7 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[29]}));
v8 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[30]}));
v9 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[0x1F]}));
byte[] arr_b25 = new byte[2];
while (v < 2) {
arr_b25[v] = payload[v + 0x20];
++v;
}
v10 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b25));
label_187:
deviceState = v6;
mayDeviceType = v7;
mayDeviceType2 = v8;
v29 = v9;
protocolType = s;
v30 = v10;
querySuccess = true;
break;
}
default: {
if (payload.length >= 49) {
byte[] arr_b3 = new byte[4];
for (int v1 = 0; v1 < 4; ++v1) {
arr_b3[v1] = payload[v1 + 1];
}
AnalyTools.projectId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b3));
byte[] arr_b4 = new byte[4];
for (int v2 = 0; v2 < 4; ++v2) {
arr_b4[v2] = payload[v2 + 5];
}
AnalyTools.deviceId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b4));
byte[] arr_b5 = new byte[4];
for (int v3 = 0; v3 < 4; ++v3) {
arr_b5[v3] = payload[v3 + 9];
}
AnalyTools.lastAccoundId = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b5));
AnalyTools.snCode = new byte[6];
for (int v4 = 0; true; ++v4) {
byte[] arr_b6 = AnalyTools.snCode;
if (v4 >= arr_b6.length) {
break;
}
arr_b6[v4] = payload[v4 + 13];
}
s = DigitalTrans.bytesToHexStringLower(new byte[]{payload[19]});
AnalyTools.randomNumber = new byte[4];
for (int v5 = 0; true; ++v5) {
byte[] arr_b7 = AnalyTools.randomNumber;
if (v5 >= arr_b7.length) {
break;
}
arr_b7[v5] = payload[v5 + 24];
}
v6 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[28]}));
v7 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[29]}));
v8 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[30]}));
v9 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(new byte[]{payload[0x1F]}));
byte[] arr_b8 = new byte[2];
while (v < 2) {
arr_b8[v] = payload[v + 0x20];
++v;
}
v10 = DigitalTrans.hexStringToAlgorism(DigitalTrans.bytesToHexStringLower(arr_b8));
deviceState = v6;
mayDeviceType = v7;
mayDeviceType2 = v8;
v29 = v9;
protocolType = s;
v30 = v10;
querySuccess = true;
break;
} else {
protocolType = "";
querySuccess = false;
deviceState = 0;
label_198:
mayDeviceType = 0;
mayDeviceType2 = 0;
v29 = 0;
v30 = 0;
}
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
最后于 2025-11-29 22:48
被mb_jepgtozh编辑
,原因: