JS逆向 | 手把手教你某书网登陆思路解析

点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

行人刁斗风沙暗,公主琵琶幽怨多。

网址:

aHR0cHM6Ly93ZW5zaHUuY291cnQuZ292LmNuL3dlYnNpdGUvd2Vuc2h1LzE4MTAxMENBUkhTNUJTM0MvaW5kZXguaHRtbD9vcGVuPWxvZ2lu

首先抓个包:

手机号密码随便输,点击登陆

70a2e193fa42a5ec44181ca12df3ec32.png

此时form data 中可以获取到 username、password、appDomain、wenshu.court.gov.cn这四个信息,老规矩先全局搜一波

此处以password为例

082807a968d1b4882817c46fb21f119d.png

从上往下按照123的顺序

1. jquery相关,跳过

2. 乱七八糟,跳过

3. Login.js,点击文件进入(因为是登陆,所以看login)

903ebd706262344e9221cf8e7a991729.png

两处均可格式化

a767b55b58d0183425664af73a3a5c3a.png

继续搜,现在有8处,在return处全部打上断点(其实就是45行)

69ad44904de96f2583f9c4fc8c15a16f.png

参数已经提示了出来,很明显加密就在此处

但是但是但是,直接搜到没有任何帮助,跟栈才是需要训练的基本功

所以我们接下来按照跟栈的常规套路走一下

现在可以忘掉之前的步骤

59ec1447128ea0381d44693cf8667603.png

还是这个链接,进入initiator面板查看堆栈信息,一眼可见submit和add

但是但是我们还是要从头操作,假装不知道

顺带可以看到整体分为两部分 login + jq

c9aaab94e4013f40d0b7901fb9b08a22.png

(jq可以先不看,直接看不是jq的栈)

所以直接进send、再格式化代码、打上断点、点击登陆

97d7b95bb652d2267e53c52413d29f2c.png

在send函数处 a.data里面有我们需要的密文,那么a是哪里来的,a是上面传进来的

继续跟上层堆栈

根据浏览器默认提示,data依然是传入的,继续往上跟

af0f13f3920b914470a55f1826331d8b.png

83f9a8e122b390c3d6d82ffea44f71cb.png

此处c依然是被传入的,继续跟上层

。。。。。。

这里省略这些步骤,还是一样的去分析一下

757837680677261430ec5f70eb010227.png

直接跳到submit这里

在这个位置上已经处于提交请求前,也没有密文是被传入的,大概率就是明文加密的关键行

而且这段代码位置没有return这个字

鉴于作用域问题,在var n处重新下断并点击登陆

b4a3f9c4bfbe9ede07660afa278e9287.png

现在作用域就被断在了submit处,在post(519行)前,就是需要注意的

跟进o.exec进行查看,return处下断

55336abd63dc0810c05348a4e61c3584.png

继续跟进return 处的 a函数进行查看

07b4b95ba88051d2619be946035d5429.png

跟进来之后,这个a函数发现无法跟进,其实还是作用域问题,那么第8行下断就可以跟进去了

4398c76b08fa0c5b9bb90f4ea979ac75.png

刚才还提示第7行,现在变成了17行,继续跟进去(参数提示是username,需要再断一下变成password)

08f34f41b36fab0a94d614eb1080eb19.png

这样就好了,而且也提示第39行了,继续跟进

f065ea76f4b18d787b8cc0c26ffea1d8.png

这就又回到了我们熟悉的45行

因为现在混淆代码越来越多,转码器使用的人也越来越多,代码不可读是常态,这种情况下经常搜不到,定位不到关键加密代码,跟栈就是唯一的基本功

接下来i.createObj 和i.encodePassword分别查看

i.createObj: 

dd15190c3d4377c8dfe840736fc54307.png

就是返回一个对象,对象中的password就是密码加密

i. encodePassword:

01a337c2cc128282d1ce493fb6db7b15.png

e就代表传入的密码明文

t就代表密钥

看见n.setPublicKey(t),不用说var n = new JSEncrypt,肯定new的是RSA算法

跟进去查看后随便翻翻就能看到

d35e29db729f8cc9c70b87717380bc64.png

6d2128b47f3079e5fa359f183d8dc6eb.png

那当然就是RSA了,接下来可以断点分析分析,然后用py或者套js的标准加密库实现

80dd8afdf40036c124c7298ad82d27de.png

或者也可以按照webpack的扣代码手法把代码cv出来。

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

82c32fc549d5fe7cca957e59fbf70354.png

------------------- End -------------------

往期精彩文章推荐:

e313f0ba98715a2d613056195a719d39.png

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值