先上图: 左边的是没有破解之前,右边是破解之后,把锁全干掉了(vip)。
老规矩先下载工具:MT管理器,Xposed installer,开发者助手,FDex2,mumu模拟器,变声器软件(目标),下载之后安装到模拟器中,记得打开模拟器root。
Xposed installer安装:http://www.95bmf.com/archives/288
mumu模拟器连不上As:https://www.csdn.net/gather_2a/MtTakg1sNzg0NS1ibG9n.html
变声器软件使用了腾讯乐固加壳,那么我们第一步就是先把它脱光:
1.打开Xposed installer,勾选FDex2模块,点击需要脱壳的APP,会弹出一个弹框,
记住这个”dex输出目录“,重启Xposed installer(框架->右上角三个点->重启设备)。
2.重启之后打开变声器软件,然后使用MT管理器找到“dex输出目录”下的.dex后缀的文件(有四个,更大那两个才是有效的dex),导出到mumu共享文件夹(导出到电脑才能做下一步)。
脱光之后我们就要开始看看他们的代码了:
1.使用开发者助手定位页面,看这个voiceChangeActivity
2.使用jadx-gui工具(可以直接打开apk,dex,jar),打开脱壳脱出来的dex文件,找到voiceChangeActivity,哦候,混淆了!意料之中,嘿嘿。一打开就看见一个数组,中文,这不就是我们要找的标题吗!!!
全文搜索"f7139a",look:一个adapter;很明显f7139a数组“原生音效”,“混音音效”对应的就是this.f7140b和b2了,接下来我们就要去聚焦到this.f7140b和b2了
我们先看看this.f7140b = c.b()赋值,那么我们往上看一下import com.xinmang.voicechanger.fragment.c;然后去目录里面找这个类,没有!!!那是因为在例外一个dex中,跟踪到com.xinmang.voicechanger.fragment.c打开:
看见了没,加锁的都是用this.e.booleanValue()控制,没有加锁的都是false,到这里是不是有思路了。把this.e.booleanValue()都改成false不就行了。
我们继续往下看,this.e是一个boolean变量,初始值为false;这不是正是我们想要的吗!但是结果是都加了锁,说明什么?说明在其他地方改了呀!继续:这时onResume()这个方法引起了我的注意!
这里给this.e赋值了两次,我想想,只要让这里赋值的结果this.e都为false即可,那就是要让h()返回false,然后不进入下面这个if判断就可以了,对对对,就是这样。所以接下来我们就要去分析h()和g.a("user_info").b("isLogin",false)了;一看,哎哟!不得了都是返回boolean值,那就容易了啊!直接hook h()和g.a("user_info").b("isLogin",false)让h()返回false,g.a("user_info").b("isLogin",false)返回true
那么直接上代码:
findAndHookMethod("com.xinmang.voicechanger.fragment.c", param.classLoader, "h", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam s) throws Throwable {
super.beforeHookedMethod(s);
XposedBridge.log("开始劫持了~");
}
@Override
protected void afterHookedMethod(MethodHookParam s) throws Throwable {
super.afterHookedMethod(s);
XposedBridge.log("劫持前返回的result: " + s.getResult());
s.setResult(false);// 绕过登录
XposedBridge.log("劫持后返回的result: " + s.getResult());
XposedBridge.log("hook finish");
}
});
findAndHookMethod("com.blankj.utilcode.util.g", param.classLoader, "b",String.class,boolean.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam s) throws Throwable {
super.beforeHookedMethod(s);
XposedBridge.log("开始劫持了~");
}
@Override
protected void afterHookedMethod(MethodHookParam s) throws Throwable {
super.afterHookedMethod(s);
XposedBridge.log("劫持前返回的result: " + s.getResult());
s.setResult(true);// 绕过登录
XposedBridge.log("劫持后返回的result: " + s.getResult());
XposedBridge.log("hook finish");
}
});
安装到mumu之后添加到Xposed installer模块中,老规矩重启设备, 然后打开变声器软件,锁没了!giao,giao,giao
免责声明:本文只为探讨技术,使用本文内容从事任何非法活动,产生的后果都与本人无关。