百度找的一张图片
我没有这个产品,没办法家里条件不好不能乱买东西。
前几天坛友给我个固件说是不能注册,然后他给了我一个固件。 我把这个固件放到IDA PRO里面反汇编,然后挂上调试器调试了一下。
结果是没办法测试,手里只有最小系统,没有OLED等配件。
调试结果ID1和ID2是由STM32的64位唯一ID计算产生的。
64位唯一ID分两次计算得到两个16位,然后把这两个16位分别放到两个256位的数组里计算, 得到两个16位。
然后这两个数据分别和别的地址的数据比较
如果这两个16位不是注册码我也懒的在分析了,我这没有硬件完全盲目调试,一共用了四五天,前三天主要分析UCOS,以前没学过这个,感谢作者让我学会了UCOS的内核。
在分析下去没什么意义,不知道这两个由256位数据计算出来的16位数据是不是注册码,要是是注册码那就比较容易破解了,直接把ID1和ID2替换成这两个就行了。 改BIN文件(固件)就很简单了,改几个数就行。
seg000:08001924
seg000:08001924 @ =============== S U B R O U T I N E =======================================
seg000:08001924
seg000:08001924 @ 200001a4的48位计算结果放到0X2000028 + 0X1C 和0X1E
seg000:08001924 @ 2000019e的48位计算结果放到0X2000008 + 0X1C 和0X1E
seg000:08001924 @
seg000:08001924 @ 0X20000008 开始的256位计算得到16位放到 0X200001AA
seg000:08001924 @ 0X20000028 开始的256位计算得到16位放到 0X200001AA + 2
seg000:08001924 @
seg000:08001924 @ 然后和 0X2000059F 和 0X200001AA 比较
seg000:08001924 @ 0X2000059F + 2 和0X200001AA +2 比较
seg000:08001924 @ 比较不通过0X20000058 清零
seg000:08001924 @ 通过的话就等于1
seg000:08001924 @
seg000:08001924
seg000:08001924 sub_8001924: @ CODE XREF: sub_8006864+2Ap
seg000:08001924 PUSH.W {R4-R8,LR}
seg000:08001928 MOVS R7, #0
seg000:0800192A MOVS R0, #3
seg000:0800192C BL sub_8004688 @ ?
seg000:08001930 MOVS R1, #6 @ 48位
seg000:08001932 LDR R0, =0x200001A4
seg000:08001934 BL iiiddd_8002878 @ 算ID
seg000:08001934 @ 入口
seg000:08001934 @ R0 = 要算的数据的首地址
seg000:08001934 @ R1 = 数据长度
seg000:08001934 @ R1 乘以 8 等于数据长度的位数
seg000:08001934 @ 比如R1等于6
seg000:08001934 @ 6 * 8 = 48 正好两次就计算完64位唯一ID
seg000:08001938 MOV R6, R0
seg000:0800193A LDR R0, =0x200001A4
seg000:0800193C MOVS R1, #6 @ 48位
seg000:0800193E SUBS R0, R0, #6 @ 0x2000019e
seg000:08001940 BL iiiddd_8002878 @ 算ID
seg000:08001940 @ 入口
seg000:08001940 @ R0 = 要算的数据的首地址
seg000:08001940 @ R1 = 数据长度
seg000:08001940 @ R1 乘以 8 等于数据长度的位数
seg000:08001940 @ 比如R1等于6
seg000:08001940 @ 6 * 8 = 48 正好两次就计算完64位唯一ID
seg000:08001944 MOV R5, R0
seg000:08001946 LDR R0, =0x20000028
seg000:08001948 MOVS R1, #0x20 @ 计算从0X20000028开始的256位
seg000:0800194A STRH R5, [R0,#0x1C]
seg000:0800194C STRH R6, [R0,#0x1E]
seg000:0800194E BL ji_suan_ID_80028EC @ 计算ID
seg000:0800194E @
seg000:0800194E @ 要算的数据的首地址
seg000:0800194E @ seg000:08002878 @ R1 = 数据长度
seg000:0800194E @ seg000:08002878 @ R1 乘以 8 等于数据长度的位数
seg000:0800194E @
seg000:08001952 LDR R4, =0x200001AA
seg000:08001954 MOVS R1, #0x20 @ 计算0X20000008开始的256位
seg000:08001956 STRH R0, [R4,#2]
seg000:08001958 LDR R0, =0x20000008
seg000:0800195A STRH R5, [R0,#0x1C]
seg000:0800195C STRH R6, [R0,#0x1E]
seg000:0800195E BL ji_suan_ID_80028EC @ 计算ID
seg000:0800195E @
seg000:0800195E @ 要算的数据的首地址
seg000:0800195E @ seg000:08002878 @ R1 = 数据长度
seg000:0800195E @ seg000:08002878 @ R1 乘以 8 等于数据长度的位数
seg000:0800195E @
seg000:08001962 STRH R0, [R4]
seg000:08001964 MOVS R0, #1
seg000:08001966 BL sub_8004688 @ ?
seg000:0800196A LDR R0, =0x2000059F
seg000:0800196C LDRH R1, [R4]
seg000:0800196E LDR R5, =0x2000004C
seg000:08001970 LDRH R2, [R0]
seg000:08001972 CMP R1, R2
seg000:08001974 BNE loc_800197E
seg000:08001976 LDRH R1, [R4,#2]
seg000:08001978 LDRH R0, [R0,#2]
seg000:0800197A CMP R1, R0
seg000:0800197C BEQ loc_800198A
seg000:0800197E
seg000:0800197E loc_800197E: @ CODE XREF: sub_8001924+50j
seg000:0800197E MOVS R0, #7
seg000:08001980 BL sub_8004688 @ ?
seg000:08001984 STRB R7, [R5,#0xC]
seg000:08001986
seg000:08001986 locret_8001986: @ CODE XREF: sub_8001924+70j
seg000:08001986 POP.W {R4-R8,PC}
seg000:0800198A @ ---------------------------------------------------------------------------
seg000:0800198A
seg000:0800198A loc_800198A: @ CODE XREF: sub_8001924+58j
seg000:0800198A MOVS R0, #3
seg000:0800198C BL sub_8004688 @ ?
seg000:08001990 MOVS R0, #1
seg000:08001992 STRB R0, [R5,#0xC]
seg000:08001994 B locret_8001986
[ 此帖被yjmwxwx在2017-02-07 19:47重新编辑 ]