当前位置:   article > 正文

js逆向-renren为例_js逆向是什么意思

js逆向是什么意思
"""
逆向js是一个什么过程:由结果往前推,得到这些结果需要哪些条件,
然后准备好这些条件,用代码去模拟浏览器js生成结果的过程,获得想要的 
结果

分析
网页:密码加密,参数较多 -> 移动端 :密码还是加密,但参数较少。另外:移动端登录之后,
登录状态保持,能直接登录网页端

破解移动端:post 请求,要携带4个参数才能登录成功,寻找4个参数来源路径,然后通过逆向js
将符合条件的参数准备好,其实只需准备2个参数,rKey与加密后的password。

分析js,js代码里面:登录之前要发起 get 请求 http://activity.renren.com/livecell/rKey 获取 n
rKey 可根据 n 获取
password 加密 需要 提供变量 t ,n ,需要提供 函数setMaxDigits(),RSAKeyPair(),encryptedString()
上述3个函数在对应的 BigInt.js , RSA.js 里面,而RSA.js 要运行涉及 Barrett.js 文件。所以
模拟浏览器提供rKey 与 password 加密过程需要 提供 两个变量 t 和 n, 三个js文件 BigInt.js , RSA.js
,Barrett.js。

涉及js与python代码互动,需要用js2py模块
涉及状态保持,需要用到request.session()
"""
"""
renren为例:
登录请求:
http://activity.renren.com/livecell/ajax/clog
phoneNum: XXXXXXXXXXX
password: 29f159776d004d165c188bbdee199a1e4d4db66b2303d2fd404c9
c1: -100
rKey: 31e26fc9b340645a2da2a4e84c3b950e
:
password,rKey怎么来的。
发起登录请求前发起另一个请求和js代码,生成rKey与加密后的password:
get http://activity.renren.com/livecell/rKey 的响应 n -> rKey
js代码 -> 加密password

由js post代码来看,t是表单
"""

代码实现

  1. import requests
  2. import json
  3. import js2py
  4. rKey_url = "http://activity.renren.com/livecell/rKey"
  5. headers = {
  6. "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Mobile Safari/537.36"
  7. }
  8. response = requests.get(rKey_url, headers=headers)
  9. n = json.loads(response.text)["data"]
  10. # print(n)
  11. rkey = n["rkey"]
  12. context = js2py.EvalJs()
  13. with open("BigInt.js", "r", encoding="utf-8") as f:
  14. context.execute(f.read())
  15. with open("RSA.js", "r", encoding="utf-8") as f:
  16. context.execute(f.read())
  17. with open("Barrett.js", "r", encoding="utf-8") as f:
  18. context.execute(f.read())
  19. phoneNum = input('请输入用户名:')
  20. password = input('请输入密码:')
  21. context.t = {
  22. "password": password,
  23. }
  24. context.n = n
  25. js = """
  26. t.password = t.password.split("").reverse().join("");
  27. setMaxDigits(130);
  28. var o = new RSAKeyPair(n.e,"",n.n);
  29. r = encryptedString(o, t.password);
  30. t.password = r,
  31. t.rKey = n.rkey
  32. """
  33. context.execute(js)
  34. # print(context.t)
  35. login_url = "http://activity.renren.com/livecell/ajax/clog"
  36. session = requests.session()
  37. data = {
  38. "phoneNum": phoneNum,
  39. "password": context.t["password"],
  40. "c1": -100,
  41. "rKey": context.t["rKey"]
  42. }
  43. session.post(login_url, headers=headers, data=data)
  44. response = session.get("http://www.renren.com/")
  45. with open("09-人人.html", "wb") as f:
  46. f.write(response.content)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/392019
推荐阅读
相关标签
  

闽ICP备14008679号