抓包某PMP培训机构APP并下载所有PMP课程

查看 121|回复 11
作者:mr.z.j   
前言
3年前报考了PMP,疫情原因推迟两年没考,近期通知6.25要考试了,临时抱佛脚赶快刷视频。
前年的时候也抓包把所有课程打包下了一次,但是现在PMP改版,之前的视频已经过时了,在线看的又不方便,所以又重新抓包下载,这次把过程和代码记录下来。
【备注】
[color=]PMP的考试是必须通过这种培训机构才可以报名考试的,即便你看了视频,想要考试,还是得先找机构报名,才能考试。
[color=]另外,抓包下载课程的前提条件还是必须得先买了课程才可以看到内容。
[color=]把下载的视频分享出来主要是出于大家一起学习项目管理。
使用到的工具:
【雷电3.0】【某环APP】【Charles抓包】
开发语言:
Java
步骤
1、安装Charles,开启代{过}{滤}理,设置https证书
这一步论坛或者百度一下很多教程,比如:搜索 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn ,这里就不细讲了。


1.png (67.62 KB, 下载次数: 1)
下载附件
2022-5-31 16:57 上传



Charles 4.2.7 - Sess_2022-05-31_16-37-46.png (70.13 KB, 下载次数: 1)
下载附件
2022-5-31 16:57 上传

2、安装雷电3.0模拟器
使用3.0的主要原因是抓包需要安装并信任https证书,安卓高版本好像没办法,所以用的是雷电3.0。
安装好之后设置网络桥接,安装驱动;


Snipper - Snipaste_2022-05-31_13-27-18.png (37.99 KB, 下载次数: 1)
下载附件
2022-5-31 16:58 上传

打开雷电之后,进入wlan设置,长按,修改网络,进入高级选项,打开代{过}{滤}理,设置为Charles代{过}{滤}理的IP+端口


雷电模拟器_2022-05-31_13-27-50.png (48.38 KB, 下载次数: 1)
下载附件
2022-5-31 16:58 上传



2225.png (78.92 KB, 下载次数: 1)
下载附件
2022-5-31 16:58 上传

3、安装某环APP,进入我的学习开始抓包
这里要吐槽一下APP的开发了,获取用户信息的接口没有任何登录鉴权,随便传个userid就可以获取该用户的邮箱 手机信息,借此其实可以轮询到所有的用户隐私信息。


Charles 4.2.7 - Sess_2022-05-31_16-37-25.png (65.99 KB, 下载次数: 1)
下载附件
2022-5-31 16:58 上传

