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中 Lambda表达式全面解析
Nov 28 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
Mar 12 Python
Python存取XML的常见方法实例分析
Mar 21 Python
PyTorch上实现卷积神经网络CNN的方法
Apr 28 Python
浅谈Python里面小数点精度的控制
Jul 16 Python
对python读取zip压缩文件里面的csv数据实例详解
Feb 08 Python
python async with和async for的使用
Jun 20 Python
Python GUI学习之登录系统界面篇
Aug 21 Python
利用pytorch实现对CIFAR-10数据集的分类
Jan 14 Python
python名片管理系统开发
Jun 18 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
Python生成并下载文件后端代码实例
Aug 31 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 开源框架22个简单简介
2009/08/24 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
javascript实现文字图片上下滚动的具体实例
2013/06/28 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
基于vue--key值的特殊用处详解
2020/07/31 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
python概率计算器实例分析
2015/03/25 Python
python实现俄罗斯方块
2018/06/26 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
留学推荐信怎么写
2014/01/25 职场文书
房产公证委托书范本
2014/09/20 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
常用的Python代码调试工具总结
2021/06/23 Python
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js