”人人直播“登录协议分析
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()


浙公网安备 33010602011771号