一个新兴虚拟混淆加密授权壳难度测试CM
本帖最后由 czyr 于 2022-8-14 19:06 编辑这是一款新壳 VLicense,作者号称难度比vmp还强,今天我们就来试试它的难度如何
它的取硬件ID的方式:
.子程序 VLicenseGetHwid, 文本型, 公开
.局部变量 匿名局部变量_1, 整数型
置入代码 ({ 191, 0, 0, 0, 0, 184, 0, 0, 0, 0, 15, 162, 49, 199, 49, 223, 49, 207, 49, 215, 184, 2, 0, 0, 0, 15, 162, 49, 199, 49, 223, 49, 207, 49, 215, 184, 0, 0, 0, 128, 15, 162, 49, 199, 49, 223, 49, 207, 49, 215, 184, 1, 0, 0, 128, 15, 162, 49, 199, 49, 223, 49, 207, 49, 215, 184, 2, 0, 0, 128, 15, 162, 49, 199, 49, 223, 49, 207, 49, 215, 184, 3, 0, 0, 128, 15, 162, 49, 199, 49, 223, 49, 207, 49, 215 })
置入代码 ({ 137, 125, 252 })
返回 (编码_BASE64编码 (到字节集 (补齐8位 (十到十六进制 (匿名局部变量_1)))))
.子程序 base64_encode, 文本型
.参数 匿名参数_1, 字节集
.局部变量 匿名局部变量_1, 文本型
.局部变量 匿名局部变量_2, 整数型
.局部变量 匿名局部变量_3, 整数型
匿名局部变量_2 = 取字节集长度 (匿名参数_1)
'
.如果 (匿名局部变量_2 % 3 = 0)
匿名局部变量_3 = 到整数 (匿名局部变量_2 ÷ 3) × 4
.否则
匿名局部变量_3 = (到整数 (匿名局部变量_2 ÷ 3) + 1) × 4
.如果结束
匿名局部变量_1 = 取空白文本 (匿名局部变量_3)
base64_encode0 (取变量数据地址 (匿名参数_1), 匿名局部变量_2, 取变量数据地址 (匿名局部变量_1), 匿名局部变量_3)
返回 (匿名局部变量_1)
.子程序 base64_encode0, 整数型
.参数 匿名参数_1, 整数型
.参数 匿名参数_2, 整数型
.参数 匿名参数_3, 整数型
.参数 匿名参数_4, 整数型
置入代码 ({ 137, 236, 93, 131, 236, 68, 139, 68, 36, 84, 83, 86, 139, 116, 36, 88, 51, 219, 141, 80, 254, 199, 68, 36, 8, 65, 66, 67, 68, 199, 68, 36, 12, 69, 70, 71, 72, 199, 68, 36, 16, 73, 74, 75, 76, 199, 68, 36, 20, 77, 78, 79, 80, 199, 68, 36, 24, 81, 82, 83, 84, 199, 68, 36, 28, 85, 86, 87, 88, 199, 68, 36, 32, 89, 90, 97, 98, 199, 68, 36, 36, 99, 100, 101, 102, 199, 68, 36, 40, 103, 104, 105, 106, 199, 68, 36, 44, 107, 108, 109, 110, 199, 68, 36, 48, 111, 112, 113, 114, 199, 68, 36, 52, 115, 116, 117, 118, 199, 68, 36, 56, 119, 120, 121, 122, 199, 68, 36, 60, 48, 49, 50, 51, 199, 68, 36, 64, 52, 53, 54, 55, 199, 68, 36, 68, 56, 57, 43, 47, 136, 92, 36, 72, 136, 28, 6, 133, 210, 126, 118, 85, 87, 139, 124, 36, 88, 141, 110, 2, 131, 199, 2, 74, 193, 234, 2, 66, 139, 218, 106, 3, 193, 227, 2, 94, 15, 182, 71, 254, 193, 232, 2, 138, 68, 4, 16, 136, 69, 254, 15, 182, 79, 254, 15, 182, 71, 255, 35, 206, 193, 232, 4, 193, 225, 4, 11, 200, 138, 68, 12, 16, 136, 69, 255, 15, 182, 79, 255, 15, 182, 7, 131, 225, 15, 193, 232, 6, 193, 225, 2, 11, 200, 138, 68, 12, 16, 136, 69, 0, 141, 109, 4, 15, 182, 7, 3, 254, 131, 224, 63, 138, 68, 4, 16, 136, 69, 253, 131, 234, 1, 117, 169, 139, 116, 36, 96, 95, 93, 139, 68, 36, 84, 106, 3, 153, 89, 247, 249, 131, 234, 1, 116, 12, 131, 234, 1, 117, 14, 198, 68, 51, 255, 61, 235, 7, 102, 199, 68, 51, 254, 61, 61, 94, 51, 192, 91, 131, 196, 68, 195 })
返回 (0)
.子程序 补齐8位, 文本型
.参数 匿名参数_1, 文本型
.判断循环首 (取文本长度 (匿名参数_1) < 8)
匿名参数_1 = “0” + 匿名参数_1
.判断循环尾 ()
返回 (匿名参数_1)
.子程序 编码_BASE64编码, 文本型
.参数 匿名参数_1, 字节集
.局部变量 匿名局部变量_1, 整数型
.局部变量 匿名局部变量_2, 字节型, , "3"
.局部变量 匿名局部变量_3, 整数型
.局部变量 匿名局部变量_4, 字节集
.局部变量 匿名局部变量_5, 整数型
.局部变量 匿名局部变量_6, 字节集
.局部变量 匿名局部变量_7, 整数型
匿名局部变量_5 = 取字节集长度 (匿名参数_1)
.如果真 (匿名局部变量_5 < 1)
返回 (“”)
.如果真结束
匿名局部变量_1 = 匿名局部变量_5 % 3
.如果真 (匿名局部变量_1 > 0)
匿名参数_1 = 匿名参数_1 + 取空白字节集 (3 - 匿名局部变量_1)
.如果真结束
匿名局部变量_5 = 取字节集长度 (匿名参数_1)
匿名局部变量_6 = 取空白字节集 (匿名局部变量_5 × 4 ÷ 3)
匿名局部变量_7 = 1
匿名局部变量_4 = 到字节集 (“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”)
.变量循环首 (1, 匿名局部变量_5, 3, 匿名局部变量_3)
匿名局部变量_2 = 匿名参数_1 [匿名局部变量_3]
匿名局部变量_2 = 匿名参数_1 [匿名局部变量_3 + 1]
匿名局部变量_2 = 匿名参数_1 [匿名局部变量_3 + 2]
匿名局部变量_6 [匿名局部变量_7] = 匿名局部变量_4 [右移 (匿名局部变量_2 , 2) + 1]
匿名局部变量_6 [匿名局部变量_7 + 1] = 匿名局部变量_4 [左移 (位与 (匿名局部变量_2 , 3), 4) + 右移 (匿名局部变量_2 , 4) + 1]
匿名局部变量_6 [匿名局部变量_7 + 2] = 匿名局部变量_4 [左移 (位与 (匿名局部变量_2 , 15), 2) + 右移 (匿名局部变量_2 , 6) + 1]
匿名局部变量_6 [匿名局部变量_7 + 3] = 匿名局部变量_4 [位与 (匿名局部变量_2 , 63) + 1]
匿名局部变量_7 = 匿名局部变量_7 + 4
.变量循环尾 ()
.如果真 (匿名局部变量_1 > 0)
匿名局部变量_5 = 取字节集长度 (匿名局部变量_6)
.如果 (匿名局部变量_1 = 1)
匿名局部变量_6 [匿名局部变量_5 - 1] = 到字节 (取代码 (“=”, ))
匿名局部变量_6 [匿名局部变量_5] = 到字节 (取代码 (“=”, ))
.否则
匿名局部变量_6 [匿名局部变量_5] = 到字节 (取代码 (“=”, ))
.如果结束
.如果真结束
返回 (到文本 (匿名局部变量_6))
它生成授权文件的方式是以下两种其中一种: 用rsa私钥加密获取到的Hwid,或者是用获取到的Hwid加密 rsa私钥。得到密文就是注册码进入到壳解密
感觉难度整体不大,但无奈能力有限无法分析故提供两种破解方法参考,第一伪造Hwid,第二逆向分析VLicenseKeyGen.exe 生成key.ini的算法(key.ini生成的方式是 appid 填写壳的rsa私钥,客户机器码填写Hwid,即可生成Hwid对应的解密key)
附件包含了 授权测试dmeo 和 VLicenseKeyGen生成器 和dmeo对于的rsa私钥 以供测试参考
test dmeo:https://wwd.lanzouj.com/igh1O09jr9kf
VLicenseKeyGen :https://wwd.lanzouj.com/ims9z09jrt4j
demo没有key无法打开需要下载keygen自行生成key才能测试 简单看了下楼主的程序,两个问题。壳内对机器码有校验。方法一不行
方法二纯属有点没弄懂
私钥是开发者自己保存的。程序上市后,私钥不会暴露的,开发者自己拿在手里。
而且他这个Keygen.dll计算授权码的算法是你自己可以调用的,根本无需逆向什么keygen的算法,因为keygen算法已经公开,大家都可以调用。
重要的参数就是这个私钥
如果你能拿到私钥,你自己也能通过官方keygen.dll生成授权
问题是别人发给你的程序。私钥是他自己拿在手里的。你告诉我怎么拿到私钥?拿不到,授权码就算不出来的。
楼主感觉说挺简单的,现在看来是不是没那么简单.... 搜索曾经的回忆 发表于 2022-8-15 21:19
何以见得?他除了在花指令这方面比vmp强之外,虚拟化设计来看,没看出来比vmp出彩的地方,就比如vmContex ...
他是OISC的结构,每一个handler比VMP难分析多了,你可以看看VMP的虚拟,每个handler其实还是可以的分析的,他这个handler是单一指令构成的,这一点就比VMP强很多。 感谢分享 这种测试壳强度的cm,大佬是不会有兴趣下载的 六六六,膜拜大神,奥利给 感谢分享. 感谢大佬分享 学习了谢谢分享 不错学习了 自己编写的程序 可以用这个加密了