今天是md5巩固项目,该项目比昨天的复杂一些,但方法思路是一样的。

  今天的目标:https://www.webportal.top/

  打开网站,填入账号密码(密码项目以123456做测试)。点击登录抓包后,发现该登录包为ajax请求,其中加密参数只有pwd。

  

  接下来,就是解析pwd的加密方式,通过全局所搜,可以出如下结果:

  

  第二个很明显不是加密。那么是不是在第一个js文件里面呢,点进去,简单搜索发现了这样的情况:

  

  这么友好的吗?果断打下断点,调试,发现到这里后,i.pwd就是我们的密码123456,而$.md5整体是一个加密函数,处理之后,也确实是加密数据。直接跳入函数,会发现该函数时这样的:

  

  这里明显是该函数调用了其他函数,而且没有什么加密算法会只有两行!先不用管,把前面的加密动作和这里复制出来进行简单的改写:

  

  接下来,对MD5这个改写后的函数简单分析,返回的这个玩意首先我是看不懂的,但是我猜测,字母后面跟括号,那么这个字母肯定是某函数!只有函数才需要传参。通过调试工具进行调试,发现函数u不存在,断点跳进来,查看函数,直接复制过来。看了下格式,改都不需要改。来都来了,我们把这一行的几个函数都先看下,比如,f c u,其中u已经找到了,找下f和c,然后也复制过来,接着就重复上述操作,根据调试工具的提示,缺啥补啥。当我们补完就发现,没问题了,运行也直接出结果了。

  

  至此该加密数据解密结束。

  下附代码:

  python部分:

 1 import execjs
