目标:分析请求参数中的as、cp、mas的生=生成方式并成功rpc调用。
fiddler抓包并分别对再次请求以及翻页请求的请求url进行文本对比发现上述三个参数为目标参数
用jadx打开apk,用搜索大法进行搜索,单独搜索mas会出现很多结果,小技巧:用"mas(双引和单引是不同的)或者&mas进搜索,缩小搜索范围,得出可疑代码位置
组装起来改成rpc格式用rpc调用就完事了
function getBytes(s) {
var bytes = [];
for (var i = 0; i < s.length; i++) {
bytes.push(s.charCodeAt(i));
}
return bytes;
};
var UserInfo = Java.use('com.ss.android.common.applog.UserInfo')
var i = timestamp
var decode = requestsurl
var my_devices_info = [my_devices_info]
var c2 = deviceid
var str = UserInfo.getUserInfo(i, decode, my_devices_info, c2)
var i2 = str.length()
var i2 = i2/2
var substring = str.substring(0, i2)
var as = substring
var cp = str.substring(i2)
var StcSDKFactory = Java.use('com.ss.sys.ces.out.StcSDKFactory');
var GlobalContext = Java.use('com.ss.android.common.applog.GlobalContext');
var AwemeApplication = Java.use('com.ss.android.ugc.aweme.app.AwemeApplication');
var sdk = StcSDKFactory.getSDK(GlobalContext.getContext(),AwemeApplication.p().m());
var sdk_encode = sdk.encode(getBytes(substring))
var EagleEye = Java.use('com.ss.android.common.applog.EagleEye')
var mas = EagleEye.byteArrayToHexStr(sdk_encode)
java的一些方法的写法
getBytes()
function getBytes(s) {
var bytes = [];
for (var i = 0; i < s.length; i++) {
bytes.push(s.charCodeAt(i));
}
return bytes;
}
java中8>>1是什么意思
- << 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方
- '>>右移一位相当于除2,右移n位相当于除以2的n次方
- '>>>对于正数来说和带符号右移相同,对于负数来说不同