潜水很长时间了,一直没打算回复这个帖子,前两天突然看有人更新回复,但是似乎楼上这位答的也是不准确,所以临时决定发个帖子。 其实200smart等新版本PLC的密码仍然不算高端,整个算法没有使用非对称加密或者是AES这种复杂加密,依然是简单的异或、移位、位与等普通操作,但与老200不同之处在于: 1. 出现了随机数种子,实际上也是楼上说的salt,这个2字节数据会极大干扰结果 2. 计算过程中,密码本身的值会被用于控制移位长度、位与内容 3. 这种简单的异或算法会经过极大量的迭代,有时可迭代1000次以上,由于这种迭代性,即使原来的密码发生很微小的改动,比如1bit改动,最终的结果也会出现天壤之别 另外在200smart与PC解密认证的时候,会向PC发送一组20字节的随机码,这个字节码会被加入到解锁秘钥的计算中去,使最终结果随机性更强。 顺便说一句,PC端在解锁时,如果用户输入密码正确,其实会预先算出PLC端存储的这段20位密码,因为plc把随机数种子发送给了PC,所以如果可读出存储密码,实际上已经可以通过暴力破解算出真正的密码。如果密码位数较低,难度并不大。 我知道如果不上图很多人难以相信,但是本贴讨论范围仅限学术研究,为了防止有人用作它用,所有关键点均打码
PLC下载的SDB块
PLC认证产生的chanllenge
PC保存PLC的chanllenge
第一次大迭代,计算值等于PLC内部存储值
第二次大迭代
第三次大迭代
最后一轮迭代
以上是OD跟踪时整个秘钥计算的全过程,仅供学术交流,不得用于其它用途,如用于其它用途与本人不对其负责
|