1)背景
========
一个国外的小软件, 歧视中国人, 对英文系统不要密钥,
但是, 检测到system locale为 zh_cn 就需要输入密钥(能通过此CrackMe.exe验证的密钥)!
不想每次都改为en_us再重启才能运行.
一气之下, 尝试破解!
限于个人能力, 求帮助破解(zh_cn能用的密钥,或keygen,或算法描述)!
附上自己的研究成果, 一起破解之, 谢谢.
2)使用方法: 命令中带参数运行.
==============================
正确调用方法: CrackMe.exe [29位key字串] [locale字串]
E:\> CrackMe.exe
invalid number of arguments : 0
Usage:
CrackMe.exe key locale
available locales
locale : description
****** : ***********
[1]ja : japanese
[1]ja_jp : japanese
zh_tw : Chinese Taiwan
zh_cn : Chinese (PRC)
zh_hk : Chinese (Hong Kong S.A.R)
[5]ko : korean
[5]ko_kr : korean
es_ar : Argentina - Spanish
en_bz : Beliz - English
pt_br : Brazil - Portuguese
es_bo : Bolivia - Spanish
[10]es_cl : Chile - Spanish
es_co : Colombia - Spanish
es_cr : Costa Rica - Spanish
es_do : Dominican Republic - Spanish
es_ec : Ecuador - Spanish
[15]es_gt : Guatemala - Spanish
en_gy : Guyana - English
es_hn : Honduras - Spanish
es_mx : Mexico - Spanish
es_ni : Nicaragua - Spanish
[20]es_pa : Panama - Spanish
es_pe : Peru - Spanish
es_pr : Puerto Rico - Spanish
es_py : Paraguay - Spanish
es_sv : El Salvador - Spanish
[25]es_uy : Uruguay - Spanish
es_ve : Venezuela - Spanish
3)已研究的成果
===============
a. 反编译为c代码,研究出key为29个字符, 形如: XXXXX-XXXXX-XXXXX-XXXXX-XXXXXX
KEY中每个字符均从如下字符集中取得: '-0123456789BCDFGHJKLMNPQRSTVWXYZ@'
比如: 一个有效的key为 NVQSR-8D0X5-5@GPY-SJ@9S-0@0RZ
b. locale字串如usage输出中描述. 方括号中的标号为locale的ID号.
比如: 简体中文locale为 "zh_cn", 其locale ID为3.
c. 验证过程如下:
(1)验证参数个数是否为3.
否则输出: "ERROR: invalid number of arguments : [参数个数]" 和 usage信息.
(2)验证输入的key串是否为null.
否则输出: "ERROR: No Product Key Found\n"
(3)校验key串的有效性:
key长度不是29,输出: "ERROR: Invalid Product Key Size"
key中有字母不在字符集中, 输出: "ERROR: Invalid Character Found In Product Key"
校验key的checksum值, 错误则输出: "ERROR: Invalid checksum"
(4)从key中计算是否过期, 并校验:
过期值!=0, 输出: "ERROR: Expired"
(5)从key中计算出key类型:
类型值==1,输出: "Type: Express license\n"
类型值==2,输出: "Type: Trial (evaluation) license\n"
类型值==0,输出: "Type: Full-use license\n"
(6)若key中的locale为CJK编码, 则与系统当前locale(输入的locale串即系统当前locale) 比较:
系统locale非CJK, 输出: "Product: KeyVer=3 Locale mismatch (%s != ja|ko|zh_tw|zh_cn|zh_hk)\n"
系统locale为CJK之一, 输出: "Product: Korean Locale\n"
或: "Product: Chinese Locale\n"
或: "Product: Japanese Locale\n"
产品类型码==1, 输出: "Product: DB Server\n"
产品类型码==2, 输出: "Product: Replication Server\n"
(7)若key中locale非CJK, 则与系统当前locale比较是否匹配:
首先输出key和系统当前locale值: "Key: XXXXX-XXXXX-XXXXX-XXXXX-XXXXXX - Locale: zh_cn"
校验key中locale是否一致, 输出: "locale Mismatch i.e locale 24, expected locale 3"
若输入的系统locale不在表中: "Invalid locale Index passed i.e locale 24,expected locale 0"
说明: 比如系统locale为en_us, 则不需要运行CrackMe.exe去验证, 直接就pass了.
因此, 在CreakMe.exe 中不包括那些不需验证的locales, 比如 en_us等!
(8)以上验证均成功pass, 则输出: "OK"
d. 目前已有的一个key为: NVQSR-8D0X5-5@GPY-SJ@9S-0@0RZ
过期日期为: 2011-01-01
key中locale为: es_sv : El Salvador - Spanish (其locale index为24)
此key验证过程如下:
E:> CreakMe.exe NVQSR-8D0X5-5@GPY-SJ@9S-0@0RZ es_sv
ERROR: Expired
将系统时间改为2011-1-1之前, 重新验证通过:
E:> CreakMe.exe NVQSR-8D0X5-5@GPY-SJ@9S-0@0RZ es_sv
Type: Full-use license
Key: NVQSR-8D0X5-5@GPY-SJ@9S-0@0RZ - Locale: es_sv
OK
换为其它的locale输入, 不能通过验证:
E:> CreakMe.exe NVQSR-8D0X5-5@GPY-SJ@9S-0@0RZ zh_cn
Type: Full-use license
Key: NVQSR-8D0X5-5@GPY-SJ@9S-0@0RZ - Locale: zh_cn
locale Mismatch i.e locale 24, expected locale 3
4)求帮助, 大家来Crack试试看~~
==============================
个人水平太菜, 目前其中的几个关键函数, 移位/异或操作太多, 看不大懂.
求大家帮助!
我把反编译的c代码一并附上, 有时间的话, 高手都来试试~~~
目标:
a. 希望能得到一个zh_cn下能用的, 没有过期时间的(Full-use license) 的密钥.
b. 哪位大侠能告知下详细的算法, 或者能写出 keygen, 更加好啦. 谢谢.
欢迎各位大侠指教! 这里真心谢谢了. 留个联系方式:
email: zhw618@zju.edu.cn
QQ: 陆壹捌陆壹壹零
谢谢各位!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!