JS逆向day03-漫画柜图片地址逆向

逆向漫画柜图片真实地址加密

前期笔者所有的逆向网页都是基于github上有现成的逆向完成代码或者项目来进行的,**注意!**这不代表文章是非原创的,只有笔者逆向思路枯竭的时候会去看代码学习一下逆向思路,下面开始逆向(本篇完全算是日志了,因为虽然逆向出了代码但是还是出了些问题,并且解决失败了,希望有能力的大神可以告诉我为什么要这样解决,由于自己动手解决失败了所以也就不放上py代码了)

图片真实地址请求解析

现在大部分图片或者小说网站,都会将图片或者文字这些不想被人轻易获得的数据进行加密放入JS渲染,而非直接放入html中给人轻易爬虫.话不多说,直接开始我们的逆向.进入漫画柜中随机点开一副图片,右键审查元素可以看见图片的真实地址,但是html的源代码中没有


说明这里被js渲染了,我们ctrl+shift+f搜索这个idmangaBox,很快就能定位到我们想要的js代码处

下面是这段代码.

c(function() {
                    $("span.nopic,#erroraudit_show").remove(),
                    $("#imgLoading").show(),
                    pVars.curFile = i(pVars.page - 1),
                    $('<img alt="' + t.bname + " " + t.cname + '" id="mangaFile" src="' + pVars.curFile + '" class="mangaFile" data-tag="mangaFile" style="display:block;" />').load(function() {
                        n.success(this)
                    }).error(function() {
                        n.error(this)
                    }).appendTo("#mangaBox"),
                    SMH.utils.imgGrayScale()
                })

可以很明显的看到图片的真实代码来自于这段代码pVars.curFile = i(pVars.page - 1),在这里下个断点看看有什么情况,刷新后成功断下了没有传入什么有效的信息,F11跟进看看

继续F11看传入的变量有哪些

r = "https://us.hamreus.com/ps4/g/gmzr_wkhsq/第01回/JOJO_007.jpg.webp?cid=219425", i = undefined

再结合前面看到的图片真实地址可以判定这里就是生成图片地址的代码处,继续F11跟进

至此到这里我们只要获取到如何生成t变量以及在哪生成我们完成了对图片地址的逆向破解,就可以实现批量下载图片等功能.然后就在这种临门一脚的时候笔者卡壳了

不断分析右边的堆栈回溯寻找想要存放生成t变量的地方,分析了足足两个小时还是没有找到想要的关键CALL,吃完饭后重新回到电脑桌前静了下心重新查看t变量

才发现生成的t变量其实已经传入了54个图片文件变量,并且由于逆向过于急躁没有认真分析生成的各个参数,在点击下一张图片的时候其实是没有更改md5的值的.分析到这里笔者才明白,当你进入这生成的第一回网页的时候已经将所有图片真实地址生成好了,剩下的只有不断的进行异步交互来给用户提供图片.而笔者在测试断点的时候则是不断的点击下一张来查看断点,所以返回不到我们想要的T变量的生成代码处.于是我们刷新网页重新看看!

可以看到此时回溯的后面生成了匿名函数,点进去一看究竟

这不就是我们想要的t变量的存放地方吗!顺便提一下什么是匿名函数,可以看到文件的来源来自VM,什么是vm呢?VM是浏览器为匿名函数创建的内存空间,是无法清除的。 匿名函数需要运行,首先需要有一块内存空间来存储它,这块内存空间显示在浏览器调试信息中就是以VM开头的文件(但是其实并非真正的文件)而匿名函数是一种在运行时动态声明的函数。它们之所以被称为匿名函数是因为不同于普通函数,它们并没有函数名。而要追溯他们真正的来源

则是在右下角的地方,点进去看看

关键函数get!并且可以看到这段js代码就在网页的源文件中,合乎情理!只有这样才能生成不同的图片地址,而每进入其他的漫画时候也会生成不一样的数据!这也是为什么抓包的时候明明看不到返回了相关的数据,js的文件同时也没有变化.而为什么会有数据来源.原来网页程序员跟你拐了个大弯!

于是我们分析这段函数就好了.首先我们知道\x是表示16进制,将开头的\x65\x76\x61\x6c转换成字母也是eval,也就是说这是可以拦住80%逆向人的eval加密吗?一开始笔者也是这么想的,然而写成python代码则会报错
splic is not a function
正常的eval加密应该是split,而这里变成了splic,说明这里调用了自己写的splic函数代码而不是js自带的split函数,我们可以强行把16进制的c改成16进制的t看看会有什么结果

y.x({"z":4,"B":"A","t":"4.2","s":u,"w":"5","v":["I.2.3","H.2.3","J-L.2.3","K.2.3","D.2.3","C.2.3","E.2.3","G.2.3","F.2.3","r.2.3","b.2.3","c.2.3","e.2.3","d.2.3","a.2.3","6.2.3","7.2.3","9.2.3","8.2.3","n.2.3","o.2.3","q.2.3","p.2.3","l.2.3","h.2.3","f.2.3","i.2.3","k.2.3","j.2.3","m.2.3","M.2.3","1d.2.3","1c.2.3","1e.2.3","1g.2.3","1f.2.3","18.2.3","17.2.3","19.2.3","1b.2.3","1a.2.3","1m.2.3","1p.2.3","1o.2.3","1n.2.3","1h.2.3","1j.2.3","1l.2.3","1k.2.3","1i.2.3","16.2.3","T.2.3","S.2.3","V.2.3"],"U":R,"O":N,"Q":"/P/g/W/5/","13":1,"12":"","15":14,"11":D7BWAcHNgdwUwEbmARgJwBYDMAGYgabxxUD21YAKQHlKB9IgNnKotpQHZGai0PmiAOHiwCsgoilEoATBIwSsoyQwUjKnSe1W9J3TbUkDdOSbMO4FeQ5PGX5l6YZR4AxgEsAJsCQunwK5kkiAGYuADZwAM7ATgB2AIYAtnDALvGQACKxAC6xwADKALIAEp7uwIA82YC2DoDScoDASp5xiaI4DIY4Kky0OBodODg6PTgGA9YDFgP2A7K9tj1Y4kKyYdHA4OGy4FkAFsCBsSHhSYZCM5xC0sHRLuGbcB5HspDxAF4ATtQwANab4QCOwPFuEThEIrF5wACSl0ywAoABUAJ6bAD2AAUhAAhADCZEKKLgABkQtQyAAxUAAV020HAYIAbuCPAgQkinB9qE4fOFsplyZFJJIcFg6PJonAAB6ZBmiIQjThYIZy7py/qcDCy3gYMZyk68LATOUmWYtWbtVXG05ajVKjUqjUKjX6jWmjWG1VYIA,"Y":{"X":"10"}}).Z();

发现解析出来的根本不是我们想要的数据,到这里笔者思路是完全卡壳了.查阅了github上大神的相关代码,发现他调用了一个模块是lzstring,查阅了一下相关的资料发现这个lzstring并不是大众所知的库,不知道相关的大神是如何知道这个模块并加以调用的?

总结

逆向到这里也就结束了,总结下来算是逆向的思路有着一定的拓展,但是也知道了自己对js的数据存储之类的不够熟悉,这在逆向中是十分不应该的事情,不熟悉意味着你对这里含糊,对这里含糊意味着你逆向的思路受到限制,这是十分不应该的事情.希望自己能够再努努力,不断的提升自己.
另外希望有大神能帮忙回答一下这个lzstring的问题,是真心求教的,谢谢!

mygithub

欢迎来全世界最大的同性交友网站和我一起学习交流

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值