Js逆向分析


Js逆向分析

一、总结

一句话总结:

1、知道如何寻找登录接口
2、知道如何确定Js的位置
3、知道如何观察js的执行过程
4、知道js的执行方法

 

 

1、js逆向分析一般过程?

1、知道如何寻找登录接口
2、知道如何确定Js的位置
3、知道如何观察js的执行过程
4、知道js的执行方法

 

 

2、Js逆向分析 确定网站的登录接口?

a、登录的form表单中action对应的url地址
b、通过抓包分析发现,在这个url地址和请求体中均有参数,切换到手机版,参数的个数多少,分析JS

 

 

3、Js逆向分析 确定JS的位置?

*、通过点击按钮,然后点击 Event Listener部分网站可以找到绑定的事件,对应的,只需要点击即可跳转到js的位置
*、部分网站的按钮可能并没有绑定JS时间监听,那么这个时候可以通过搜索请求中的关键字来找到JS的位置,比如Livecell

 

 

4、Js逆向分析 观察js的执行过程?

1、找到js的位置之后,我们可以通过观察js的位置,找到js具体在如何执行,后续我们可以通过python程序模拟js执行,或者使用类似js2py直接把js代码转化为python程序去执行。
2、添加断点之后继续点击登录,每次程序在断点位置都会停止,通过如果该行有此变量产生,都会把变量结果展示在scoope中

 

 

5、Js逆向分析 执行js:观察代码中都需要那些参数?

a、我们要登录需要对密码进行加密和获取rkey字段的值
b、rkey字段的值我们直接发送请求rkey请求就可以获得
c、密码是先反转然后RSA进行加密,js代码很复杂,我们希望能通过在python中执行js来实现

 

 

6、Js逆向分析 的具体实现思路?

使用session对象发送rKey获取登录需要信息,那么首先要获取session对象,在设置session的请求头信息,然后通过这个session对象来发请求
session = requests.session()
data = {
    'phoneNum': '131....',
    'password': password,
    'c1':0,
    'rKey':n['rkey']
}

# print(session.headers)
response = session.post("http://activity.renren.com/livecell/ajax/clog", data=data)

 

 

 

二、Js逆向分析

转自或参考:

 

大概流程:(1).知道如何寻找登录接口 (2)知道如何确定Js的位置 (3)知道如何观察js的执行过程 (4)知道js的执行方法

1.确定网站的登录接口

······(1)登录的form表单中action对应的url地址

······ (2)通过抓包分析发现,在这个url地址和请求体中均有参数,切换到手机版,参数的个数多少,分析JS

2,确定JS的位置

······ (1)通过点击按钮,然后点击 Event Listener部分网站可以找到绑定的事件,对应的,只需要点击即可跳转到js的位置

····· (2)部分网站的按钮可能并没有绑定JS时间监听,那么这个时候可以通过搜索请求中的关键字来找到JS的位置,比如Livecell

3.观察js的执行过程

····· (1)找到js的位置之后,我们可以通过观察js的位置,找到js具体在如何执行,后续我们可以通过python程序模拟js执行,或者使用类似js2py直接把js代码转化为python程序去执行。

····· (2)添加断点之后继续点击登录,每次程序在断点位置都会停止,通过如果该行有此变量产生,都会把变量结果展示在scoope中

4.执行js

观察代码中都需要那些参数

(1)我们要登录需要对密码进行加密和获取rkey字段的值

(2)rkey字段的值我们直接发送请求rkey请求就可以获得

(3)密码是先反转然后RSA进行加密,js代码很复杂,我们希望能通过在python中执行js来实现

import requests import json import js2py 

获取session对象


session = requests.session()

headers = {

    "User-Agent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Mobile Safari/537.36",

    "X-Requested-With": "XMLHttpRequest",

    "Content-Type":"application/x-www-form-urlencoded"

}

设置session的请求头信息


session.headers = headers response = session.get("http://activity.renren.com/livecell/rKey") # print(response.content.decode()) n = json.loads(response.content)['data'] # - 2.根据获取信息对密码进行加密 # - 准备用户名和密码 phoneNum = "131..." password = "****" # - 使用js2py生成js的执行环境:context context = js2py.EvalJs() # - 拷贝使用到js文件的内容到本项目中 # - 读取js文件的内容,使用context来执行它们 with open("BigInt.js", 'r', encoding='utf8') as f: context.execute(f.read()) with open("RSA.js", 'r', encoding='utf8') as f: context.execute(f.read()) with open("Barrett.js", 'r', encoding='utf8') as f: context.execute(f.read()) # - 向context环境中添加需要数据 context.t = {'password': password} context.n = n # - 执行加密密码的js字符 js = ''' t.password = t.password.split("").reverse().join(""), setMaxDigits(130); var o = new RSAKeyPair(n.e,"",n.n) , r = encryptedString(o, t.password); ''' context.execute(js) # - 通过context获取加密后密码信息 # print(context.r) password = context.r # - 3.使用session发送登录请求 # - URL: http://activity.renren.com/livecell/ajax/clog # - 请求方法: POST # - 数据: # - phoneNum: 15565280933 # - password: (加密后生产的) # - c1: 0 # - rKey: rkey请求获取的 data = { 'phoneNum': '131....', 'password': password, 'c1':0, 'rKey':n['rkey'] } # print(session.headers) response = session.post("http://activity.renren.com/livecell/ajax/clog", data=data) print(response.content.decode()) # 访问登录的资源 response = session.get("http://activity.renren.com/home#profile") print(response.content.decode())

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM