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编程-将Python程序转化为可执行程序[整理]
Apr 09 Python
在Python 3中实现类型检查器的简单方法
Jul 03 Python
老生常谈Python基础之字符编码
Jun 14 Python
利用python的socket发送http(s)请求方法示例
May 07 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
Python3自动签到 定时任务 判断节假日的实例
Nov 13 Python
Django的性能优化实现解析
Jul 30 Python
python 修改本地网络配置的方法
Aug 14 Python
Python高级特性之闭包与装饰器实例详解
Nov 19 Python
Python实现企业微信机器人每天定时发消息实例
Feb 25 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
Python文件名匹配与文件复制的实现
Dec 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实现文件下载实例分享
2014/06/02 PHP
一个比较不错的PHP日历类分享
2014/11/18 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
jQuery中slice()方法用法实例
2015/01/07 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
[01:06:39]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第三局
2016/03/02 DOTA
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
tensorflow 获取变量&打印权值的实例讲解
2018/06/14 Python
解决pandas read_csv 读取中文列标题文件报错的问题
2018/06/15 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
美国NBA官方商店:NBA Store
2019/04/12 全球购物
职称评定自我鉴定
2014/03/18 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
明确岗位职责
2015/02/14 职场文书
学术会议通知范文
2015/04/15 职场文书
Java 多线程并发FutureTask
2022/06/28 Java/Android