今天是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. POJ 1742 Coins 【可行性背包】【非原创】

    People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony ...

  2. codeforces 7B

    B. Memory Manager time limit per test 1 second memory limit per test 64 megabytes input standard inp ...

  3. Hadoop 3.0 EC技术

    Hadoop 3.0 EC技术 EC的设计目标 Hadoop默认的3副本方案需要额外的200%的存储空间.和网络IO开销 而一些较低I/O的warn和cold数据,副本数据的访问是比较少的(hot数据 ...

  4. vue & this.$copyText

    vue & this.$copyText click copy https://www.npmjs.com/package/vue-clipboard2 <p>{{message2 ...

  5. php foundation knowledge!

    php foundation knowledge! 1 <?php 2 $p = "PII"; 3 define("XPI",3.1415926); 4 ...

  6. ES6 Map to Array

    ES6 Map to Array function differentSymbolsNaive(str) { // write code here. const map = new Map(); co ...

  7. TypeScript enum 枚举实现原理

    TypeScript enum 枚举实现原理 反向映射 https://www.typescriptlang.org/docs/handbook/enums.html enum Direction { ...

  8. HTML5 download 执行条件

    HTML5 download 执行条件 同一个域名下的资源 http only 绝对路径/相对路径 都可以 demo https://cdn.xgqfrms.xyz/ https://cdn.xgqf ...

  9. svg opacity & fill-opacity & stroke-opacity

    svg opacity & fill-opacity & stroke-opacity opacity = ill-opacity + stroke-opacity https://s ...

  10. APP 金刚区图标设计 & UI

    APP 金刚区图标设计 & UI https://www.zcool.com.cn/article/ZNzk4Njg0.html