你的不足,我来补
准备工具:1.反编译工具
2.抓包工具
3.ksweb
演示软体:
飒漫画 3.3.22
(目前最新3.3.23 我懒惰更新)
收费限制:
1.vip章节
2.付费章节
3.超前章节
新机可领取3天白金会员(无需登录)
教程开始:
关于本地解锁部分教程不会细谈
以及广告的处理这也不会讲解
这里主要谈谈3天vip结束后 vip章节都无法观看问题
由于软件有3天试用 很多人在破解的时候 以为改了本地限制就完成了,其实不然,软件是有服务器验证的,3天vip结束后,vip以上的章节都不会有链接,所以就会导致vip章节白屏的情况。
至于本地限制
主要就是判断章节是否vip,收费或超前
只要把相关限制解除 就能观看了
(前提是 本身得是真正的vip会员)
这里只给出关键词
细节则请自行抓包分析
isvip 解锁vip章节限制
is_open_draw 解锁超前章节限制
chapter_charge_status 解锁收费章节限制
另外也可以把price结果改0
以上修改仅仅在还是试用会员的情况下 解除超前与收费章节限制
接下来就是试用会员结束后的处理
从文中可以知道软件提供新机3天试用
聪明的网友可能想到了搞个随机数 每3天或每次打开都是新用户
可是 它有个问题 这软件属于阅读类 阅读历史极为重要 如果每次都新用户 也就说明 不会有阅读记录保存 那即使达到了解锁vip
但也无法达到使用上的满足
这里可以换个思路 整个软件真正限制的地方在于阅读的时候 需要付费解锁
所以是不是就可以只修改阅读部分的限制?
有了想法 就开始抓包吧
主要分析这一条数据包
https://m.samh.xndm.tech/api/v1/comics/getcomicinfo_body
图中为返回的数据 已对重要位置做了标记
接着用浏览器访问免费章节的source_url看看 可以发现 是章节的链接
现在知道为什么会白屏了吧?
因为到期后 vip以上的链接不提供了 导致软件无法读取 所以即使修改本地限制也无用 因为最终验证在服务器。
从免费章节的数据里可以发现
除了红线处会根据chapter_id产生变化之外,source_url的链接 基本是一样的。
这是不是就说明 可以自行把残缺的部分补上?
这里给出3种思路 但只给出一种适合我的演示,同时这些思路不仅仅只适用于此,具体请自行发挥想象。
1.通过正则重写getcomicinfo_body的返回数据 将残缺部分补上
2.为了保留历史,可以只对getcomicinfo_body的uid进行修改
(注:经过分析发现只要对uid进行修改即可重新拥有3天vip)
可是当我搜索dex发现 有多处使用getcomicinfo_body
接着我又发现 get数据的uid是封装好后直接被多处调用
由于以上的思路 我得通过电脑写个Java代码去完成 可是我又不想打开电脑
然后又如我这般的懒人就衍生出了思路3
通过php重写数据 这样我就可以全程使用手机完成
使用php首先需要一台服务器
(有服务器的可以绕过这段)
没服务器的可以借助ksweb 在自己手机上搭建一个
ksweb属于傻瓜式一键安装
安装好后运行软件 会看到如下界面
我这里直接使用默认配置
接着使用浏览器访问
http://localhost:8080/
或
http://127.0.0.1:8080/
出现如图中结果即为成功
接着sdcard目录下会有一个htdocs目录
这个目录是http访问的目录,可以把php放进这里
这里新建一个目录 命名为xndm
接下来反编译dex,搜索getcomicinfo_body,随便点一个进入
如图跟随
可以看到 会在这里调用域名,然而这个域名也会在多处被调用,所以不能直接修改为本地服务器地址,不然会导致所有链接都会变成调用本地域名,那就需要写个判断 仅仅只实现指定的链接
图为修改后 修改好了就可以打包了
接下来需要写一份php代码
在xndm目录新建index.php文件
接着文本打开 写入如图代码
好了 现在可以打开软件了 可以发现收费章节已经可以正常观看了
本次教程今天就到这里
后记:
这次主要是通过php利用3天试用达到阅读效果
如果有天不再有3天试用 依旧可以利用php通过正则重写json数据 把source_url补全
不过以后的事以后再说
同样的不想通过php可以使用思路2 在java层把getcomicinfo_body的参数重新封装 也能达到一样的效果
今天的教学 你学会了吗? ☆千年琥珀☆ 发表于 2021-7-22 10:56
膜拜大佬!这个PHP文件方便分享下吗?
本来是希望给你们自己跟着图抄一遍的 这样才可以记住
不过没关系 需要的话这里补上
<?php
header("Content-type: text/json; charset=utf-8");
error_reporting(0);
$file = "uid";
if(file_exists($file)){
getcomic(file_get_contents($file));
}else{
getcomic(rand_device_id(18));
}
function getcomic($uid){
foreach (getallheaders() as $name => $value) {
if(stristr($name,"uid")){
$header[] = $name.": ".$uid;
}else if(stristr($name,"host")){
}else if(stristr($name,"user-agent")){
$useragent = $value;
}else{
$header[] = $name.": ".$value;
}
}
$requestUrl = 'https://m.samh.xndm.tech/api/v1/comics/getcomicinfo_body?'.'comic_id='.$_GET["comic_id"].'&gender='.$_GET["gender"].'&vip_form='.$_GET["vip_form"].'&client-channel='.$_GET["channel"].'&channel='.$_GET["channel"].'&productname='.$_GET["productname"].'&udid='.$_GET["udid"].'&android_id='.$_GET["android_id"].'&version='.$_GET["version"].'&platform=android&platformname=android&uid='.$uid.'&sessionid='.$_GET["sessionid"];
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt ($ch, CURLOPT_URL, $requestUrl);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_ENCODING, "gzip" );
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
unset($header);
if(strpos($file_contents, '"source_url":""') || empty($file_contents)){
getcomic(rand_device_id(19));
}else{
$fileopen=fopen("uid", "w");
fwrite($fileopen, $uid);
fclose($fileopen);
echo $file_contents;
}
}
function rand_device_id($len)
{
$chars = array('0','1','2','3','4','5','6','7','8','9');
$charsLen = count($chars) - 1;
shuffle($chars);
for ($i=0; $i<$len; $i++)
{
$output .= $chars;
}
return $output;
}
?>
hello008 发表于 2021-7-24 23:44
手机打这么多代码。。。神啊
这算少了。。。我还有更多的 2000多行吧:lol 看完了。大概的思路为搭建一个本地服务器作为中间层进行生成可以免费看vip章节的uid然后返回给软件这样吗。。那这样的话可以通过云函数去搭建一个接口去搞这东西 真高手啊! 厉害,向大佬学习。 强啊!!!!真的很强 感谢分享啊 学会了,感谢分享! 没学会… 确实是我的不足,没入门,得空按大佬的教程,试验一下。 这个一定要顶~ 谢谢