怎么说呢,破解这块已经做得差不多了,但是在请求的时候出问题了,请求不到数据。另外我们通过其他途径已经采集了三千多万的文书数据,有需要的可联系。
曾经的时候要采集裁判文书网上的数据,于是查看APP,当然是需要下载APK的,先说明一下之前的破解思路,在获取到APK之后,嗯,还是写一篇非常详细的技术说明吧。(我用的是Mac环境)
准备工作,工具下载配置
反编译会使用到的工具有apktool、dex2jar、jd-gui
1、apktool的配置
1、下载apktool 链接:https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/osx/apktool 直接将这个文件保存为apktool apktool
2、apktool.jar 的下载 链接:https://bitbucket.org/iBotPeaches/apktool/downloads/ 直接下载最新版的就可以 apktool.jar
3、将两个文件复制到/usr/local/bin 里面,并修改权限可执行,chmod + x 可以直接chmod 777 当然简单的方式就是新建一个文件夹,将所有的apk 以及工具等都放在这里面就可以了。
4、终端直接运行apktool
2、dex2jar 配置
下载链接:https://sourceforge.net/projects/dex2jar/ 直接下载就可以,同时将目录里面的chmod 777 *.sh 增加可执行权限dex2jar-2.0.zip
3、JD-GUI 配置
下载链接:http://jd.benow.ca/
这个时候我们的准备环境就好了,当然你还需要从官网将APK下载下来,建议将apk和上面的三个工具都放在一个文件夹中,这样反编译后的文件都在一个目录里面了,易于管理。
1、反编译AndroidManifest和资源文件
$ apktool d ***.apk 执行这个命令之后,就得到了一些目录,自己查看一下就可以。这个apk就是裁判文书的apk
2、反编译java代码
使用dex2jar工具可以反编译apk的java代码,在这里直接一步到位
sh dex2jar-2.0/d2j-dex2jar.sh ***.apk 注意sh文件是有可执行权限的。这样我们就得到了一个jar包,接下来就是通过这个jar包来查看一些东西。 上述所有的东西可以参考:https://www.jianshu.com/p/b3bb4da64dc7
开始查看裁判文书APP的jar
在这里就直奔主题了。首先的是token的生成,在这里先说明一下老的版本是客户端生成的,所以会去找它的生成方式,我们知道java中重要的编码方式有两种一种是MD5,一种是Base64 所以,先直接搜索一下MD5吧
上面的这个token生成方式已经不能用了,所以就不要再尝试了,现在已经是通过请求获取的token了。
之后通过Charles 发现客户端返回的数据是加密的数据,像这种一长串的字符串一般就是Base64加密后的东西了。所以在这里再次搜索Base64
现在已经定位到了这块,那么就得找到是谁调用了这个方法,这个时候通用的做法,就是直接搜索包名,看看有没有。最笨的方式就是找相关的类,看看有没有这个方法。可以直接弄到eclipse里面直接搜索。这里直接上图了。
这个文件夹,通过apktool获取的目录里面的lib就是这个,里面有各种架构格式的so文件。现在呢有两条路可以选,要么破解so文件,要么不破解
尝试破解so文件,使用IDA-PRO工具来进行破解,可以网上搜,或者支持一下呗:链接:https://pan.baidu.com/s/1zzmUISryZkE-HEUQXSoFkw 密码:76pr
里面的三个方法,就在这里面了,可惜啊可惜,哥们我汇编不太会啊。实在是看不懂搞不定,只能另辟蹊径了。
我们知道lib里面的so文件是在安卓里面调用的,那我们建立一个安卓工程来验证一下不就可以了。
接下来就是安装android的环境,mac版本下载的是 android stuido 工具。所有的东西设定好了之后,如果是新建工程有可能会出错,记得在开始新建的时候:
2、运行的时候 报 constraint-layout 不能 resolve之类的,查看tools sdk manager 中
好了,现在新建一个我们自己的android工程吧,这里要做的就是 增加个按钮,点击它,然后执行解码程序,看能不能还原出来原文来。
准备工作,先将Util类以及那20个解码类什么的复制到工程里面去,因为没有用到第三方类库嘛,所以这里调整调整就好了。记住包名必须是一样的,不要改动。
所有的准备都好了,那么测试一下模拟机,点击一下看是不是可以解码呢?
可以看到,通过android的模拟解码,实现了解码操作。那么只要我们能够将这个模拟机封装为一个接口服务就可以了。至于怎么进行封装接口服务,还没有搞明白。不过思路就是:通过 https://github.com/yanzhenjie/AndServer 通过这个服务来完成。至于里面的DecodeUtil类的实现方式,索性将整个工程打包一下吧。见:安卓解码下载链接
现在解码工作高一段落,接下来就是java实现链接请求数据的步子了。
首先是token的请求获取:这个是没有问题的,也就是说服务器将这个和文章搜索是分开的,因为这个非常快。
package com.court.bigdata.crawler.job.newapp;
import java.util.Date;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import com.alibaba.fastjson.JSON;
import com.court.bigdata.crawler.util.CommonUtil;
import com.court.bigdata.crawler.util.RandomProxy;
public class TokenUtil {
private static Date start;
private static String token;
public static String token() {
//限制在10分钟内
if(token == null || start == null || (System.currentTimeMillis()-start.getTime()) > 550*1000){
start = new Date();
String timespan = CommonUtil.transDate(start, "yyyyMMddHHmmss");
//获取TOKEN 值 10分钟有效
try {
Document doc = Jsoup.connect("http://wenshuapp.court.gov.cn/MobileServices/GetToken")
.header("Host", "wenshuapp.court.gov.cn")
.header("Accept", "*/*")
.header("timespan", timespan+"")
//.header("nonce", "jhao")
//.header("signature", "60c89ad2f3fa6917d88b4e4efb18a930")
.header("Accept-Encoding", "gzip, deflate")
.header("Accept-Language", "zh-Hans-CN;q=1")
.header("devid", "b69ed310358d42219235e88ba199b3b6")
.header("User-Agent", "wenshuapp/1.1.0 (iPhone; iOS 10.0.2; Scale/2.00)")
.header("Connection", "keep-alive")
.header("Content-Type", "application/json")
.ignoreContentType(true)
.proxy(RandomProxy.getRandomProxyIP(),80)
.requestBody("{\"app\":\"cpws\"}")
.post();
token = JSON.parseObject(doc.text()).getString("token");
} catch (Exception e) {
e.printStackTrace();
}
}
return token;
}
}
然后就是请求列表测试,结果就是始终返回的数据是空,不知道是本机IP问题还是其他问题,请求方式就是Charles里面的封装成上面代码相似的代码就可以了。安卓解码测试工程:https://qianjieyun.com/data_452048A318294BA5B4C8AE253D58A954.html
看来还得继续研究才可以啊。over---