Xposed开发实践(破解匆匆下载器VIP限制)
本帖最后由 l123456789jy 于 2018-8-14 13:18 编辑一直没有找到合适的种子下载器,偶尔看到一个`匆匆下载器`,试了下解析成功率相当高,但是是要付费的,我这种穷逼,拿来的钱,所以就打算逆向下,看看
#### 第一步分析
- 打开APKTool,分析改APK,结果发现居然加密,是用梆梆加密的
- 关于如何破解梆梆加密请看我这篇文章(https://www.jianshu.com/p/955c0b1507c7 "App“梆梆加固”破解")
#### 第二部开始分析,关键代码
- 我们把源码dum出来之后,使用 dexjar,打开
![](http://ww1.sinaimg.cn/large/9f723435ly1fu27ud1a7tj20vh0j840s.jpg)
- 源码全部看到啦
- 我们通过`ACTIVITY TOP`获取播放界面的完整类名,和路径
![](http://ww1.sinaimg.cn/large/9f723435ly1fu27x8od2oj20x70inneh.jpg)
这里我么就看到了,他的包名,和当前Activity的完整路径,接下在我们就去找`AdvancedPlayActivity`这个类
- 然后我们根据他的提示语去搜索,找到关键代码
这个是游客登录的限制逻辑
![](http://ww1.sinaimg.cn/large/9f723435ly1fu27zkde0pj20ur0g3mxe.jpg)
这个是vip逻辑的限制
![](http://ww1.sinaimg.cn/large/9f723435ly1fu280imohdj20uu08874d.jpg)
- 有了关键代买,我们就好办了,我们分析,他这个逻辑都是在一个叫做,`startPositionTimer` 方法里面被调用,我们只需要hook住这个方法,替换这个方法,替换成一个空实现不就ok了
```java
public class Man implements IXposedHookLoadPackage {
private static final String FILTER_PKGNAME = "com.congcong.dl.application";
private static final String BAI_DU_PKGNAME = "com.congcong.dl.application.widget.BDCloudVideoView";
private static final String AD_PKGNAME = "com.congcong.dl.application.cc.bar.AdvancedMediaController";
private static final String LOG_PKGNAME = "android.util.Log";
@Override
public void handleLoadPackage(final LoadPackageParam loadPackageParam) throws Throwable {
Log.e("handleLoadPackage", loadPackageParam.packageName);
if (FILTER_PKGNAME.equals(loadPackageParam.packageName)) {
//这里是为了解决app多dex进行hook的问题,Xposed默认是hook主dex
XposedHelpers
.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
Log.e("handleLoadPackage", "afterHookedMethod");
final ClassLoader cl = ((Context) param.args).getClassLoader();
XposedHelpers.findAndHookMethod("com.congcong.dl.application.cc.AdvancedPlayActivity", cl, "onCreate", Bundle.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
Log.e("handleLoadPackage", "onCreate");
//获取当前hook的activity
final Activity thisObject = (Activity) param.thisObject;
Uri data = thisObject.getIntent().getData();
Log.e("handleLoadPackage",data.toString());
final Class<?> aClass = cl.loadClass(AD_PKGNAME);
//hook AdvancedMediaController 中 startPositionTimer方法并且替换为空实现
XposedHelpers.findAndHookMethod(aClass, "startPositionTimer",
new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam methodHookParam)
throws Throwable {
Toast.makeText(thisObject,"hook,成功!",Toast.LENGTH_SHORT).show();
Log.e("handleLoadPackage", "replaceHookedMethod");
return null;
}
});
}
});
}
});
}
}
}
```
应广大群众要求,想要使用下载功能,看了下,就把这功能实现了,思路很简单,就是hook他的vip,属性就可以了,然后替换他的登陆方法,放出源码
//================================================
final Class<?> aClass = cl.loadClass("com.congcong.dl.application.cc.ShowListActivityQ");
XposedHelpers.findAndHookMethod(aClass, "getlogin",
new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam methodHookParam)
throws Throwable {
Toast.makeText(((Activity) methodHookParam.thisObject),"hook,成功!",Toast.LENGTH_SHORT).show();
//通过查看源码发现他标记用户的vip标识是vip=1是0不是,所以动态修改他的属性就行了
XposedHelpers.setObjectField(methodHookParam.thisObject,"vip","1");
Log.e("handleLoadPackage", "replaceHookedMethod");
return null;
}
});
}
这样就可以无限制的看了,代码已经上传github[地址](https://github.com/l123456789jy/GradleTask "地址"),在xposted 里面搜索匆匆就可以使用该插件了,插件2.0已经可以使用下载功能了.(匆匆已经改名,估计作者也逛论坛,毕竟人家还要盈利的,思路给了,后续自己破解吧!) 解释的不错啊,很赞! 本帖最后由 zrssz 于 2018-8-10 06:49 编辑
https://wap.shouji.com.cn/down/34579.html
这个可以下载种子可以下载磁力
https://wap.shouji.com.cn/down/31847.html
这个可以下载网页视频.我用的是4.0版本.可以嗅探网页视频.浏览器一般不能用安卓webview要用谷歌webview才能嗅探[夸克浏览器可以.谷歌浏览器我还是旧版可以新版就不知道了].如果你是安卓5.0及以上这软件刚装上去好像没反应.你要激活放一两个月好像就有作用了
这个是下载重定向:我用1.15版本无界面可以接管系统下载器.软件高版本好像不起作用5.0及以上版本.新版谷歌浏览器没办法接管.旧版还可以
https://wap.shouji.com.cn/down/34579.html
后两个是xposed模块. 那么打包好的apk文件呢?:lol:lol:lol {:1_921:}高手无处不在! 你这写得不适合小白呢
感谢分享 ,值得学习 简介明了很OK 支持原创,感谢楼主 简介明了,原理差不多 了。 感谢楼主分享,已学会 感谢楼主,学会了