锁机软件破解
样本来源:https://www.52pojie.cn/forum.php?mod=viewthread&tid=947787&extra=page%3D1%26filter%3Dtypeid%26typeid%3D191&page=3部分图片拿自原帖。
先看看锁机界面长什么样子:
根据帖子的apk下载链接,我们下载后打开jadx,找到AndroidManifest 文件:
得知Application名字和首页页面名字:逐个看看:
先看Application,
有点狡猾,Application和首页都是藏起来的
藏在Android目录下,一般这个目录都是Android的文件,弄成自己的想让人找不到。
看了一下好像没干啥,去首页看看去:找到oncreate
看看这个da干了些什么:
总得来说,用base64混淆了一下字符串,让你增加难度,不知道发生了什么,我们自己写代码还原一下:
代码注释在下面的图片中:
做完这些操作后就执行root 和exit,这两个我就不接去出来了。
然后我们去复制这个Android,apk出来
扔进去jadx或者jeb
发现类名被混淆了,点击打开会卡死,估计是利用了一些bug导致反编译工具没有响应。
这个时候我本来要放弃的,没有思路,然后查了一下资料,知识星球里面有一个叫Bin的哥们评论别人,其中一个思路就是先将dex转成jar,利用proguard去将jar混淆成abcd。
dex2jar的使用方法我是参考这个网页:https://blog.csdn.net/katrinawj/article/details/80016315
proguard的使用方法参考这个网页:https://www.liangzl.com/get-article-detail-16955.html
有兴趣的哥们请自行查阅使用,时间紧急,我得写完帖子下班了,饿了。
然后将生成的jar扔进jadx
发现能正常查阅了
好了,我们现在虚拟机跑起来软件,让它锁机,锁机界面如下:
从AndroidManifest得知没有Application类所以我们从Mainactivity看起:
这里有一个ga和startService
点进去ga
看起来查询包名,然后不知道干啥,解密一下
向这个包名发送数据,抓点log,好像无关紧要
我们去com.tyh.app.tyh这个service看看
oncreate走起
重点是这三个,随机生成一个k,然后settext,然后设置监听事件,
点进去监听事件看看,
a是edittext 也是是输入密码的框
ha是判断密码是否正确的地方,我们点进去ha
是一个hex密码转换表加上一些逻辑
我们直接写代码看看
先说明一下,这里得四重校验是我一下字全部写出来得,跟我的代码顺序无关
我们看看四重校验得第一个base64
base64:中奖号码:946805632145
中奖号码:946805632145
base64:中奖号码:5866525853
中奖号码:5866525853
base64:中奖号码:86523587580
中奖号码:86523587580
base64:中奖号码:36850664453
中奖号码:36850664453
和我们得锁机密码是不是很像,对得,还记得我们上面说得k么,这个k就是多出来得最后三位
我们将这个k带入到代码里面,在我这里是871
代码里面还做了截断前五位得操作,所以我们要输入进去得密码就是 NMCLG
来到第二层
我们看第二层得点击事件代码
总得来说,就是在输入框输入密码,密码截图前3 和剩余部分两部分,前面得进行进行三次md5后和7063eeced8dada899a5231e272d0ba07比较,正确得话用剩余部分和String replaceAll = i.a(new StringBuffer().append(this.a.f).toString()).replaceAll(a.a(new byte[]{(byte) 120, (byte) 101, (byte) 113, (byte) 82, (byte) 42}), "");这段代码的出来得结果比较,吻合就通过。
刚开始看得时候一脸懵逼,想了一会才发现是md5,写代码写啥了。
首先我们先破解前面,三次md5后和7063eeced8dada899a5231e272d0ba07这个写死得值比较,怎么办,百度md5破解吧,老天不负有心人,找到个免费给我结果得,幸好这里得加密没有加盐,不然可能会解不出来,或者解出来要钱。
得知,前三位数是944 固定得。
然后带入这次得锁机最后三位数070到代码里面
得出来是这串
然后我们用944加上这一串输入进去
然后就进入第三层,但是第三层和第二层是一样得,第四层和第一层是一样得,所以只要破解两种算法就行。
写的匆忙,如有疏忽,请指出。另外,如果第二层第三层如果最后三位得密码是0开头就貌似有点问题,要重启一下输入非0。具体没有细测,谢谢大家
以下是测试代码,写得匆忙,仅供参考
```
public class GameGuardian {
public static void main(String[] args) {
byte[] a = new byte[]{(byte) 67, (byte) 77, (byte) 118, (byte) 90, (byte) 108, Message.CMD_CS_FREEZE, (byte) 88, (byte) 72, (byte) 69, (byte) 119, Message.CMD_CS_KEEP_ALIVE, Message.CMD_CS_GET_RESULT_LIST, (byte) 68, (byte) 99, Message.CMD_CS_KEEP_ALIVE, (byte) 84, (byte) 121, (byte) 119, (byte) 76, (byte) 85, (byte) 66, (byte) 104, (byte) 75, (byte) 85, (byte) 69, (byte) 103, Message.CMD_CS_GET_RESULT_LIST, (byte) 83, (byte) 42};
System.out.println(base64(a));
byte[] b = new byte[]{(byte) 122, (byte) 116, (byte) 72, (byte) 73, (byte) 110, (byte) 74, (byte) 110, (byte) 73, (byte) 110, (byte) 74, (byte) 68, (byte) 74, (byte) 122, (byte) 100, (byte) 118, (byte) 77, (byte) 110, (byte) 74, (byte) 117, Message.CMD_CS_ALTER, (byte) 110, (byte) 97, Message.CMD_CS_TAKE_SCREENSHOT, Message.CMD_CS_TAKE_SCREENSHOT, (byte) 42};
byte[] c = new byte[]{(byte) 108, Message.CMD_CS_UNFREEZE, (byte) 110, (byte) 75, (byte) 121, Message.CMD_CS_FREEZE, (byte) 102, (byte) 89, (byte) 122, (byte) 99, Message.CMD_CS_KEEP_ALIVE, (byte) 98, (byte) 66, (byte) 77, (byte) 114, (byte) 89, (byte) 66, Message.CMD_CS_FREEZE, (byte) 76, (byte) 75, (byte) 108, Message.CMD_CS_FREEZE, (byte) 114, (byte) 72, (byte) 68, (byte) 103, (byte) 101, (byte) 86, (byte) 69, (byte) 104, (byte) 114, (byte) 84, (byte) 66, (byte) 97, Message.CMD_CS_TAKE_SCREENSHOT, Message.CMD_CS_TAKE_SCREENSHOT, (byte) 42};
byte[] d = new byte[]{(byte) 108, Message.CMD_CS_UNFREEZE, (byte) 110, (byte) 75, (byte) 121, Message.CMD_CS_FREEZE, (byte) 102, (byte) 89, (byte) 122, (byte) 99, Message.CMD_CS_KEEP_ALIVE, (byte) 98, (byte) 66, (byte) 77, (byte) 114, (byte) 89, (byte) 66, Message.CMD_CS_FREEZE, (byte) 76, (byte) 75, (byte) 108, Message.CMD_CS_FREEZE, (byte) 114, (byte) 72, (byte) 68, (byte) 103, (byte) 101, (byte) 86, (byte) 69, (byte) 104, (byte) 114, (byte) 78, (byte) 66, (byte) 119, (byte) 87, Message.CMD_CS_TAKE_SCREENSHOT, (byte) 42};
;
System.out.println(base64(b));
System.out.println(base64(c));
System.out.println(base64(d));
byte[] e = new byte[]{(byte) 67, Message.CMD_CS_UNFREEZE, (byte) 117, Message.CMD_CS_TAKE_SCREENSHOT, (byte) 42};
System.out.println(base64(e));
byte[] f = new byte[]{(byte) 66, (byte) 119, Message.CMD_CS_KEEP_ALIVE, Message.CMD_CS_GET_RESULT_LIST, (byte) 66, (byte) 78, (byte) 113, (byte) 71, (byte) 108, (byte) 119, Message.CMD_CS_CLEAR_LOCK_LIST, (byte) 71, (byte) 67, (byte) 78, (byte) 67, (byte) 83, (byte) 67, (byte) 77, (byte) 118, (byte) 84, (byte) 66, Message.CMD_CS_UNFREEZE, (byte) 118, (byte) 85, (byte) 68, (byte) 99, (byte) 97, (byte) 86, (byte) 67, Message.CMD_CS_UNFREEZE, (byte) 76, (byte) 90, (byte) 68, (byte) 103, (byte) 118, (byte) 84, (byte) 99, (byte) 71, Message.CMD_CS_TAKE_SCREENSHOT, Message.CMD_CS_TAKE_SCREENSHOT, (byte) 42};
System.out.println(base64(f));
byte[] g1 = new byte[]{(byte) 121, Message.CMD_CS_UNFREEZE, (byte) 97, (byte) 71, (byte) 67, Message.CMD_CS_FREEZE, (byte) 114, (byte) 74, (byte) 121, (byte) 120, (byte) 106, (byte) 75, (byte) 108, Message.CMD_CS_SEARCH_NUMBER, (byte) 102, (byte) 85, (byte) 122, (byte) 104, (byte) 106, (byte) 86, (byte) 65, (byte) 119, (byte) 113, (byte) 86, (byte) 122, (byte) 103, (byte) 102, Message.CMD_CS_SEARCH_NUMBER, (byte) 121, (byte) 115, Message.CMD_CS_KEEP_ALIVE, Message.CMD_CS_RESET_SEARCH, (byte) 68, (byte) 103, (byte) 68, (byte) 84, (byte) 66, (byte) 99, (byte) 97, (byte) 86, (byte) 67, Message.CMD_CS_UNFREEZE, (byte) 76, (byte) 90, (byte) 68, (byte) 103, (byte) 118, (byte) 84, (byte) 108, Message.CMD_CS_FREEZE, (byte) 102, (byte) 87, (byte) 67, (byte) 99, Message.CMD_CS_KEEP_ALIVE, (byte) 98, (byte) 66, (byte) 77, (byte) 114, (byte) 89, (byte) 66, Message.CMD_CS_FREEZE, (byte) 76, (byte) 75, (byte) 108, (byte) 77, (byte) 102, (byte) 87, (byte) 65, (byte) 87, (byte) 79, Message.CMD_CS_TAKE_SCREENSHOT, (byte) 42};
byte[] g2 = new byte[]{(byte) 121, Message.CMD_CS_FREEZE, (byte) 72, (byte) 84, (byte) 66, Message.CMD_CS_FREEZE, (byte) 113, (byte) 71, (byte) 110, (byte) 74, (byte) 113, Message.CMD_CS_SEARCH_NUMBER, (byte) 105, (byte) 99, Message.CMD_CS_KEEP_ALIVE, (byte) 90, (byte) 69, (byte) 120, (byte) 110, Message.CMD_CS_SEARCH_NUMBER, (byte) 122, (byte) 119, Message.CMD_CS_SEARCH_NUMBER, (byte) 86, (byte) 121, (byte) 120, (byte) 98, (byte) 87, (byte) 108, Message.CMD_CS_SEARCH_NUMBER, (byte) 102, (byte) 85, (byte) 122, (byte) 104, (byte) 106, (byte) 86, (byte) 65, (byte) 119, (byte) 113, (byte) 85, (byte) 121, (byte) 120, (byte) 98, (byte) 82, (byte) 99, (byte) 71, Message.CMD_CS_TAKE_SCREENSHOT, Message.CMD_CS_TAKE_SCREENSHOT, (byte) 42};
byte[] g3 = new byte[]{(byte) 121, Message.CMD_CS_UNFREEZE, (byte) 97, (byte) 71, (byte) 67, Message.CMD_CS_FREEZE, (byte) 114, (byte) 74, (byte) 121, (byte) 120, (byte) 106, (byte) 75, (byte) 108, Message.CMD_CS_SEARCH_NUMBER, (byte) 102, (byte) 85, (byte) 122, (byte) 104, (byte) 106, (byte) 86, (byte) 65, (byte) 119, (byte) 113, (byte) 86, (byte) 122, (byte) 103, (byte) 102, Message.CMD_CS_SEARCH_NUMBER, (byte) 121, (byte) 115, Message.CMD_CS_KEEP_ALIVE, Message.CMD_CS_RESET_SEARCH, (byte) 68, (byte) 103, (byte) 68, (byte) 84, (byte) 66, (byte) 99, (byte) 97, (byte) 86, (byte) 67, Message.CMD_CS_UNFREEZE, (byte) 76, (byte) 90, (byte) 68, (byte) 103, (byte) 118, (byte) 84, (byte) 108, Message.CMD_CS_UNFREEZE, (byte) 98, (byte) 89, (byte) 65, (byte) 120, (byte) 121, (byte) 84, (byte) 121, (byte) 120, (byte) 98, (byte) 87, (byte) 108, Message.CMD_CS_SEARCH_NUMBER, (byte) 102, (byte) 85, (byte) 122, (byte) 104, (byte) 106, (byte) 86, (byte) 65, (byte) 119, (byte) 113, (byte) 85, (byte) 121, (byte) 120, (byte) 98, (byte) 82, (byte) 42, (byte) 99, (byte) 71, Message.CMD_CS_TAKE_SCREENSHOT, Message.CMD_CS_TAKE_SCREENSHOT, (byte) 42};
byte[] g4 = new byte[]{(byte) 121, Message.CMD_CS_FREEZE, (byte) 72, (byte) 84, (byte) 66, Message.CMD_CS_FREEZE, (byte) 113, (byte) 71, (byte) 110, (byte) 74, (byte) 113, Message.CMD_CS_SEARCH_NUMBER, (byte) 105, (byte) 99, Message.CMD_CS_KEEP_ALIVE, (byte) 90, (byte) 69, (byte) 120, (byte) 110, Message.CMD_CS_SEARCH_NUMBER, (byte) 122, (byte) 119, Message.CMD_CS_SEARCH_NUMBER, (byte) 86, (byte) 67, (byte) 104, (byte) 106, (byte) 80, (byte) 68, (byte) 73, Message.CMD_CS_GET_RESULT_LIST, (byte) 72, (byte) 67, (byte) 104, (byte) 97, (byte) 86, (byte) 113, (byte) 119, Message.CMD_CS_ALTER, (byte) 75, (byte) 67, (byte) 77, Message.CMD_CS_KEEP_ALIVE, (byte) 80, (byte) 122, (byte) 99, Message.CMD_CS_ALTER, (byte) 72, (byte) 67, (byte) 103, (byte) 83, (byte) 107, (byte) 42};
System.out.println(base64(g1));
System.out.println(base64(g2));
System.out.println(base64(g3));
System.out.println(base64(g4));
byte[] h1 = new byte[]{(byte) 67, (byte) 77, (byte) 118, (byte) 73, (byte) 66, Message.CMD_CS_FREEZE, Message.CMD_CS_KEEP_ALIVE, Message.CMD_CS_SEARCH_NUMBER, (byte) 99, (byte) 71, Message.CMD_CS_TAKE_SCREENSHOT, Message.CMD_CS_TAKE_SCREENSHOT, (byte) 42};
byte[] h2 = new byte[]{(byte) 122, (byte) 120, (byte) 72, (byte) 80, (byte) 68, (byte) 97, (byte) 79, Message.CMD_CS_TAKE_SCREENSHOT, (byte) 42};
System.out.println(base64(h1));
System.out.println(base64(h2));
//android.apk
System.out.println("=============Android.apk==============");
byte[] i = new byte[]{(byte) 121, (byte) 18, (byte) 25, (byte) 84, (byte) 108, (byte) 77, (byte) 102, (byte) 80, (byte) 122, (byte) 103, (byte) 117, (byte) 85, (byte) 68, (byte) 119, (byte) 75, (byte) 29, (byte) 42};
System.out.println(base64(i));
byte[] j = new byte[]{(byte) 116, (byte) 103, (byte) 25, (byte) 78, (byte) 113, (byte) 18, (byte) 102, (byte) 16, (byte) 42};
System.out.println(base64(j));
byte[] k = new byte[]{(byte) 66, (byte) 103, (byte) 25, (byte) 78, (byte) 121, (byte) 18, (byte) 102, (byte) 16, (byte) 105, (byte) 99, (byte) 17, (byte) 18, (byte) 105, (byte) 104, (byte) 114, (byte) 79, (byte) 67, (byte) 77, (byte) 118, (byte) 72, (byte) 122, (byte) 104, (byte) 114, (byte) 80, (byte) 66, (byte) 119, (byte) 117, (byte) 29, (byte) 42};
System.out.println(base64(k));
byte[] l1 = new byte[]{(byte) 121, (byte) 18, (byte) 25, (byte) 84, (byte) 108, (byte) 77, (byte) 102, (byte) 75, (byte) 67, (byte) 78, (byte) 113, (byte) 85, (byte) 116, (byte) 101, (byte) 25, (byte) 104, (byte) 113, (byte) 16, (byte) 102, (byte) 117, (byte) 120, (byte) 16, (byte) 118, (byte) 111, (byte) 118, (byte) 102, (byte) 106, (byte) 106, (byte) 114, (byte) 118, (byte) 109, (byte) 29, (byte) 42};
byte[] l2 = new byte[]{(byte) 66, (byte) 103, (byte) 76, (byte) 85, (byte) 122, (byte) 120, (byte) 109, (byte) 29, (byte) 42};
System.out.println(base64(l1));
System.out.println(base64(l2));
byte[] m = new byte[]{(byte) 121, (byte) 18, (byte) 25, (byte) 84, (byte) 108, (byte) 78, (byte) 114, (byte) 21, (byte) 65, (byte) 99, (byte) 21, (byte) 72, (byte) 67, (byte) 104, (byte) 97, (byte) 85, (byte) 68, (byte) 104, (byte) 76, (byte) 79, (byte) 42};
System.out.println(base64(m));
byte[] n = new byte[]{(byte) 121, (byte) 18, (byte) 25, (byte) 84, (byte) 108, (byte) 77, (byte) 102, (byte) 80, (byte) 122, (byte) 103, (byte) 117, (byte) 85, (byte) 68, (byte) 119, (byte) 75, (byte) 29, (byte) 42};
System.out.println(base64(n));
byte[] o1 = new byte[]{(byte) 21, (byte) 108, (byte) 73, (byte) 84, (byte) 21, (byte) 65, (byte) 119, (byte) 119, (byte) 21, (byte) 121, (byte) 11, (byte) 19, (byte) 21, (byte) 22, (byte) 99, (byte) 98, (byte) 111, (byte) 74, (byte) 75, (byte) 16, (byte) 110, (byte) 74, (byte) 71, (byte) 87, (byte) 110, (byte) 116, (byte) 121, (byte) 90, (byte) 109, (byte) 74, (byte) 101, (byte) 16, (byte) 110, (byte) 113, (byte) 29, (byte) 29, (byte) 42};
byte[] o2 = new byte[]{(byte) 21, (byte) 108, (byte) 73, (byte) 84, (byte) 21, (byte) 65, (byte) 119, (byte) 119, (byte) 21, (byte) 121, (byte) 11, (byte) 19, (byte) 21, (byte) 22, (byte) 99, (byte) 98, (byte) 111, (byte) 74, (byte) 117, (byte) 20, (byte) 110, (byte) 74, (byte) 121, (byte) 17, (byte) 109, (byte) 74, (byte) 117, (byte) 20, (byte) 110, (byte) 116, (byte) 109, (byte) 29, (byte) 42};
byte[] o3 = new byte[]{(byte) 21, (byte) 108, (byte) 73, (byte) 84, (byte) 21, (byte) 65, (byte) 119, (byte) 119, (byte) 21, (byte) 121, (byte) 11, (byte) 19, (byte) 21, (byte) 22, (byte) 99, (byte) 98, (byte) 111, (byte) 74, (byte) 71, (byte) 18, (byte) 110, (byte) 116, (byte) 105, (byte) 90, (byte) 110, (byte) 116, (byte) 71, (byte) 19, (byte) 110, (byte) 116, (byte) 71, (byte) 87, (byte) 42};
byte[] o4 = new byte[]{(byte) 21, (byte) 108, (byte) 73, (byte) 84, (byte) 21, (byte) 65, (byte) 119, (byte) 119, (byte) 21, (byte) 121, (byte) 11, (byte) 19, (byte) 21, (byte) 22, (byte) 99, (byte) 98, (byte) 111, (byte) 74, (byte) 109, (byte) 18, (byte) 111, (byte) 100, (byte) 117, (byte) 87, (byte) 110, (byte) 74, (byte) 121, (byte) 16, (byte) 110, (byte) 100, (byte) 117, (byte) 90, (byte) 42};
System.out.println(base64(o1));
System.out.println(base64(o2));
System.out.println(base64(o3));
System.out.println(base64(o4));
int ii = 536;//这里请写自己得k(第一重检验得base64得后三位)
System.out.println("a:" + a(ii));//SSLNJ 前五位
//2
// String base64_2 = base64(new byte[]{(byte) 110, (byte) 90, (byte) 97, (byte) 18, (byte) 109, (byte) 18, (byte) 118, (byte) 76, (byte) 121, (byte) 18, (byte) 118, (byte) 75, (byte) 111, (byte) 103, (byte) 114, (byte) 72, (byte) 122, (byte) 103, (byte) 101, (byte) 20, (byte) 111, (byte) 116, (byte) 76, (byte) 72, (byte) 110, (byte) 116, (byte) 105, (byte) 90, (byte) 109, (byte) 119, (byte) 117, (byte) 89, (byte) 110, (byte) 90, (byte) 106, (byte) 75, (byte) 109, (byte) 103, (byte) 106, (byte) 72, (byte) 109, (byte) 100, (byte) 67, (byte) 29, (byte) 42});
// System.out.println("base64_2:" + base64_2);
System.out.println("================================");
int iiiii = 963;//这里请替换
String replaceAll = ia(new StringBuffer().append(iiiii).toString()).replaceAll(base64(new byte[]{(byte) 120, (byte) 101, (byte) 113, (byte) 82, (byte) 42}), "");
System.out.println("2ReplaceAll:" + replaceAll);
String editable = "944" + replaceAll;
// if (editable.length() > 3) {
// String substring = editable.substring(0, 3);
// editable = editable.substring(3, editable.length());
// System.out.println("editable:" + editable);
// System.out.println(ia(ia(ia("944"))));
// //944
// String base64 = base64(new byte[]{(byte) 110, (byte) 90, (byte) 97, (byte) 18, (byte) 109, (byte) 18, (byte) 118, (byte) 76, (byte) 121, (byte) 18, (byte) 118, (byte) 75, (byte) 111, (byte) 103, (byte) 114, (byte) 72, (byte) 122, (byte) 103, (byte) 101, (byte) 20, (byte) 111, (byte) 116, (byte) 76, (byte) 72, (byte) 110, (byte) 116, (byte) 105, (byte) 90, (byte) 109, (byte) 119, (byte) 117, (byte) 89, (byte) 110, (byte) 90, (byte) 106, (byte) 75, (byte) 109, (byte) 103, (byte) 106, (byte) 72, (byte) 109, (byte) 100, (byte) 67, (byte) 29, (byte) 42});
// if (ia(ia(ia("944"))).equals(base64) && editable.equals(replaceAll)) {
// System.out.println("2:yes");
// }
// }
//
// //3
// System.out.println("================================");
// iiiii = 679;//这里请替换
// replaceAll = ia(new StringBuffer().append(iiiii).toString()).replaceAll(base64(new byte[]{(byte) 120, (byte) 101, (byte) 113, (byte) 82, (byte) 42}), "");
// System.out.println("2ReplaceAll:" + replaceAll);
// editable = "944" + replaceAll;
// if (editable.length() > 3) {
// String substring = editable.substring(0, 3);
// editable = editable.substring(3, editable.length());
// System.out.println("editable:" + editable);
// System.out.println(ia(ia(ia("944"))));
// //944
// String base64 = base64(new byte[]{(byte) 110, (byte) 90, (byte) 97, (byte) 18, (byte) 109, (byte) 18, (byte) 118, (byte) 76, (byte) 121, (byte) 18, (byte) 118, (byte) 75, (byte) 111, (byte) 103, (byte) 114, (byte) 72, (byte) 122, (byte) 103, (byte) 101, (byte) 20, (byte) 111, (byte) 116, (byte) 76, (byte) 72, (byte) 110, (byte) 116, (byte) 105, (byte) 90, (byte) 109, (byte) 119, (byte) 117, (byte) 89, (byte) 110, (byte) 90, (byte) 106, (byte) 75, (byte) 109, (byte) 103, (byte) 106, (byte) 72, (byte) 109, (byte) 100, (byte) 67, (byte) 29, (byte) 42});
// if (ia(ia(ia("944"))).equals(base64) && editable.equals(replaceAll)) {
// System.out.println("2:yes");
// }
// }
//
// //4
// System.out.println("================================");
// int iiii = 676;
// System.out.println("a:" + a(iiii));
}
public static final String ia(String str) {
char[] cArr = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
try {
byte[] bytes = str.getBytes();
String al = base64(new byte[]{(byte) 116, (byte) 117, (byte) 113, (byte) 17, (byte) 42});
System.out.println(al);
MessageDigest instance = MessageDigest.getInstance(base64(new byte[]{(byte) 116, (byte) 117, (byte) 113, (byte) 17, (byte) 42}));
instance.update(bytes);
char[] cArr2 = new char;
int i = 0;
for (byte b : instance.digest()) {
int i2 = i + 1;
cArr2 = cArr[(b >>> 4) & 15];
i = i2 + 1;
cArr2 = cArr;
}
System.out.println("ia:" + new String(cArr2));
return new String(cArr2);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static String a(int i) {
String replaceAll = hex(String.valueOf(i)).replaceAll(base64(new byte[]{(byte) 107, (byte) 102, (byte) 84, (byte) 72, (byte) 108, (byte) 120, (byte) 80, (byte) 98, (byte) 108, (byte) 118, (byte) 80, (byte) 68, (byte) 70, (byte) 100, (byte) 97, (byte) 80, (byte) 42}), "");
System.out.println(replaceAll);
String a = base64(new byte[]{(byte) 109, (byte) 97, (byte) 29, (byte) 29, (byte) 42});
String a2 = base64(new byte[]{(byte) 109, (byte) 113, (byte) 29, (byte) 29, (byte) 42});
String a3 = base64(new byte[]{(byte) 109, (byte) 71, (byte) 29, (byte) 29, (byte) 42});
String a4 = base64(new byte[]{(byte) 109, (byte) 87, (byte) 29, (byte) 29, (byte) 42});
String a5 = base64(new byte[]{(byte) 110, (byte) 97, (byte) 29, (byte) 29, (byte) 42});
String a6 = base64(new byte[]{(byte) 110, (byte) 113, (byte) 29, (byte) 29, (byte) 42});
String a7 = base64(new byte[]{(byte) 110, (byte) 71, (byte) 29, (byte) 29, (byte) 42});
String a8 = base64(new byte[]{(byte) 110, (byte) 87, (byte) 29, (byte) 29, (byte) 42});
String a9 = base64(new byte[]{(byte) 111, (byte) 97, (byte) 29, (byte) 29, (byte) 42});
String a10 = base64(new byte[]{(byte) 111, (byte) 113, (byte) 29, (byte) 29, (byte) 42});
String a11 = base64(new byte[]{(byte) 117, (byte) 97, (byte) 29, (byte) 29, (byte) 42});
String a12 = base64(new byte[]{(byte) 115, (byte) 71, (byte) 29, (byte) 29, (byte) 42});
byte[] bArr = new byte;
String a13 = base64(new byte[]{(byte) 119, (byte) 71, (byte) 29, (byte) 29, (byte) 42});
byte[] bArr2 = new byte;
String a14 = base64(new byte[]{(byte) 113, (byte) 87, (byte) 29, (byte) 29, (byte) 42});
byte[] bArr3 = new byte;
String a15 = base64(new byte[]{(byte) 116, (byte) 71, (byte) 29, (byte) 29, (byte) 42});
byte[] bArr4 = new byte;
String a16 = base64(new byte[]{(byte) 116, (byte) 113, (byte) 29, (byte) 29, (byte) 42});
byte[] bArr5 = new byte;
String a17 = base64(new byte[]{(byte) 116, (byte) 97, (byte) 29, (byte) 29, (byte) 42});
byte[] bArr6 = new byte;
String a18 = base64(new byte[]{(byte) 114, (byte) 87, (byte) 29, (byte) 29, (byte) 42});
byte[] bArr7 = new byte;
String a19 = base64(new byte[]{(byte) 117, (byte) 87, (byte) 29, (byte) 29, (byte) 42});
byte[] bArr8 = new byte;
String a20 = base64(new byte[]{(byte) 113, (byte) 71, (byte) 29, (byte) 29, (byte) 42});
for (int i2 = 0; i2 < 10; i2++) {
replaceAll = replaceAll.replaceAll(new String[]{a, a2, a3, a4, a5, a6, a7, a8, a9, a10}, new String[]{a11, a12, a13, a14, a15, a16, a17, a18, a19, a20}).toString();
}
System.out.println(new StringBuffer(replaceAll).reverse().toString());
return new StringBuffer(replaceAll).reverse().toString().substring(0, 5);
}
public static String base64(byte[] bArr) {
int length = bArr.length;
for (int i = 0; i < length; i++) {
bArr = (byte) (bArr ^ 32);
}
try {
System.out.println("base64:" + new String(Base64.decode(bArr)));
return new String(Base64.decode(bArr));
} catch (Base64DecodingException e) {
e.printStackTrace();
}
return null;
}
private static final String hex(String str) {
System.out.println("hex:" + str);
char[] cArr = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
try {
byte[] bytes = str.getBytes();
MessageDigest instance = MessageDigest.getInstance(base64(new byte[]{(byte) 116, (byte) 117, (byte) 113, (byte) 17, (byte) 42}));
instance.update(bytes);
char[] cArr2 = new char;
int i = 0;
for (byte b : instance.digest()) {
int i2 = i + 1;
cArr2 = cArr[(b >>> 4) & 15];
i = i2 + 1;
cArr2 = cArr;
}
return new String(cArr2);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
``` ```
public class Message {
public static final byte BOOL_FALSE = (byte) 0;
public static final byte BOOL_TRUE = (byte) 1;
public static final byte CMD_CS_ALLOCATE_PAGE = (byte) 10;
public static final byte CMD_CS_ALTER = (byte) 21;
public static final byte CMD_CS_APP_LIST = (byte) 35;
public static final byte CMD_CS_CLEAR_LOCK_LIST = (byte) 24;
public static final byte CMD_CS_CLEAR_SEARCH = (byte) 22;
public static final byte CMD_CS_CONFIG = (byte) 32;
public static final byte CMD_CS_COPY_MEMORY = (byte) 40;
public static final byte CMD_CS_DISABLE_PROTECTION = (byte) 27;
public static final byte CMD_CS_DUMP = (byte) 39;
public static final byte CMD_CS_FREEZE = (byte) 18;
public static final byte CMD_CS_GET_MEMORY = (byte) 37;
public static final byte CMD_CS_GET_MEMORY_CONTENT = (byte) 28;
public static final byte CMD_CS_GET_MEMORY_ITEMS = (byte) 14;
public static final byte CMD_CS_GET_RESULT_LIST = (byte) 17;
public static final byte CMD_CS_KEEP_ALIVE = (byte) 25;
public static final byte CMD_CS_LOAD_RESULTS = (byte) 11;
public static final byte CMD_CS_MEM = (byte) 36;
public static final byte CMD_CS_PAUSE_PROCESS = (byte) 31;
public static final byte CMD_CS_PROCESS_LIST = (byte) 34;
public static final byte CMD_CS_REGION_LIST = (byte) 38;
public static final byte CMD_CS_REMOVE_RESULT = (byte) 30;
public static final byte CMD_CS_RESET_SEARCH = (byte) 20;
public static final byte CMD_CS_SEARCH_GROUP = (byte) 33;
public static final byte CMD_CS_SEARCH_MASK = (byte) 41;
public static final byte CMD_CS_SEARCH_NUMBER = (byte) 16;
public static final byte CMD_CS_SEARCH_TEXT = (byte) 12;
public static final byte CMD_CS_SELECT_PROCESS = (byte) 15;
public static final byte CMD_CS_SET_TEMP_PATH = (byte) 26;
public static final byte CMD_CS_SH = (byte) 13;
public static final byte CMD_CS_STOP_SERVICE = (byte) 23;
public static final byte CMD_CS_TAKE_SCREENSHOT = (byte) 29;
public static final byte CMD_CS_UNFREEZE = (byte) 19;
public static final byte CMD_SC_ALLOCATED_PAGE = (byte) 58;
public static final byte CMD_SC_APP_LIST = (byte) 52;
public static final byte CMD_SC_GET_MEMORY = (byte) 54;
public static final byte CMD_SC_MEM = (byte) 53;
public static final byte CMD_SC_MEMORY_ITEM = (byte) 47;
public static final byte CMD_SC_MEMORY_ITEMS = (byte) 49;
public static final byte CMD_SC_PROCESS_LIST = (byte) 51;
public static final byte CMD_SC_PROGRESS_STATE = (byte) 48;
public static final byte CMD_SC_REGION_LIST = (byte) 56;
public static final byte CMD_SC_REPORT_ERROR = (byte) 46;
public static final byte CMD_SC_RESULTS = (byte) 43;
public static final byte CMD_SC_REVERT = (byte) 50;
public static final byte CMD_SC_SEARCH_DONE = (byte) 44;
public static final byte CMD_SC_SEND_CODE = (byte) 55;
public static final byte CMD_SC_SH_USAGE = (byte) 57;
public static final byte CMD_SC_TARGET_DEAD = (byte) 45;
public static final int CODE_BAD_KERNEL = 20;
public static final int CODE_CANCEL_DONE = 7;
public static final int CODE_COPY_ENDED = 5;
public static final int CODE_COPY_FAILED = 6;
public static final int CODE_DUMP_ENDED = 3;
public static final int CODE_DUMP_FAILED = 4;
public static final int CODE_DUMP_STARTED = 2;
public static final int CODE_MEM_DEV_CHECK_END = 1;
public static final int CODE_MEM_DEV_CHECK_START = 0;
public static final int CODE_NEED_PTRACE = 21;
public static final int CODE_PATCH_ENDED = 13;
public static final int CODE_PATCH_FAILED = 14;
public static final int CODE_PATCH_STARTED = 12;
public static final int CODE_PAUSED = 8;
public static final int CODE_RESUMED = 9;
public static final int CODE_SH_END = 18;
public static final int CODE_SPEEDHACK_LOADED = 11;
public static final int CODE_SPEEDHACK_LOADING = 10;
public static final int CODE_UNRANDOMIZER_LOADED = 16;
public static final int CODE_UNRANDOMIZER_LOADING = 15;
public static final int CODE_USED = 19;
public static final int CODE_WAITPID_FAILED = 17;
public static final int CONFIG_CALLS_ALTERNATIVE = 2048;
public static final int CONFIG_DEEP_READ = 65536;
public static final int CONFIG_HIDE_FROM_GAME_1 = 128;
public static final int CONFIG_HIDE_FROM_GAME_2 = 256;
public static final int CONFIG_HIDE_FROM_GAME_3 = 512;
public static final int CONFIG_HIDE_FROM_GAME_4 = 32768;
public static final int CONFIG_MEMORY_EXPERIMENTAL = 16;
public static final int CONFIG_MEMORY_EXTENDED = 8;
public static final int CONFIG_PREVENT_UNLOAD_HARD = 64;
public static final int CONFIG_PREVENT_UNLOAD_SOFT = 32;
public static final int CONFIG_PTRACE_BYPASS_FREEZE = 16384;
public static final int CONFIG_PTRACE_BYPASS_NOTHING = 8192;
public static final int CONFIG_PTRACE_BYPASS_OFF = 131072;
public static final int CONFIG_RESET_ON_EXIT = 2;
public static final int CONFIG_SELINUX = 4;
public static final int CONFIG_SKIP_EMPTY_MEMORY = 1;
public static final int CONFIG_SKIP_ZYGOTE_MEMORY = 1024;
public static final int CONFIG_WAITPID_ALTERNATIVE = 4096;
public static final int DONE_CLEAR = 2;
public static final int DONE_REMOVE = 1;
public static final int DONE_RESET = 3;
public static final int DONE_SEARCH = 0;
public static final int ERROR_BUG = 2;
public static final int ERROR_DISK_FULL = 3;
public static final int ERROR_EPERM_ON_ATTACH = 105;
public static final int ERROR_EPERM_ON_ATTACH_DEFEND = 106;
public static final int ERROR_FATAL = 100;
public static final int ERROR_GROUP_FAIL = 108;
public static final int ERROR_IO = 4;
public static final int ERROR_MAPS_ALL = 10;
public static final int ERROR_MAPS_ONE = 9;
public static final int ERROR_OUT_OF_MEM = 1;
public static final int ERROR_SPEEDHACK_FAIL = 107;
public static final int FILTER_ADDRESS_GREATER = 1;
public static final int FILTER_ADDRESS_LESS = 2;
public static final int FILTER_FRACTIONAL = 32;
public static final int FILTER_POINTER = 64;
public static final int FILTER_TYPE = 16;
public static final int FILTER_VALUE_GREATER = 4;
public static final int FILTER_VALUE_LESS = 8;
public static final int POINTER_EXECUTABLE = 2;
public static final int POINTER_EXECUTABLE_WRITABLE = 1;
public static final int POINTER_READABLE = 8;
public static final int POINTER_UNKNOWN = 4;
public static final int POINTER_WRITABLE = 16;
public static final byte PROCESS_KILL = (byte) 2;
public static final byte PROCESS_PAUSE = (byte) 0;
public static final byte PROCESS_RESUME = (byte) 1;
public static final int RAND_COUNT = 12;
public static final int RD_DOUBLE = 4;
public static final int RD_QWORD = 2;
public static final int SH_CONFIG = 32;
public static final int SH_RD = 1;
public static final int SH_SET = 16;
public static final int SH_USAGE = 8;
public static final int TIMERS_COUNT = 44;
public static final int TIMERS_TYPES = 4;
}
```
反正我是没看懂怎么解锁,希望那些缺德的写锁机程序敲诈的人早日见马克思。 骗子是真的缺德 腻害腻害 这个 是真厉害了 最后也没有说要如何解锁啊 你就说你是怎么惹上这个的吧? 楼主乃大神,佩服至极 crhst 发表于 2019-5-5 21:15
你就说你是怎么惹上这个的吧?
1楼第一个链接 干嘛要解密呢 ,连上电脑, 把app删了不就好了