”人人直播“登录协议分析

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()

  

 

 

posted @ 2020-05-31 18:31  ..HelloWorld  阅读(428)  评论(0)    收藏  举报