吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 654|回复: 7
收起左侧

[学习记录] 某点读君App抓包,代码分享

[复制链接]
ModeCai 发表于 2026-5-18 15:17
本帖最后由 ModeCai 于 2026-5-19 10:39 编辑

抓包逆向初级学习者,分享一点自己的学习痕迹,代码已支持下载图书图片,可以自行生成PDF,里面需要的详细参数需自行使用抓包软件抓取,不适合零基础

[JavaScript] 纯文本查看 复制代码
import fs from "fs";
import path from "path";
import axios from "axios";
// 下载图片
async function downloadImage(url, outputPath) {
    try {
        const response = await axios({
            method: 'GET',
            url: url,
            responseType: 'stream'
        });
        return new Promise((resolve, reject) => {
            const writer = fs.createWriteStream(outputPath);
            response.data.pipe(writer);
            writer.on('finish', () => {
                resolve();
            });
            writer.on('error', reject);
            response.data.on('error', reject);
        });
    } catch (error) {
        console.error(`下载失败: ${url} - ${error.message} `);
        throw error;
    }
}
// 'EOF'
async function fetchBookPages(apiUrl) {
    try {
        const response = await axios.get(apiUrl);
        if (response.data.code !== 2000) {
            throw new Error(`API echo: ${response.data.msg} `);
        }
        return response.data.data;
    } catch (error) {
        console.error(`'EOF': ${error.message} `);
        throw error;
    }
}
//  pic_water 'EOF'
async function parsePicWater(pages, outputDir = './watermark_images') {
    'EOF'
    if (!fs.existsSync(outputDir)) {
        fs.mkdirSync(outputDir, { recursive: true });
    }
    const baseUrl = 'https://ddjcdn.diandujun.com/';
    const results = [];
    for (let i = 0; i < pages.length; i++) {
        const page = pages[i];
        const picWater = page.pic_water;
        // pic_water'EOF'
        if (!picWater) {
            console.log(` ${page.page} (ID: ${page.id}): pic_water `);
            results.push({
                id: page.id,
                page: page.page,
                pic_water: null,
                status: 'skipped',
                reason: 'pic_water'
            });
            continue;
        }
        // 'EOF' URL
        const fullUrl = picWater.startsWith('http')
            ? picWater
            : `${baseUrl}${picWater} `;
        const fileName = `page_${page.page}_${page.id}.jpg`;
        const filePath = path.join(outputDir, fileName);
        try {
            console.log(`${page.page} (ID: ${page.id})...`);
            console.log(`  pic_water: ${picWater} `);
            console.log(`  'EOF'UUUURL: ${fullUrl} `);
            await downloadImage(fullUrl, filePath);
            results.push({
                id: page.id,
                page: page.page,
                pic_water: picWater,
                fullUrl: fullUrl,
                outputPath: filePath,
                status: 'success'
            });
        } catch (error) {
            console.error(` ${page.page} : ${error.message} `);
            results.push({
                id: page.id,
                page: page.page,
                pic_water: picWater,
                fullUrl: fullUrl,
                status: 'failed',
                error: error.message
            });
        }
    }
    return results;
}
//
async function main() {
    // API 自行替换内容可以自己去抓包 某点读君小程序、App或者网页版都可以
    const apiUrl = 'https://api.diandujun.com/api//dianduapi/bookAllPages?cv=版本号(自行替换)&from=uni&app_name=ddj&env=mp&uid=用户id(自行替换)&key=加密签名的key(自行替换)&bid=图书id(自行替换)&kind=2';
    try {
        // 'EOF'
        const pages = await fetchBookPages(apiUrl);
        // pic_water
        const results = await parsePicWater(pages);
        // 'EOF'
        const successful = results.filter(r => r.status === 'success').length;
        const failed = results.filter(r => r.status === 'failed').length;
        const skipped = results.filter(r => r.status === 'skipped').length;
        // SON
        const resultFile = './pic_water_results.json';
        fs.writeFileSync(resultFile, JSON.stringify(results, null, 2));
        console.log(`\ ${resultFile} `);
    } catch (error) {
        console.error('./:', error.message);
        process.exit(1);
    }
}
//
main();

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

huluwa123 发表于 2026-5-18 18:00
楼主可以采用代码块插入的形式,版面好看一些
kylinwu 发表于 2026-5-18 21:15
guyiya 发表于 2026-5-19 00:22
lql3344521aaa. 发表于 2026-5-19 08:40
弄个root的手机好难啊,还得用旧手机
 楼主| ModeCai 发表于 2026-5-19 10:40
huluwa123 发表于 2026-5-18 18:00
楼主可以采用代码块插入的形式,版面好看一些

感谢,采纳了
 楼主| ModeCai 发表于 2026-5-19 10:40
lql3344521aaa. 发表于 2026-5-19 08:40
弄个root的手机好难啊,还得用旧手机

嗯嗯,我也是很久都不root手机了
 楼主| ModeCai 发表于 2026-5-19 10:41
guyiya 发表于 2026-5-19 00:22
还是看不懂,但需要支持一下

加油,偷偷说一下其实可以扔给AI分析一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-6-13 08:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表