”人人直播“登录协议分析
1、抓包(抓两次 最好抓两次 方便比较)

2、分析它的一些字段

这个password字段尤其要重点关注 (我密码相同 但两次抓包的结果居然不相同)
3、我们打开ddms方法刨析一下
搜索“onclick”

4.打开jadx-gui找到onclick方法 根据方法刨析 会跑aCV()方法 所以我们很快就能找到具体位置

5.aCv()我们点进去看一下

6、点进去 差不多 字段都在这块了

7、我们来好好的分析一下这些字段
“rkey”

我们返回去看 RSA_login这个方法的str4

点开deY=RSA.bNv() 这里面的加密的逻辑就非常清晰明了

“V” "format"都是常数

“user”

user是我们方法的第一个参数

这里面也没对他进行操作
user=第一个编辑框输入的值
“uniq_id”


他是我们的一个设备id
“password”

我们来到这个方法调用处 这么多password 很明显 它会跑RSA.P()这个方法

# -*- coding: utf-8 -*- """ JAVA层HOOK """ import frida, sys jscode =""" Java.perform(function () { var utils = Java.use('com.renren.mobile.utils.RSA'); utils.P.implementation = function (a, b,c) { console.log("Hook Start..."); send("人人直播三个参数"); send(arguments[0]); send(arguments[1]); send(arguments[2]); send("------返回值--------"); var password = this.P(arguments[0] ,arguments[1],arguments[2]); send("返回值为:"+password); } }); """ def message(message, data): if message["type"] == 'send': print("[*] {0}".format(message['payload'])) else: print(message) process = frida.get_remote_device().attach('com.renren.mobile.android') script= process.create_script(jscode) script.on("message", message) script.load() sys.stdin.read()
“sig”

sig字段 调用了一个方法 该方法的参数为m_buildRequestBundle 正好是储存这些参数的一个对象

他这个sign字段 操作也是比较清晰的 下面我们来hook一下
# -*- coding: utf-8 -*- """ This is a temporary script file. JAVA层HOOK """ import frida, sys jscode =""" Java.perform(function () { var utils = Java.use('com.renren.mobile.android.service.ServiceProvider'); utils.getSigForLogin.implementation = function (a) { console.log("Hook Start..."); send("参数为:"+arguments[0]); send("------返回值--------"); var sign = this.getSigForLogin(arguments[0]); send("返回值为:"+sign); } }); """ def message(message, data): if message["type"] == 'send': print("[*] {0}".format(message['payload'])) else: print(message) process = frida.get_remote_device().attach('com.renren.mobile.android') script= process.create_script(jscode) script.on("message", message) script.load() sys.stdin.read()
我们再来hook一下getsig方法参数和返回值
# -*- coding: utf-8 -*- """ This is a temporary script file. JAVA层HOOK """ import frida, sys jscode =""" Java.perform(function () { var utils = Java.use('com.renren.mobile.android.service.ServiceProvider'); utils.getSig.implementation = function (a,b) { console.log("Hook Start..."); send("参数为:"+arguments[0]); send("参数为:"+arguments[1]); send("------返回值--------"); var sign = this.getSig(arguments[0],arguments[1]); send("返回值为:"+sign); } }); """ def message(message, data): if message["type"] == 'send': print("[*] {0}".format(message['payload'])) else: print(message) process = frida.get_remote_device().attach('com.renren.mobile.android') script= process.create_script(jscode) script.on("message", message) script.load() sys.stdin.read()