吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 43650|回复: 98
收起左侧

[移动样本分析] Root锁机破解教程,新手也能学会破解加密算法的锁机

  [复制链接]
孤云 发表于 2018-7-7 15:11
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 孤云 于 2018-7-7 16:00 编辑

经过上一次分析失败的我又回来了,由于我不是专业搞逆向的,就不解说那么详细了。
先说下这次的主要思路:主要就是把锁机的dex提取出来转成jar包,然后直接调用里面的方法就能算出密码了。
下面开始教程:
首先把锁机提取出来(怎么提取就不说了,上一篇有教程),接着拖进Android Killer,找入口
入口.png
跟进去看看,
1.png
申明了几个全局变量,让后在下面进行赋值
4.png
这里就是一系列运算然后加密,就是解锁密码了
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
int i = (int)(Math.random() * 1000000) + 4;//生成一个6位的随机数然后+4
  int j = (int)(Math.random() * 1000000) + 5;//生成一个6位的随机数然后+5
  int k = (int)(Math.random() * 1000000) + 6;//生成一个6位的随机数然后+6
  this.a6 = mx6.Jem(mx6.Jem(mx6.Jem("СвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПжСвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПж")));//调用mx6里的Jem方法解密
  this.a7 = mx6.Jem(mx6.Jem(mx6.Jem("СвОгСвПдСвкбСвПзСвОгСвПдСвкбСгкгСвОгСвПдСвкбСвПзСвОгСвПдСвкбСгкг")));
  this.a8 = mx6.Jem(mx6.Jem(mx6.Jem("СвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПз")));
  int m = 41779 + 46148 + 50517 - 59255 + 161 >> 2;//申明一个int类型的变量,然后经过一系列的运算后赋值给m
  int n = 41779 + 54886 + 46148 + 50517 + 178 >> 2;
  int i4 = 41779 + 46148 + 50517 + 195 >> 2;
  int i1 = 41779 + 46148 + 50517 + 212 >> 2;
  int i2 = 41779 + 46148 + 50517 + 229 >> 2;
  int i3 = (m - 6 - 4 - 5 - 4 + i4 + i1 + i2) * 2 * 3 * 4 * 5 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11;
  i4 = n + i1 - 6 + 4 + m + i4 + i2 ^ 0x0;
  int i5 = 4928 + i3 + i4 >> 9;
  long l1 = i3 + 46148 + 54886 + i2 + m + (i3 + i5 + i4 >> 2 ^ 0x9) ^ i;
  long l2 = i5 + n + i2 + 59255 + 50517 + 54886 ^ j;
  long l3 = i4 + i5 + i1 + m + 54886 + 59255 + 50517 + 41779 ^ k;
  this.a9 = (this.a6 + l1);  //调用申明的成员属性然后加上l1在赋值给a9
  this.a10 = (this.a7 + l2);
  this.a11 = (this.a8 + l3);


这里就是判断然后进入下一层什么的
这里说明下  this.val$梦想爸爸 = l1 ,this.val$破解者梦想操你妈 = l2 ,this.val$葫芦侠梦想草你妹 = l3,这里掉坑里去了,找半天没看到哪里赋值的,结果Android Killer 反编译的时候那些代码不见了,最后用手机MT管理器看到的...
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
if (this.val$crk.getText().toString().equals(String.valueOf(mx5.梦想66("" + this.val$梦想爸爸)))) //获取输入框的值 ,然后判断mx5.梦想66加密后的this.val$梦想爸爸如果相等就进入下一层
          {
            this.val$h.setText("当前层数:最后一层");//下一层显示的文字
            this.val$hh.setText("解锁30元");
            this.val$xlh.setText(mx3.jm("" + this.val$xlh1));
            this.val$Lt1.setBackgroundColor(-7829368);
            return;
          }
          if (this.val$crk.getText().toString().equals(String.valueOf(mx5.梦想6("" + this.val$破解者梦想操你妈))))
          {
            this.val$h.setText("最后一层,信不信由你");
            this.val$hh.setText("解锁50元");
            this.val$hhhh.setText("解开这一层手机就可以使用了");
            this.val$xlh.setText(mx3.jm("" + this.val$xlh2));
            this.val$Lt1.setBackgroundColor(-16776961);
            return;
          }
        } while (!this.val$crk.getText().toString().equals(String.valueOf(mx5.梦想6666("" + this.val$葫芦侠梦想草你妹))));