言归正传,说下怎么获取所有的课程
这里通过点击APP,发现需要通过4个步骤
[Java] 纯文本查看 复制代码
static String url1 = "https://app.xxxx.com/Lesson/myLessons";// 1、获取班级地址
static String url2 = "https://app.xxxx.com/User/myLesson";// 2、获取课程地址
static String url3 = "https://app.xxxx.com/Lesson/detail";// 3、获取课程列表
static String url4 = "https://app.xxxx.com/Lesson/play";// 3、获取课程文件
每次请求传入的参数基本就是上一个接口返回的id,
所以代码逻辑就是
1、获取用户获取到该用户的班级列表
2、根据班级获取到班级内的课程
3、获取课程内的在线课程
4、根据在线课程获取课程的视频文件或者课程作业
5、多线程下载文件
下面是具体代码,时间有限,也没有做什么规范和优化,凑合看下吧
[Java] 纯文本查看 复制代码
public class Test {
        static String filePath = "E:\\下载\\PMP"; //保存路径
        static String userid = "xxxx";//抓包从请求头获取
        static String url1 = "https://app.xxxx.com/Lesson/myLessons";// 1、获取班级地址
        static String url2 = "https://app.xxxx.com/User/myLesson";// 2、获取课程地址
        static String url3 = "https://app.xxxx.com/Lesson/detail";// 3、获取课程列表
        static String url4 = "https://app.xxxx.com/Lesson/play";// 3、获取课程文件
        static Map headMap = new HashMap();
        public static void main(String[] args) throws Exception {
                List tempmap = new ArrayList();
                filePath += new Random(10000).nextLong() + "\\";
                headMap.put("secket", "xxxxx");//抓包从请求头获取
                headMap.put("apid", "yun.aura.cn");
                headMap.put("Content-Type", "application/json;charset=UTF-8");
                System.out.println("获取班级列表");
                String result = SdkClient.post(url1 + "?p=1&uid=" + userid, "", headMap);
                System.out.println(result);
                if (result != null && !"".equals(result) && result.contains("userInfo")) {
                        JSONObject myLessonsresult = JSON.parseObject(result);
                        JSONArray data = myLessonsresult.getJSONArray("data");
                        for (int i = 0; i  urls = new ArrayList();
                                for (int iii = 0; iii  urls;
        private CountDownLatch latc;
        public QueryTask() {
                super();
        }
        public QueryTask(List urls, CountDownLatch latc) {
                super();
                this.urls = urls;
                this.latc = latc;
        }
        // 下载链接 下载到的目录 下载后的文件名称
        public static boolean download(String urlPath, String fileName) throws Exception {
                // 解决url中可能有中文情况
                URL url = new URL(urlPath);
                HttpURLConnection http = (HttpURLConnection) url.openConnection();
                http.setConnectTimeout(3000);
                // 设置 User-Agent 避免被拦截
                http.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");
                // 获取文件名
                InputStream inputStream = http.getInputStream();
                byte[] buff = new byte[1024 * 10];
                File file = new File(fileName);
                if (!file.exists()) {
                        OutputStream out = new FileOutputStream(file);
                        int len;
                        int count = 0; // 计数
                        while ((len = inputStream.read(buff)) != -1) {
                                out.write(buff, 0, len);
                                out.flush();
                                ++count;
                        }
                        // 关闭资源
                        out.close();
                        inputStream.close();
                        http.disconnect();
                        return true;
                }
                return false;
        }
        @Override
        public void run() {
                try {
                        for (String[] u : urls) {
                                download(u[0], u[1]);
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                } finally {
                        // 每结束一个线程,就要总数减一
                        latc.countDown();
                }
        }
}
最后所有的文件也会按照目录生成


snipaste_20220531_134728.png (122.67 KB, 下载次数: 1)
下载附件
2022-5-31 16:59 上传

最终结果我上传到网盘了,见附件。

课程, 下载次数

linswin   


qliu00 发表于 2022-12-1 13:44
那你能帮忙爬一个希赛PMP视频不?
https://wangxiao.xisaiwang.com/zhibo2/v280007502.html

请注意:抓包下载课程的前提条件还是必须得先买了课程才可以看到内容。
如果购买了账号,可以私发给我,我帮你看看能不能逆向爬取。
fenghz   


狼孩yannis 发表于 2022-6-1 15:23
PMP的考试是必须通过这种培训机构才可以报名考试的,即便你看了视频,想要考试,还是得先找机构报名,才能 ...

也有那种自学代报名的,就花个一两百而已
Syer   

去年已经考过了,祝楼主早日拿证
AlvinWang76   

感谢楼主分享  正需要   7月要考试了 用的上
依旧沉沉   

我也报考了,敢不敢把视频共享出来~
mr.z.j
OP
  


依旧沉沉 发表于 2022-6-1 13:18
我也报考了,敢不敢把视频共享出来~

网盘地址附件呢。
AlvinWang76   

楼主要是能资源放到阿里网盘就好了    度盘速度太慢了
mr.z.j
OP
  


AlvinWang76 发表于 2022-6-1 13:43
楼主要是能资源放到阿里网盘就好了    度盘速度太慢了

俺买了百度会员的。。。
jobs_steven   

这个可以。。。学习了。。。。。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部