python某漫画app逆向


Posted in Python onMarch 31, 2021

一工具的准备

1.fiddler抓包工具 ,夜神模拟器
2.python环境,Java环境
3.漫画app准备
4.java反编译工具

二项目思路

配置好抓包工具和夜神模拟器
豆瓣夹下载漫画applink.
安装到夜神模拟器
python某漫画app逆向

抓取app数据
python某漫画app逆向

解析抓取的数据:
post请求
变化的参数client-time, client-sign
client-time 比较明显是时间戳
client-sign 是加密数据
python某漫画app逆向

client_type = 'android'
app_devicetoken = "e571dd8bd67803995b9bdcfefb58662b"
phone_mark = "58D83850AA58CCB094954B30F9C4D3C4"
client_time = str(int(time.time() * 1000))

解析app
将apk安装包后缀修改为rar, 解压压缩包得到app对应文件
python某漫画app逆向

python某漫画app逆向
得到Java的classes文件
对获取的classes.dex进行反编译,工具可以自行查找,或者沟通群获取
将classes.dex 移动到解析的文件夹
进入windows powershell cd 到反编译的文件夹
执行命令 .\d2j-dex2jar.bat .\classes.dex
得到 classes-dex2jar.jar 文件 这个就是java的源代码了
python某漫画app逆向
python某漫画app逆向
python某漫画app逆向

python某漫画app逆向
将代码拖动到你的java反编译器 JD-GUI
就能得到全部的java代码python某漫画app逆向
python某漫画app逆向

搜索对应的加密参数:client-sign
确定生成client-sign 为b.class 打开对应文件
找到数据的加密规则
原来加密的方式是md5
加密的数据是由时间戳来决定的
python某漫画app逆向
python某漫画app逆向
python某漫画app逆向

content = '3.0.1' + client_type + str(client_time) + app_devicetoken + phone_mark + "0" + "" + "{54563A97-2BBA-7F31-D4C1-8EF72F4A98E6}"
client_sign = hashlib.md5(content.encode("utf-8")).hexdigest()

确定请求头的全部参数

headers = {
    'client-ver': '3.0.1',
    'client-type': client_type,
    'client-time': str(client_time),
    'phone-mark': phone_mark,
    'app-devicetoken': app_devicetoken,
    'sina-uid': '0',
    'sina-token': '',
    'VREADREFER': 'vmh_client',
    'client-sign': client_sign,
    'Cache-Control': 'no-cache',
    'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
    'Content-Length': '223',
    'Host': 'api.manhua.weibo.com',
    'Connection': 'Keep-Alive',
    'Accept-Encoding': 'gzip',
    'User-Agent': 'okhttp/3.8.0',

}

需要传递的参数

data = "client_ver=3.0.1&client_type={}&client_time={}&phone_mark={}&app_devicetoken={}&sina_uid=0&sina_token=&client_sign={}".format(client_type, client_time, phone_mark, app_devicetoken, client_sign)

三简易代码提供参考

内容涉及该app, 只限技术探讨

扣扣群获取编译工具:731685275
import requests
import time
import hashlib
import os


client_type = 'android'
app_devicetoken = "e571dd8bd67803995b9bdcfefb58662b"
phone_mark = "58D83850AA58CCB094954B30F9C4D3C4"
client_time = str(int(time.time() * 1000))
content = '3.0.1' + client_type + str(client_time) + app_devicetoken + phone_mark + "0" + "" + "{54563A97-2BBA-7F31-D4C1-8EF72F4A98E6}"
client_sign = hashlib.md5(content.encode("utf-8")).hexdigest()
headers = {
    'client-ver': '3.0.1',
    'client-type': client_type,
    'client-time': str(client_time),
    'phone-mark': phone_mark,
    'app-devicetoken': app_devicetoken,
    'sina-uid': '0',
    'sina-token': '',
    'VREADREFER': 'vmh_client',
    'client-sign': client_sign,
    'Cache-Control': 'no-cache',
    'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
    'Content-Length': '223',
    'Host': 'api.manhua.weibo.com',
    'Connection': 'Keep-Alive',
    'Accept-Encoding': 'gzip',
    'User-Agent': 'okhttp/3.8.0',

}
data = "client_ver=3.0.1&client_type={}&client_time={}&phone_mark={}&app_devicetoken={}&sina_uid=0&sina_token=&client_sign={}".format(client_type, client_time, phone_mark, app_devicetoken, client_sign)


def parse_data(url):
    response = requests.post(url, headers=headers, data=data).json()
    page_list = response["data"]["chapter_list"]
    for x in page_list:
        page_url = "http://api.manhua.weibo.com/client/comic/show?comic_id=68236/client/comic/play?chapter_id={}".format(x["chapter_id"])
        dir_name = r"漫画\\" + x["chapter_name"]
        page_data = requests.post(page_url, headers=headers, data=data).json()["data"]["json_content"]["page"]
        y = 0
        for i in page_data:
            if not os.path.exists(dir_name):
                os.makedirs(dir_name)
            result = requests.get(i["mobileImgUrl"]).content
            path = dir_name + "\\" + str(y) + ".jpg"
            with open(path, "wb")as f:
                f.write(result)
                print("正在下载", path)
            y += 1


def main():
    url = "http://api.manhua.weibo.com/client/comic/show?comic_id=68236"
    parse_data(url)


if __name__ == '__main__':
    main()
Python 相关文章推荐
python实现随机密码字典生成器示例
Apr 09 Python
Python使用functools模块中的partial函数生成偏函数
Jul 02 Python
Python中的字符串操作和编码Unicode详解
Jan 18 Python
Python+OpenCV目标跟踪实现基本的运动检测
Jul 10 Python
Windows下python3.7安装教程
Jul 31 Python
python组合无重复三位数的实例
Nov 13 Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 Python
python实现对图片进行旋转,放缩,裁剪的功能
Aug 07 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
Python使用ElementTree美化XML格式的操作
Mar 06 Python
Pyside2中嵌入Matplotlib的绘图的实现
Feb 22 Python
OpenCV-Python 实现两张图片自动拼接成全景图
Jun 11 Python
python爬虫--selenium模块
Mar 31 #Python
【超详细】八大排序算法的各项比较以及各自特点
pandas 操作 Excel操作总结
Mar 31 #Python
字典算法实现及操作 --python(实用)
如何利用python和DOS获取wifi密码
python爬虫selenium模块详解
Mar 30 #Python
python将图片转为矢量图的方法步骤
Mar 30 #Python
You might like
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
2015/12/14 PHP
Yii核心验证器api详解
2016/11/23 PHP
javascript prototype,executing,context,closure
2008/12/24 Javascript
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
2016/08/05 Javascript
微信小程序 教程之wxapp 视图容器 view
2016/10/19 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
Python中对列表排序实例
2015/01/04 Python
简单上手Python中装饰器的使用
2015/07/12 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
python数据批量写入ScrolledText的优化方法
2018/10/11 Python
Python异常处理知识点总结
2019/02/18 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
护理专科毕业推荐信
2013/11/10 职场文书
乡镇纠风工作实施方案
2014/03/22 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
小学生思想品德评语
2014/12/31 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
公司员工培训管理制度
2015/08/04 职场文书
2016年万圣节活动总结
2016/04/05 职场文书