lemniscate 发表于 2019-5-5 20:57

锁机软件破解

样本来源: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;
}
```

                                                                                                                                                                                                            

wpj 发表于 2019-5-5 21:32

反正我是没看懂怎么解锁,希望那些缺德的写锁机程序敲诈的人早日见马克思。

老郭浪了 发表于 2020-3-23 09:02

骗子是真的缺德

筱闲 发表于 2019-5-5 21:09

GMCN 发表于 2019-5-5 21:09

腻害腻害

quaternion 发表于 2019-5-5 21:10

这个 是真厉害了

lizhipei78 发表于 2019-5-5 21:12

最后也没有说要如何解锁啊

crhst 发表于 2019-5-5 21:15

你就说你是怎么惹上这个的吧?

lkj2711 发表于 2019-5-5 21:19

楼主乃大神,佩服至极

随意点 发表于 2019-5-5 21:20

crhst 发表于 2019-5-5 21:15
你就说你是怎么惹上这个的吧?

1楼第一个链接

吃大米的L 发表于 2019-5-5 21:26

干嘛要解密呢 ,连上电脑, 把app删了不就好了
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 锁机软件破解