开篇通俗解释:“没有目录的书如何看???”
COM盾就如同一本书,正常的书有目录和章节两部分。
计算机要想看懂一般书,必须通过目录索引来看懂一个章节的内容。
而COM盾就是把目录随机散列(排列)而且目录序号加密。
逆向者想要看懂书,必须要用解密的密钥(硬件标识)来得到目录章节排列的序号。
想要得到解密的密钥,必须知道硬件标识的运算,即解密密钥的产生过程(函数)。
“COM盾”的构思来源于菜农看的一篇有关C语言和C++语言粉丝的争论和“互殴”,C粉丝嘲笑C++粉丝的类太烂(最新的Golang语言和Rust感觉都是C的忠实粉丝,java绝对是C++的粉丝),C的粉丝主张采用“COM接口技术”即结构函数指针来构造类,并且认为更加完美,更加可控(C++就很难或无法构造COM盾)。
菜农为此从中得到了启发和灵感,即在C粉丝的基础上(结构函数指针)升级为结构函数指针数组。
前者只能通过结构成员即函数别名(结构内的函数指针)来访问结构内的函数地址(指针),但后者可以通过函数别名来访问,也可以通过函数别名的数组序号来访问(更加灵活,给COM盾进行数组散列和加密的机会)。
那么数组的内容就可以随机散列,而且位置也可以随机改变。
所以,函数别名和函数序号在安全性(盾)上有天地之别,故菜农称其为“COM盾”,由于实际上有两种不同的“COM盾”,故菜农总称为“HotCOM”,因为菜农的网名为“HotPower”,所以菜农的“产品”都冠以“Hot”,例如超级CRC计算器的网站www.hotcrc.com。虽然现在喜欢用“雁塔菜农”的网名。大家可以百度搜索“雁塔菜农 HotPower ”,菜农从2003年开始上网,技术贴无数(近万篇,曾经的EDNChina网站的博客点击就数千万,可惜倒闭,菜农数千博文被删除丢失,故菜农后来就不太写网文了),都是实际操作,绝无抄袭。
下面就深入讲解“HotCOM”。
HotCOM=CRCCOM[16]+UIDCOM[32]
函数调用方式:
CRCCOM[CRCTAB[0..15]].FnPtrArray(…)
UIDCOM[UIDTAB[0..31]].FnPtrArray(…)
其中FnPtrArray为函数指针数组。
HotCOM包含两种COM盾,一种是CRC4(控制16个函数指针数组)随机散列CRCCOM盾(直接数组读取,访问简单),一种是绑定硬件标识UIDCOM盾。
CRCCOM[16],随机散列的COM盾,必须计算CRC4才能得到函数指针的位置。采用CRC4逆运算随机散列加载函数指针的位置。
即随机数为密文位置,必须用逆运算得到随机数的明文位置。
即函数指针存放的位置全部由注册机完成。
UIDCOM[32],绑定硬件标识的COM盾,并且采用CRC5(控制32个函数指针数组)动态加载函数指针的位置。
CRCCOM[16],CRC4,高52位为索引,低12位为CRC4随机散列。
数组随机,位置由注册机随机存放。
无法直接访问CRCCOM盾,必须先做CRC4逆运算。可以搞个16个动态数组CRCTAB[16],有CRCTAB[16]直接访问。
CRCTAB[]随机绑定。
UIDCOM[32],CRC5,数组固定,由UIDTAB[32]索引。
位置不由注册机决定。直接由UIDTAB[32]访问UIDCOM盾。
UID绑定UIDTAB[n:CRC32],即绑定每个函数指针,
即UIDCOM动态随机绑定硬件标识。
特别注意,每次加载运行CRCTAB固定不变,但UIDTAB每次都不同!!!
由于每次发行应用程序的函数指针数组都不同,故可以有效的对付反汇编的比对,即想用变化一位来找CRC初值是不可能的,故就可以有效地对付篡改。
即“COM盾”天生具备反篡改和反反汇编。如同Rust天生的安全一样。
反篡改可以搜索菜农的“利用CRC初值碰撞保护版权信息不被篡改”的帖子
其他的反跟踪,反注册难度太高,故无法科普。
故菜农给出结论:“COM盾”可以更有效地替代硬件加密狗。
下面九个截图是菜农在1991年**美国福禄克公司的硬件加密狗的手稿留念
就是**了硬件加密狗才产生了搞软件加密狗的构思,一直到退休前的没时间搞,现在菜农已经退休三年,目前在从事安全产品的开发,由于菜农长期从事逆向工作,故才能很深入地理解如何做好软件加密狗。
目前“COM盾”已经在windows,linux和macos三大平台上实现,并且在windows下提供了20种计算机语言的动态链接库调用例程。
- 准备开始做安卓手机和苹果手机这两个平台,让“COM盾”超越硬件加密狗成为现实!!!呜呜呜。
大家为63岁的老头加油吧!!!
菜农HotPower@163.com 2022.8.23于西安雁塔菜地
-
|