-
-
[原创] 深思灵锐I协议分析
-
2022-3-17 23:54
13141
-
前言
最近疫情隔离,就花了1天时间把灵锐分析了一下,废话不多说,直接上干货。
主要功能
这款加密锁功能,总结一下就是有HMAC_SHA1、AES,以及10个模块。每个模块可以存储512个字节的数据。
权限
权限可以分为三种:管理权限、普通权限、认证权限。
通信分析
通过分析LIV_open我们可以跟踪到LIV_set_key函数
通信KEY头部永远是0x1000CD0B,然后开始用随机数生成通信KEY,接着使用固定的aeskey xor 5B之后对其进行AES算法变换,头部4个byte作为后续通信加密用的xor key。并把数据通知给锁。
后续通信所有数据都是用这个简单的xor加解密。后面的分析就犹如庖丁解牛一般的简单了。
功能分析
LIV_encrypt/LIV_decrypt
他的内部调用都是走的LIVC_Convert,末尾参数0是加密,1是解密。
这个AESKEY是永远都不知道的,每一个开发商的key都是由官方随机生成后分配的。
LIV_hmac
对sha1的20个字节key 进行xor5c和36,然后先算sha1,再把数据放一起计算,得出结果之后,把后续的36数据算sha1,再把之前算的sha1一起算一遍,就得出结果了。
其他api函数
没什么好说的,基本上都是固定的数值,锁内block数据都是死的,直接读出来就行了。
Dump思路
通过gethardwareinfo方式拿到开发商编号,唯一序列号,版本号等信息。
通过调试拿到3种key,如果有软件sha1的话可以直接拿到sha1的key,拿到了key,就可以直接dump出10个模块的所有内存。aes加解密可以通过抓码表的方式提取数据。
结尾
协议编码
通过调试分析和整理,我总结出了这些编码指令
case 0: // LIV_password
case 1: // LIV_change_passwd
case 2: // LIV_get_hardware_info
case 3: // LIV_read
case 4: // 3.x版本之前的写
case 5: // 3.x版本之前block的写
case 6: // 3.x版本之前的写结束
case 7: // LIV_write_prepare
case 8: // LIV_convert AES enc dec
case 9: // LIV_hmac_sha1
case 10: // LIV_update_block
case 12: // LIV_get_version_info
case 13: // LIV_flash_led
case 64: // LIV_write_ex
case 65: // LIV_set_passwd_ex
case 66: // LIV_HMAC_SHA1
case 67: // LIV_update_block_ex
case 68: // LIV_write_auth_key_ex
修改数据
通过逆向协议编码后,改改配置还不是小case
其他
官方有一个搞笑的BUG
如图,他会比较锁的版本号是不是等于3.0.0,如果是的话就走新增的高级api通道。而我的锁版本是3.0.1,就无法走高级通道。
这里的逻辑应该是
如果版本>= 3.0.0 则走高级通道。
结果我手上版本是3.0.1,就被当老版本的来处理了。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2022-3-18 00:00
被xiaomajia编辑
,原因: