Root锁机破解教程,新手也能学会破解加密算法的锁机
本帖最后由 孤云 于 2018-7-7 16:00 编辑经过上一次分析失败的我又回来了,由于我不是专业搞逆向的,就不解说那么详细了。
先说下这次的主要思路:主要就是把锁机的dex提取出来转成jar包,然后直接调用里面的方法就能算出密码了。
下面开始教程:
首先把锁机提取出来(怎么提取就不说了,上一篇有教程),接着拖进Android Killer,找入口
跟进去看看,
申明了几个全局变量,让后在下面进行赋值
这里就是一系列运算然后加密,就是解锁密码了
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管理器看到的...
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文件。
dex2jar 链接:https://pan.baidu.com/s/1guW34V6yVHxHzInZyIYt6Q 密码:g7mv
接下来就好办了,把那些运算代码复制粘贴到eclipse里,在导入上面转的jar包,改一下代码运行就能算出密码了(代码写的查凑合着看吧)。
下面附上代码
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,a).toString();
}
StringBuffer sb=new StringBuffer(sss);
String ss=sb.toString();
return new String(ss);
}
}
解说的有点不清晰,有什么不懂的地方可以问我,哪里说得不对也可以指出。
下面是我的测试截图,这样就解开了。
孤云 发表于 2018-7-7 20:02
说一下哪里不明白,我在仔细解释下
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
就这三行代码,不知道是要做什么功能用,没有接触过这种类型,能解释一下么? 牛逼啊,这样分析很到位,如果作者把加解密的东西放so里面用native来做,估计难度就很高,不过这个能破解已经很厉害了。牛逼,楼主有没有兴趣破解另一个锁机软件啊。我昨天手机版被锁,但我用adb shell su进入把apk删除了,成功解锁,但是我想通过破解他加密算法来破解,就像本文一样,但是目前破解过程遇到困难,好无头绪了。链接: https://pan.baidu.com/s/1qIDQkmiP5ezQjZOZhBTUlQ 密码: wj77;如果有进展记得发帖分享哦;千万别用真机,无root也能锁住 正在继续编辑,稍等 不明觉厉 我们这些小白看不懂哇 暴力解锁吗? 一直不懂锁别人手机的是什么想法 Ocean老班长 发表于 2018-7-7 15:46
我们这些小白看不懂哇 暴力解锁吗?
很简单的,会Java基础都能学会破解 - -大佬下次能不能出个教程啊?这图文。。。。没看明白。。。。。 先学习一下吧!应该学不会 没看明白!!! 2333葫芦侠的锁机软件吗