2
3
4 def read_js(file):
5 with open(file, 'r', encoding='utf8') as f:
6 data = f.read()
7 return data
8
9
10 if __name__ == '__main__':
11 js_str = read_js('webportal.js')
12 js_o = execjs.compile(js_str)
13 md5_password = js_o.call('getpwd', '123456')
14 print(md5_password)

  JS代码部分

  1 function a(e, t, n, o, a, r, s) {
2 return i(t ^ n ^ o, e, t, a, r, s)
3 }
4
5 function r(e, t, n, o, a, r, s) {
6 return i(n ^ (t | ~o), e, t, a, r, s)
7 }
8
9 function o(e, t, n, o, a, r, s) {
10 return i(t & o | n & ~o, e, t, a, r, s)
11 }
12
13 function t(e, t) {
14 var i = (65535 & e) + (65535 & t);
15 return (e >> 16) + (t >> 16) + (i >> 16) << 16 | 65535 & i
16 }
17
18 function i(e, i, n, o, a, r) {
19 return t((s = t(t(i, e), t(o, r))) << (l = a) | s >>> 32 - l, n);
20 var s, l
21 }
22
23 function n(e, t, n, o, a, r, s) {
24 return i(t & n | ~t & o, e, t, a, r, s)
25 }
26
27 function d(e) {
28 var t, i = [];
29 for (i[(e.length >> 2) - 1] = void 0, t = 0; t < i.length; t += 1) i[t] = 0;
30 for (t = 0; t < 8 * e.length; t += 8) i[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32;
31 return i
32 }
33
34 function s(e, i) {
35 e[i >> 5] |= 128 << i % 32,
36 e[14 + (i + 64 >>> 9 << 4)] = i;
37 var s, l, d, c, p, u = 1732584193,
38 f = -271733879,
39 h = -1732584194,
40 g = 271733878;
41 for (s = 0; s < e.length; s += 16) l = u,
42 d = f,
43 c = h,
44 p = g,
45 u = n(u, f, h, g, e[s], 7, -680876936),
46 g = n(g, u, f, h, e[s + 1], 12, -389564586),
47 h = n(h, g, u, f, e[s + 2], 17, 606105819),
48 f = n(f, h, g, u, e[s + 3], 22, -1044525330),
49 u = n(u, f, h, g, e[s + 4], 7, -176418897),
50 g = n(g, u, f, h, e[s + 5], 12, 1200080426),
51 h = n(h, g, u, f, e[s + 6], 17, -1473231341),
52 f = n(f, h, g, u, e[s + 7], 22, -45705983),
53 u = n(u, f, h, g, e[s + 8], 7, 1770035416),
54 g = n(g, u, f, h, e[s + 9], 12, -1958414417),
55 h = n(h, g, u, f, e[s + 10], 17, -42063),
56 f = n(f, h, g, u, e[s + 11], 22, -1990404162),
57 u = n(u, f, h, g, e[s + 12], 7, 1804603682),
58 g = n(g, u, f, h, e[s + 13], 12, -40341101),
59 h = n(h, g, u, f, e[s + 14], 17, -1502002290),
60 u = o(u, f = n(f, h, g, u, e[s + 15], 22, 1236535329), h, g, e[s + 1], 5, -165796510),
61 g = o(g, u, f, h, e[s + 6], 9, -1069501632),
62 h = o(h, g, u, f, e[s + 11], 14, 643717713),
63 f = o(f, h, g, u, e[s], 20, -373897302),
64 u = o(u, f, h, g, e[s + 5], 5, -701558691),
65 g = o(g, u, f, h, e[s + 10], 9, 38016083),
66 h = o(h, g, u, f, e[s + 15], 14, -660478335),
67 f = o(f, h, g, u, e[s + 4], 20, -405537848),
68 u = o(u, f, h, g, e[s + 9], 5, 568446438),
69 g = o(g, u, f, h, e[s + 14], 9, -1019803690),
70 h = o(h, g, u, f, e[s + 3], 14, -187363961),
71 f = o(f, h, g, u, e[s + 8], 20, 1163531501),
72 u = o(u, f, h, g, e[s + 13], 5, -1444681467),
73 g = o(g, u, f, h, e[s + 2], 9, -51403784),
74 h = o(h, g, u, f, e[s + 7], 14, 1735328473),
75 u = a(u, f = o(f, h, g, u, e[s + 12], 20, -1926607734), h, g, e[s + 5], 4, -378558),
76 g = a(g, u, f, h, e[s + 8], 11, -2022574463),
77 h = a(h, g, u, f, e[s + 11], 16, 1839030562),
78 f = a(f, h, g, u, e[s + 14], 23, -35309556),
79 u = a(u, f, h, g, e[s + 1], 4, -1530992060),
80 g = a(g, u, f, h, e[s + 4], 11, 1272893353),
81 h = a(h, g, u, f, e[s + 7], 16, -155497632),
82 f = a(f, h, g, u, e[s + 10], 23, -1094730640),
83 u = a(u, f, h, g, e[s + 13], 4, 681279174),
84 g = a(g, u, f, h, e[s], 11, -358537222),
85 h = a(h, g, u, f, e[s + 3], 16, -722521979),
86 f = a(f, h, g, u, e[s + 6], 23, 76029189),
87 u = a(u, f, h, g, e[s + 9], 4, -640364487),
88 g = a(g, u, f, h, e[s + 12], 11, -421815835),
89 h = a(h, g, u, f, e[s + 15], 16, 530742520),
90 u = r(u, f = a(f, h, g, u, e[s + 2], 23, -995338651), h, g, e[s], 6, -198630844),
91 g = r(g, u, f, h, e[s + 7], 10, 1126891415),
92 h = r(h, g, u, f, e[s + 14], 15, -1416354905),
93 f = r(f, h, g, u, e[s + 5], 21, -57434055),
94 u = r(u, f, h, g, e[s + 12], 6, 1700485571),
95 g = r(g, u, f, h, e[s + 3], 10, -1894986606),
96 h = r(h, g, u, f, e[s + 10], 15, -1051523),
97 f = r(f, h, g, u, e[s + 1], 21, -2054922799),
98 u = r(u, f, h, g, e[s + 8], 6, 1873313359),
99 g = r(g, u, f, h, e[s + 15], 10, -30611744),
100 h = r(h, g, u, f, e[s + 6], 15, -1560198380),
101 f = r(f, h, g, u, e[s + 13], 21, 1309151649),
102 u = r(u, f, h, g, e[s + 4], 6, -145523070),
103 g = r(g, u, f, h, e[s + 11], 10, -1120210379),
104 h = r(h, g, u, f, e[s + 2], 15, 718787259),
105 f = r(f, h, g, u, e[s + 9], 21, -343485551),
106 u = t(u, l),
107 f = t(f, d),
108 h = t(h, c),
109 g = t(g, p);
110 return [u, f, h, g]
111 }
112
113 function p(e) {
114 return unescape(encodeURIComponent(e))
115 }
116 function l(e) {
117 var t, i = "";
118 for (t = 0; t < 32 * e.length; t += 8) i += String.fromCharCode(e[t >> 5] >>> t % 32 & 255);
119 return i
120 }
121 function c(e) {
122 var t, i, n = "";
123 for (i = 0; i < e.length; i += 1) t = e.charCodeAt(i),
124 n += "0123456789abcdef".charAt(t >>> 4 & 15) + "0123456789abcdef".charAt(15 & t);
125 return n
126 }
127
128 function u(e) {
129 return function(e) {
130 return l(s(d(e), 8 * e.length))
131 } (p(e))
132 }
133
134 MD5 = function(e, t, i) {
135 return t ? i ? f(t, e) : c(f(t, e)) : i ? u(e) : c(u(e))
136 }
137
138 function getpwd(pwd) {
139 var password = MD5(pwd);
140 return password
141 }

JS代码部分

  

JS逆向-抠代码的第四天【手把手学会抠代码】的更多相关文章

  1. JS逆向-抠代码的第二天【手把手学会抠代码】

    今天的学习项目:沃支付:https://epay.10010.com/auth/login 清空浏览器缓存后,打开网页,输入手机号,密码222222,按照网站要求填入验证码(sorry,我没有账号密码 ...

  2. JS逆向-抠代码的第一天【手把手学会抠代码】

    首先声明,本人经过无数次摸爬滚打及翻阅各类资料,理论知识极其丰富,但是抠代码怎么都抠不会. 无奈之下,只能承认:这个活,需要熟练度. 本文仅对部分参数进行解析,有需要调用,请自行根据现实情况调整. 第 ...

  3. 爬虫05 /js加密/js逆向、常用抓包工具、移动端数据爬取

    爬虫05 /js加密/js逆向.常用抓包工具.移动端数据爬取 目录 爬虫05 /js加密/js逆向.常用抓包工具.移动端数据爬取 1. js加密.js逆向:案例1 2. js加密.js逆向:案例2 3 ...

  4. 兄弟,你爬虫基础这么好,需要研究js逆向了,一起吧(有完整JS代码)

    这几天的确有空了,看更新多快,专门研究了一下几个网站登录中密码加密方法,比起滑块验证码来说都相对简单,适合新手js逆向入门,大家可以自己试一下,试不出来了再参考我的js代码.篇幅有限,完整的js代码在 ...

  5. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  6. 这个爬虫JS逆向加密任务,你还不来试试?逆向入门级,适合一定爬虫基础的人

    友情提示:在博客园更新比较慢,有兴趣的关注知识图谱与大数据公众号吧.这次选择苏宁易购登录密码加密,如能调试出来代表你具备了一定的JS逆向能力,初学者建议跟着内容调试一波,尽量独自将JS代码抠出来,实在 ...

  7. 爬虫必看,每日JS逆向之爱奇艺密码加密,今天你练了吗?

    友情提示:优先在公众号更新,在博客园更新较慢,有兴趣的关注一下知识图谱与大数据公众号,本次目标是抠出爱奇艺passwd加密JS代码,如果你看到了这一篇,说明你对JS逆向感兴趣,如果是初学者,那不妨再看 ...

  8. 通过JS逆向ProtoBuf 反反爬思路分享

    前言 本文意在记录,在爬虫过程中,我首次遇到Protobuf时的一系列问题和解决问题的思路. 文章编写遵循当时工作的思路,优点:非常详细,缺点:文字冗长,描述不准确 protobuf用在前后端传输,在 ...

  9. 我去!爬虫遇到JS逆向AES加密反爬,哭了

    今天准备爬取网页时,遇到『JS逆向AES加密』反爬.比如这样的: 在发送请求获取数据时,需要用到参数params和encSecKey,但是这两个参数经过JS逆向AES加密而来. 既然遇到了这个情况,那 ...

随机推荐

  1. Win10永久禁用驱动程序强制签名

    在win10下用一个命令就可以禁用驱动程序强制签名 1.禁止强制签名,以管理员的身份运行cmd 执行以下命令 bcdedit.exe /set nointegritychecks on 恢复默认验证, ...

  2. mybatis(一)常见ORM框架及JDBC操作工具类

      转载:https://www.cnblogs.com/wuzhenzhao/p/11075569.html 在Java 程序里面去连接数据库,最原始的办法是使用JDBC 的API.我们先来回顾一下 ...

  3. Next.js 10

    Next.js 10 October 27th 2020 https://nextjs.org/blog/next-10 refs xgqfrms 2012-2020 www.cnblogs.com ...

  4. 找出 int 数组的平衡点 & 二叉树 / 平衡二叉树 / 满二叉树 / 完全二叉树 / 二叉查找树

    找出 int 数组的平衡点 左右两边和相等, 若存在返回平衡点的值(可能由多个); 若不存在返回 -1; ``java int [] arr = {2,3,4,2,4}; ```js const ar ...

  5. scrollTo & js auto scroll & scrollX & scrollY

    scrollTo & js auto scroll & scrollX & scrollY scrollX & scrollY 获取 scroll top height ...

  6. postman 发送数组

    原文 users[]:aa users[]:22 object[] // { users: [ { name: ' "ajanuw"', pwd: ' "aaa" ...

  7. Techme INC:红光和近红外光疗法有效加速肌肉恢复,美国橄榄球队已采用

    Techme INC创始人兼董事长MADELEINE VAUGHAN表示:在运动结束后,肌肉纤维因为细微损伤造成酸痛情形,即是延迟性肌肉酸痛-DOMS.这类酸痛发生时,需要适度的恢复,避免造成肌肉拉伤 ...

  8. NGK团队是如何打造超高回报率的BGV项目的?

    NGK旨在激励网络的供给端引导去中心化的节点集群,用于促进网络使用和增加带宽流动. 具体来讲,在未来的24个月内,NGK会将部分生态参与者纳入白名单系统有兴趣的参与者可关注官方信息. 对内,NGK采用 ...

  9. NGK是如何运用IPFS分布式存储的?

    整个夏季,除了天气的火热,还有的火热莫过于IPFS挖矿这个领域了.IPFS的概念火热到,你可以看到到处都在卖IPFS矿机.那么,是什么原因导致IPFS这么火呢?在这之前,我们先了解一下什么是IPFS技 ...

  10. C语言数据类型思维导图