今天继续给大家分享Python爬虫教程。这次主要涉及一个APP的逆向分析和数据抓取。APP的反爬会比较麻烦,比如安卓端。代码写好后,通常会进行打包加密加固。因此,除了抓包外,还需要对APP进行检查、解包、反编译等操作。接下来“小帅b的朋友:Houser”给大家介绍一下如何反向抓取APP数据,给大家一个参考思路:需要的设备和环境:设备:安卓手机抓包:fiddler+xposed+JustTrustme查壳:ApkScan-PKID解包:frida-DEXDump反编译:jadx-guihook:frida抓手机安装app,设置代理,先打开fiddler抓包,发现app做了证书校验,fiddleris后app提示打开Unabletoconnecttotheserver:表示该应用已完成SSLpinning证书验证。这个问题的解决办法一般是安装xposed框架,里面有一个JustTrustme模块。它的原理是hook,直接绕过证书验证类。安装方法自行百度。.打开app后可以看到抓包成功:首先简单分析一下,可以看到requestbody中的formdata是密文,response内容也是密文。这个请求和响应中有用的信息很少,你甚至不知道它在哪里。如何在jadx-gui中搜索,requestbody中的formdata以两个等号结尾,应该是base64编码,其他的我就不知道了。..解包反编译,先反编译。在此之前,你通常会使用查壳工具来检查应用是否被加固,打开ApkScan-PKID,将应用拖入其中:可以看到这个应用使用了360加固,真是层层限制!!这里使用frida-DEXDump解压。你可以从github下载frida-DEXDump的源代码。完成后,打开项目所在文件夹,在当前位置打开命令行,运行以下命令:pythonmain.pywait脱壳完成后,可以看到在当前项目中已经生成了对应的文件夹,而且里面有很多dex文件:使用jadx-gui打开dex文件,一般从最大的文件开始依次搜索关键词。我们知道java中使用base64是有BASE64Encoder关键字的,因为抓包得到的信息很少,所以只能在这里搜索这个关键字,在第四个dex中发现疑似加密:可以看到使用aes加密,密钥为固定字符串。FridaHookJava不是很熟悉,所以没法分析。直接使用frida写个钩子代码,看下加密函数的输入输出参数内容:同时对比数据包:获取请求数据这里输入参数数据:pageIndex:当前页码pageSize:页数固定当前页面typeId和source对应的数据项的个数,然后使用hookdecrypt函数比较抓包和hook的结果:结果是一样的,至此,我们的逆向分析就完成了。总结一下请求和响应过程,即请求体中的数据通过encrypt函数进行加密传递,通过改变pageIndex可以得到各个页面的数据,通过decrypt函数对响应进行加密显示,那么我们只需要在python中实现aes的加解密过程就可以了,从反编译的java代码可以看出密钥是固定的:wxtdefgabcdawn12,没有iv偏移。请求直接上传代码:运行代码,成功获取数据:ok,以上就是反向应用爬虫的全部内容,可以看到,现在数据加密很普遍,任何一个小应用都有几个数据保护机制,这次只涉及到java层的加密。下期讲native层加密的hook方法,frida-rpc的主动调用和逆向神器inspeckage的应用。最后,以上内容仅供学习交流。小帅b今天的分享希望能给大家带来一点帮助。那我们下次再见,peace!
