多系統(tǒng)識別需要在連接的過程中寫一些命令給從機(jī)判斷主機(jī)的系統(tǒng),我使用BleAnalyzer抓了配對連接過程中的包,但是BleAnalyzer沒辦法篩選、查找,不知道該怎么去模擬這個工程
1、確定是低功耗藍(lán)牙BLE;
2、使用手機(jī)APP:BLE調(diào)試助手或者系統(tǒng)藍(lán)牙連接該藍(lán)牙鍵盤從機(jī),并使用抓包工具抓包;
3、根據(jù)抓取到的連接包,嘗試使用CH582模仿主機(jī)行為并發(fā)起連接。
4、抓包工具使用參考:
請問一下我想修改Attribute Opcode的值,應(yīng)該修改代碼的什么地方呢?
如果我想讀Handle的值,代碼里面應(yīng)該怎么操作呢?
我是這么寫入的,但是回復(fù)的全部是錯誤。對照正確的值發(fā)現(xiàn)是Attribute Opcode的值不一樣,但是修改req.sig并不會影響Attribute Opcode的值,我想修改Attribute Opcode的值,應(yīng)該修改代碼的什么地方呢?
? ? uint16_t Header_value[4] = {0x2A4D, 0x0031, 0x2A4D, 0x000A};
? ?// PRINT("\r\nWriteNotify---- %d-%d? ? ?",WriteNotify_Count,NotifyHandleQuantity);
?//? ?if((centralProcedureInProgress == FALSE))
? ? {
? ? ? ? PRINT("\r\n WriteNotify ");
? ? ? ? // Do a write
? ? ? ? attWriteReq_t req;
? ? ? ? req.cmd = FALSE;
? ? ? ? req.sig = 2;
? ? ? ? req.handle = Header_value[WriteNotify_Count];
? ? ? ? req.len = 2;
? ? ? ? req.pValue = GATT_bm_alloc(centralConnHandle, ATT_WRITE_REQ, req.len, NULL, 0);
? ? ? ? PRINT("? handle : %04X\r\n",req.handle);
? ? ? ? if(req.pValue != NULL)
? ? ? ? {
? ? ? ? ? ? req.pValue[0] = 0x01;
? ? ? ? ? ? req.pValue[1] = 0;
? ? ? ? ? ? if(GATT_WriteCharValue(centralConnHandle, &req, centralTaskId) != SUCCESS)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);
? ? ? ? ? ? }
? ? ? ? }
? ? }
藍(lán)牙建立連接之后,會有參數(shù)更新,mtu交互,配對綁定的流程。一般第一次的連接會卡在配對綁定的流程不匹配上,可以重點(diǎn)查看。在可以直接使用分析儀抓包的情況下,可以直接查看該流程是否有異常,比對即可。
接下來是到數(shù)據(jù)收發(fā)階段,根據(jù)handle值進(jìn)行收發(fā),可以查看手機(jī)連接該從機(jī)后發(fā)送數(shù)據(jù)的handle是多少,然后主機(jī)直接模擬該handle值進(jìn)行相同的數(shù)據(jù)發(fā)送。其他如opcode是不需要修改的。
根據(jù)handle直接進(jìn)行數(shù)據(jù)收發(fā):
找到了讀取操作,寫的時候還是會報錯誤碼,還要再查查看
? ? ? ? ? ? ? ? // Do a read
? ? ? ? ? ? ? ? attReadReq_t req;
? ? ? ? ? ? ? ? req.handle = centralCharHdl;
? ? ? ? ? ? ? ? if(GATT_ReadCharValue(centralConnHandle, &req, centralTaskId) == SUCCESS)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? centralProcedureInProgress = TRUE;
? ? ? ? ? ? ? ? ? ? centralDoWrite = !centralDoWrite;
? ? ? ? ? ? ? ? }
郵件已回復(fù)。