本帖最后由 1595901624 于 2019-2-15 12:35 编辑
山寨麻花注册机
开篇
最近发现有一款山寨的麻花影视,打开软件发现需要注册,需要20元大洋。无奈家里穷,只能破解了,发现是很简单的AES加密。
软件分析过程就省略了,直接分析注册原理。。
注册界面如图:
注册ID的生成过程
先介绍下官方更新日志:
- 获取手机的imei;
- 计算imei的hashCode;
- 将生成的hashCode,转换为八进制字符串,得到注册ID
以上并不重要
注册码的生成过程
- 将Id看作是八进制的数字,然后转化成十进制;
- 将这个十进制数字再与28017作加法;
- 将得到的数字使用AES加密,将结果在转化为hex字符串;
这里使用的AES/ECB/PKCS5Padding 加密:
我看到注册码生成的过程有点儿吃惊,感觉像某个锁机的解密,,我都有点儿怀疑作者之前做过锁机(仅仅个人猜测)。。。
AES代码(Java)
public class AesHelper {
private final static String defaultKey = "HylDefaultAESKey";
private AesHelper() {
}
/**
* AES/ECB/PKCS5Padding 加密(自定义Key)
*
* @param key
* @param plainText
* @return
* @throws Exception
*/
public static String encrypt(String key, String plainText) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(
(key == null ? defaultKey : key).getBytes("ASCII"), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte b[] = cipher.doFinal(plainText.getBytes());
return bytesToHexString(b).toLowerCase();
}
/**
* AES/ECB/PKCS5Padding 加密(默认Key)
*
* @param plainText
* @return
* @throws Exception
*/
public static String encrypt(String plainText) throws Exception {
return encrypt(null, plainText);
}
/**
* 将 byte[]转化成 hex字符串
*
* @param src
* byte[] data
* @return hex string
*/
private static String bytesToHexString(byte[] src) {
StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
}
调用过程如下:
String id = "10630151615";
String key = "FormatFaApplocks";
long imeiR8 = Long.parseLong(id, 8);
String pass = AesHelper.encrypt(key, (imeiR8 + 28017) + "");
System.err.println(pass); //注册码
以上好像也不是很重要
手动生成注册码
以注册ID:10630151615 为例
- 将八进制数 10630151615 转化为十进制数 1180750733(使用程序员计算器转换);
- 1180750733 + 28017 = 1180778750;
- 将上面的数使用AES加密,这个过程需要借助在线AES加解密;AES加解密网站
- 结果如图所示为 2c54f5f5cf4c1d8fb4884aa365546e16 这就是注册码了(20元大洋又省下了,美滋滋)
Android注册机获取注册码
输入注册id,点击生成注册码, 2c54f5f5cf4c1d8fb4884aa365546e16 与上面手动生成的一样,然后去软件注册试试,成功,哈哈。
备注
本软件仅供学习与交流技术,不得用作其它用途,请于24小时内删除使用。
下载地址
|