这是加密类,复制进eclipse报错,还要修复。这里就是采取的另一个方式了,把apk后缀改为zip然后解压,找到classes.dex然后用dex2jar把dex转换成jar文件。
加密.png jar.png
dex2jar 链接:https://pan.baidu.com/s/1guW34V6yVHxHzInZyIYt6Q 密码:g7mv

接下来就好办了,把那些运算代码复制粘贴到eclipse里,在导入上面转的jar包,改一下代码运行就能算出密码了(代码写的查凑合着看吧)。
下面附上代码
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class Test{
          private String a10;
          private String a11;
          private String a6;
          private String a7;
          private String a8;
          private String a9;
         
        public static void main(String[] args) {
        String b  [] = {"&","①","÷","∷","●","©","®","★","※","/"};//这个没啥用我就是拿来复制的
                Test t = new Test();
                String str = "①★/&①®";//这里是我测试的解密
                t.getPassword(str);
        }
         
        /**
         * 获取密码
         * @param str
         * @return
         */
        public void getPassword(String str){
            int i = Integer.valueOf(set(str));//第一层,把随机数改为序列号
            int j = Integer.valueOf(set(str));//第二层
            int k = Integer.valueOf(set(str));//第三层
            this.a6 = mx6.Jem(mx6.Jem(mx6.Jem("СвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПжСвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПж")));//11
            this.a7 = mx6.Jem(mx6.Jem(mx6.Jem("СвОгСвПдСвкбСвПзСвОгСвПдСвкбСгкгСвОгСвПдСвкбСвПзСвОгСвПдСвкбСгкг")));//22
            this.a8 = mx6.Jem(mx6.Jem(mx6.Jem("СвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПз")));//33
            int m = 41779 + 46148 + 50517 - 59255 + 161 >> 2;
            int n = 41779 + 54886 + 46148 + 50517 + 178 >> 2;
            int i4 = 41779 + 46148 + 50517 + 195 >> 2;
            int i1 = 41779 + 46148 + 50517 + 212 >> 2;
            int i2 = 41779 + 46148 + 50517 + 229 >> 2;
            int i3 = (m - 6 - 4 - 5 - 4 + i4 + i1 + i2) * 2 * 3 * 4 * 5 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11;
            i4 = n + i1 - 6 + 4 + m + i4 + i2 ^ 0x0;
            int i5 = 4928 + i3 + i4 >> 9;
            long l1 = i3 + 46148 + 54886 + i2 + m + (i3 + i5 + i4 >> 2 ^ 0x9) ^ i;
            long l2 = i5 + n + i2 + 59255 + 50517 + 54886 ^ j;
            long l3 = i4 + i5 + i1 + m + 54886 + 59255 + 50517 + 41779 ^ k;
            this.a9 = (this.a6 + l1);
            this.a10 = (this.a7 + l2);
            this.a11 = (this.a8 + l3);
            String s = String.valueOf(mx5.梦想66("" + l1));//调用的jar包的方法
            System.out.println("第一层密码:" + s);
            String s2 = String.valueOf(mx5.梦想6("" + l2));
            System.out.println("第二层密码:" + s2);
            String s3 = String.valueOf(mx5.梦想6666("" + l3));
            System.out.println("第三层密码:" + s3);
        }
         
        /**
         * 序列号替换
         * @param s
         * @return
         */
        public static String set(String s)
    {
        String[] a=           {"0","1","2","3","4","5","6","7","8","9"};
        String b  [] = {"&","①","÷","∷","●","©","®","★","※","/"};
                String sss=s;
        for(int i=0;i<10;i++)
        {
            sss=sss.replaceAll(b[i],a[i]).toString();
        }
        StringBuffer sb=new StringBuffer(sss);
        String ss=sb.toString();
        return new String(ss);
    }       
         
}

解说的有点不清晰,有什么不懂的地方可以问我,哪里说得不对也可以指出。
下面是我的测试截图,这样就解开了。
第一层.png 第三层.png 第二层.png

免费评分

