以下效果是破解趣看天下app的接口实现在自己app上面自动阅读的
其的文章都是用h5的,说白了就是原生和h5的交互的,好了,既然是h5的就好办了。
原本打算将项目分享出来的,但是项目里面包含破解出来的一些加密方式,如果放出来总感觉不太好,所以还是不分享源码只分享大致的原理算了,当然,你也可以自己反编译破解去拿加密算法的。
好了,现在开始说写这个项目的流程了。
按照惯例最开始还是先抓包看一下应用的数据,我抓包的工具是Charles,这个挺好用的,经过抓包分析,应用的数据包结构并不复杂,关键的字段是sign,这个字段很明显就是一个用来检验数据,用MD5的加密,不过其参数有一系列之多,具体是啥就不讲了,再讲就过分了。具体过程怎样的这里就忽略了,反正最后重要的只有两个参数token和sign …
获取到相应的参数和接口现在开始项目了。
webView.addJavascriptInterface(new QKjsObjext(), “local”);
public class QKJsObject extends BaseJsObject {
private OnWebHtmlListener listener;
@JavascriptInterface
public void getContent(String html) {
}
用于与h5的交互,这里的话主要是获取h5的页面内容,下面是在页面加载完onPageFinished的方法里面执行的
webView.loadUrl(“javascript:window.local.getContent(document.getElementsByClassName(“content”)[0].innerHTML);”);
那个h5页面其实加载完的时候并没有完全显示文章的内容,需要点击一个按钮查看全文才显示全部内容的,其实这个好处理,分析其的网页代码发现,那个查看全文的按钮的class是spread
于是就是实现一个自动点击就行了
webView.loadUrl(“javascript:var aa = document.querySelectorAll(”.spread");aa[0].click();");
上面是一个完整的页面显示,下面开始写自动滑动的,其实这个也很简单,主要是采用命令的方式实现滚动
ShellCmdUtils.execShellCmd(“input swipe 600 600 100 100”);
这里写一个定时执行命令就能实现自动滑动了,大体下面那样,下面是删减了一些逻辑代码的
TimeThread countDown = new TimeThread(handler);
handler.post(countDown);
/**
* 执行滚动
*/
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
ShellCmdUtils.execShellCmd(“input swipe 600 600 100 100”);
count++;
}
};
/**
* 定时器
*/
private class TimeThread implements Runnable {
private Handler mHandler;
public TimeThread(final Handler mHandler) {
this.mHandler = mHandler;
}
@Override
public void run() {
mHandler.postDelayed(countDown, 4000);
}
}
由于阅读情况以及是否有金币这些都是h5自己请求获取结果的,尴尬,本想获取h5的请求结果的,但是不知道怎么获取,后来百度了一番还没有找到方法,于是我就换了一种玩法就是拦截h5的ajax请求,不让其请求出去,拿其的参数用我们自己的网络框架进行请求。拦截的方法是shouldInterceptRequest
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
if (listener.shouldInterceptRequest(view, request)) {
return new WebResourceResponse(null, null, null);
}
return super.shouldInterceptRequest(view, request);
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
if (listener.shouldInterceptStringRequest(view, url)) {
return new WebResourceResponse(null, null, null);
}
return super.shouldInterceptRequest(view, url);
结束语
通过adb基本可以实现刷金币的功能。如果你家里有几个旧手机,可以拿来刷两刷,看看能不能挣钱。欢迎关注下方的公众号完整!