-
-
[原创]Bullseye Coverage license破解笔记
-
发表于:
2014-3-15 11:45
28470
-
[原创]Bullseye Coverage license破解笔记
一个多周,茶不思饭不香,下班后除了做饭吃饭就是坐在电脑前读汇编代码,基本上每天凌晨1:00上床,反反复复看了大概上千行汇编代码,一闭上眼满脑子都是一条条汇编指令,经历多次惊喜,失望,再惊喜.再失望的起起落落,终于成功破解了这款商业软件的license.
Bullseye是一个测试代码覆盖率的工具, 作为一个专业的高级的自动化测试工程师^-^,对自己的测试效果作评估,Bullseye是很有效的工具.
http://www.bullseye.com/
这个是bullseye的主页, 据说上面的Evaluate链接是可以申请一个有效期为一个月的license的,于是我填了自己的公司邮箱,很天真地等了两天没有任何消息......
不高兴之下,决定弄个破解版在自己的电脑上跑跑
可能是因为个人很少使用,谁没事会去正规的测试自己的随意写的程序?所以在网上并没有找到合适的破解版或licnese Key.
怎么说哥也是密码学出身,小小的license Key,还难不到
Day1.
暴力破解
这个是最简单的破解方法,直接跳过license Key, 修改程序的二进制代码来跳过对license的检查.商业软件一般没有那么弱智,但是一些不成熟的软件确很容易通过把程序里的JZ/JNZ之类的直接改成JMP (eb) 来跳过检查。
于是,找来Olly,就可以开工了。
不得不提,Olly简直就是Hack的神器,导入程序后直接搜索所有的inter module call,在GetTextW的位置上下断点,然后F9开始调试,在licenseKey的输入框界面里粘贴任意字符,Olly会停在设置的断点上,然后费些精力跟踪程序的运行,尝试把可疑的条件跳转直接改称jmp, 经过反复几次试验,果然界面上提示"next->". 一阵狂喜!~然后点击下一步进行安装。一切那么顺利, 我都开始佩服我自己了~
Day2.
暴力破解第二波
让我意想不到的是,安装好的程序在运行的时候又会去检查licnese。。。。没有办法,故计重试,直接改这些安装的程序,又是一顿折腾,终于我需要用的几个程序可以运行起来了。看着Bullseye的GUI,我那个得意啊,写个程序来测测吧。结果不管我写怎样的程序,最后的结果都是100%Coverage,这不是萌我么,太黑了,这个安全机制坐的这么深
Day3.
BruteForce
我有点生气,于是想试试运气,咱来猜吧。网上有一些过期的license, 再加上之前跟踪license处理的过程,我初步断定license是24个字母或数字组成,每6个字母为一组,于是随手写了个python脚本,随机生成24字节的字符串,然后调用Bullseye自带的license Key检查工具来确认是否是有效的license。程序跑了一天一夜,大概跑了几百万个数据,结果一无所获。其实从key的长度上就应该可以推算出穷举是不现实的,不过有时候人总是会相信自己会有好运气,因为自己是宇宙的中心,哈哈
Day4,5
TEA对称加密算法
眼看暴力破解希望渺茫,哥作了一个重大决定,破解license Key生成算法!再一次开动Olly,一步一步跟踪,初步发现是
1. License Key的字符是从"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"选出来
2. 每六个字符为一组,转化为一个32bit的
3. Key的长度可以是24个字符也可以是36个,这样最多会转化为6个32bit值
4. 每两个32bit值,会做32轮比较复杂的置换
5. 汇编代码里有四个32bit常量频繁出现在算法里0x499602d2, 0xbb40e64d, 0xf0e1d2c3, 0x3ade68b1,相信这四个值就是加密的密钥
6. 汇编代码本身嵌入了一个常量0xc6ef3720
这时候就要请教almighty的google了,直接搜索c6ef3720, tea算法直接跳了出来:Tiny Encryption Algorithm
这里有篇小论文是介绍这篇算法实现的http://www.cix.co.uk/~klockstone/tea.pdf基本思路也是Feistel置换
对比汇编代码,我一下子或然开朗,这正是Bullseye用的加密算法,于是我把那个找来的过期的license作了一下解密
2DvplG2MnQp22Zk7ek0E4dhp -> 0x10201,0x40034000,0x1e9,0
看到这样的结果,我当时就激动了,我当时是多么相信我离最终答案只有一步之遥....于是我跟踪阿跟踪阿跟踪阿,直到凌晨3点,依然没有跟出来.....商业软件的保护机制不容小觑阿。。。。
Day6
BruteForce second wave
我有点想放弃了,于是有开始了brute force,根据前两天的分析,一个24个字符的license经过解密后,第一个int值byte位从低到高依次代表license的年月日,第二个int的最高byte代表类型,还有剩下的几位会跟一些常量值比较。我把一些位的值固定下来,选了大概40个bit,开始穷举测试,结果区区40个bit,我的破电脑也handle不了,一个晚上下来,跑了大概1%,真沮丧。。。其实我这时候应该意识到,24个字符的license可能完全被弃用了。
Day7,8
继续跟踪
Day9
黄天不负苦心人啊
经过这么多天的苦心经营,终于在一次数据条整之后,安装界面上再次出现了”next->“
整理了一下Bullseye的解密过程大致是这样的,首先最新版的Bullseye的license是36个字符
1. 6个为一组,License key-> int, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 依次对应着0-61的值,然后6个字符对应的6个值按照62进制计算出一个int来
2. 对这6组int,作一次TEA加密
3. 置换某些对int里上半16bit或下16bit的值
4. 在作一次TEA加密
5. 对解密的最终结果作检查,确保license的日期,类型,ID,以及其他某些值的范围
最后用生成的没有用户限制的license成功安装了bullseye,而且一切正常。
搞定,收工~!
本贴纯属炫耀,尽供本人消遣,请勿用于商业用途,谢谢
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)