参与人数 28威望 +1 吾爱币 +39 热心值 +27 收起 理由
yongjie180 + 1 + 1 热心回复!
siuhoapdou + 1 + 1 谢谢@Thanks!
圣诞科技 + 1 谢谢@Thanks!
Sibe + 1 + 1 谢谢@Thanks!
橘生淮北,为枳 + 1 + 1 热心回复!
acdseev + 1 + 1 热心回复!
Hmily + 1 + 10 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
临时嘉宾 + 1 + 1 用心讨论,共获提升!
冰涔 + 1 + 1 热心回复!
13129761422 + 1 + 1 我很赞同!
yer + 1 + 1 谢谢@Thanks!
两只奥特曼 + 1 + 1 谢谢@Thanks!
liphily + 3 + 1 死逼骗子,坑钱还三重咒,这种人咋就死不绝
下弦乀月 + 1 + 1 谢谢@Thanks!
awzs7758520 + 1 + 1 我很赞同!
kuigh + 1 + 1 谢谢@Thanks!
敬哥哥 + 1 + 1 大佬。我下次遇到锁机问题可以 直接找你吗?
52pojie_user_08 + 1 + 1 厉害了,感谢发布原创作品,吾爱破解论坛因你更精彩!
哈哈呵呵哒哒 + 1 + 1 我很赞同!
Trirabbits + 1 + 1 谢谢@Thanks!
独行风云 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
zhh4827 + 1 + 1 热心回复!
轻描淡写9714 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
二逼159 + 1 + 1 广告贴,请遵守论坛版规!
Believe832 + 1 + 1 用心讨论,共获提升!
随风而逝aY + 1 + 1 热心回复!
我下了 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
半瓶神仙醋 + 1 + 1 期待

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

轻描淡写9714 发表于 2018-7-8 08:23
孤云 发表于 2018-7-7 20:02
说一下哪里不明白,我在仔细解释下

[Java] 纯文本查看 复制代码
1
2
3
this.a6 = mx6.Jem(mx6.Jem(mx6.Jem("СвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПжСвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПж")));//11
           this.a7 = mx6.Jem(mx6.Jem(mx6.Jem("СвОгСвПдСвкбСвПзСвОгСвПдСвкбСгкгСвОгСвПдСвкбСвПзСвОгСвПдСвкбСгкг")));//22
           this.a8 = mx6.Jem(mx6.Jem(mx6.Jem("СвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПзСвОгСвПдСвкбСвПз")));//33

就这三行代码,不知道是要做什么功能用,没有接触过这种类型,能解释一下么?
debug_cat 发表于 2018-8-16 10:31
牛逼啊,这样分析很到位,如果作者把加解密的东西放so里面用native来做,估计难度就很高,不过这个能破解已经很厉害了。牛逼,楼主有没有兴趣破解另一个锁机软件啊。我昨天手机版被锁,但我用adb shell su进入把apk删除了,成功解锁,但是我想通过破解他加密算法来破解,就像本文一样,但是目前破解过程遇到困难,好无头绪了。链接: https://pan.baidu.com/s/1qIDQkmiP5ezQjZOZhBTUlQ 密码: wj77;如果有进展记得发帖分享哦;千万别用真机,无root也能锁住
 楼主| 孤云 发表于 2018-7-7 15:23
MYLQG2ZHX 发表于 2018-7-7 15:36
不明觉厉
Ocean老班长 发表于 2018-7-7 15:46
我们这些小白看不懂哇   暴力解锁吗?
eilljs 发表于 2018-7-7 15:49
一直不懂锁别人手机的是什么想法

免费评分

参与人数 1热心值 +1 收起 理由
liphily + 1 敲诈勒索点钱,失败了也没损失

查看全部评分

 楼主| 孤云 发表于 2018-7-7 15:52
Ocean老班长 发表于 2018-7-7 15:46
我们这些小白看不懂哇   暴力解锁吗?

很简单的,会Java基础都能学会破解
天道法海 发表于 2018-7-7 16:07
- -大佬下次能不能出个教程啊?这图文。。。。没看明白。。。。。
kumwingchiu 发表于 2018-7-7 16:46
先学习一下吧!应该学不会
emin199 发表于 2018-7-7 16:48
没看明白!!!
湫兮如风丶 发表于 2018-7-7 16:51
2333葫芦侠的锁机软件吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-3-27 12:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表