本帖最后由 codelive 于 2014-5-20 16:24 编辑
在群 BRET Team 有网友对FileSplit进行分析,自己也试了一下,还真分析出了正确的注册码,自己对算法不熟悉,只介绍从内存中取出正确的注册码.
先随便输入用户名:abc, 序列号:12345678,一般获取Editbox输入都是GetDlgItemTextA/W,下断点发现是调用GetDlgItemTextA
通过调用GetDlgItemTextA分别获取输入的用户名和序列号
获取到输入的用户名和序列号,就调用一个函数进行验证(如果验证成功会保存到注册表) F7进入后,又把用户名和序列号压栈,调用验证函数,先F8不进入,检测al是否为0如果是0则验证失败: 好了,这次F7进入FSplit.00411C70跟踪,这里判断输入的序列号是否为%d-%d-%d-%d格式,也就是用”-”去分隔,如果分隔的部分小于4则错误: 知道了序列号规则重新输入: 1-2-3-4, 这次通过了,继续跟踪:
跟踪这到里有一个比较,先比较输入序列号的第1部分是否为0x270F(9999): 如果不同则失败,判断失败都是走到这里,通过异或把al为0: 所以通过上面的比较,我们知道了第1部分的序列号应该是9999, 重新输入: 9999-2-3-4 这样第1 部分的判断验证就通过了:
继续跟踪,开始比较第3部分,EAX的值为0x34F6,所以第3部分应该是0x34F6也就是13558: 好了,重新输入: 9999-2-13558-4 开始比较序列号的第4部分,通过计算EDX是0x09,所以第4部分应该是9: 好了,重新输入: 9999-2-13558-9, 好了,注册成功了!
同样可以可以获得另一个注册码:
通过上面的跟踪得到正确的序列号,没有分析具体算法,本文完。
|