Frida-RPC初体验(第二篇)

我写代码一直秉持追求的是效率和代码所能产出的价值。所以有些时候有些代码项目不值得去细扣还原,业务做的久了你就知道哪些项目是一次性项目,当你哼哧哼哧的APP逆向从Java层跑到so层,然后再用python还原出来,嗯……     

从技术角度来说确实挺屌的,但是和你一起对接合作的运营和商务,他们因为等着要东西,只觉得你的速度好慢你好菜。

先不说别的了,就说RPC吧,什么是Frida-RPC,百度了一下好枯燥我不复制了,你们想知道自己百度一下吧,我的博客里不允许出现这么枯燥无味的东西。

我个人的理解是,APP本身就是一个应用程序,说白了他就是一坨代码,他自身也会执行他的那些代码,我们用Frida调用他的加密代码,然后再用RPC技术把结果返回给我们。就这么个流程

因为这两个模块我总是用到,所以我想把这两个模块的代码贴到这里,也算是记录一下。

# 打印参数或者说加密结果

import frida    # 15.1.10
import sys

def on_message(message,data):
    """
    js中执行send函数后要回调函数
    :param message:
    :param data:
    :return:
    """
    print(message)

'''
模式一:spawn模式,Frida会自行启动并注入目标APP,Hook的时机
还未实操过
'''
# device = frida.get_remote_device()
# pid = device.spawn([''])   #包名i,或者说是进程名吧
# device.resume(pid)
# time.sleep(1)
# session = device.attach(pid)

'''
模式二:attach 
'''
session = frida.get_remote_device().attach('APP名')  #PID也行

with open("JavaScript/1.js") as f:
    script = session.create_script(f.read())

script.on('message',on_message)
script.load()

sys.stdin.read()
// 1.js
Java.perform(function (){
    console.log("i am here")
    var asd = Java.use('com.jx885.library.http.CommAction')   //包名.类名
        asd.getSmscode.implementation =                        //方法名
        function (i,str1,str2) {
            console.log(i,str1,str2)
            return this.getSmscode (i,str1,str2)
    }
})

如果是已经找到了加密入口,用RPC调用的话,就和上面代码有所不同,不过其中的底层原理还是一样的,代码我再贴一下。以防自己以后忘了,哈哈哈

import frida,sys

def on_message(message,data):
    """
    js中执行send函数后要回调函数
    :param message:
    :param data:
    :return:
    """
    print(message)

'''
模式二:attach 
'''

session = frida.get_remote_device().attach('APP名')

with open('JavaScript/dome3_.js') as f:
    script = session.create_script(f.read())

script.on('message',on_message)
script.load()
# sys.stdin.read()

# {"sign":"E71B5C3EF77033187A0BC7BB405053BE",
# "currTime":"20220708115952",
# "phone":"************",
# "type":"1"}
currTime = '20220708115952'
phone = '13252253402'
type = '1'
sign = script.exports.getsign(f'{currTime}{type}wocaonima{phone}')
print(sign)
function sign(str1) {
    var result = '';
    Java.perform(function () {
    result = Java.use('com.jx885.library.http.network.HttpUtils').getStringMD5toUpperCase(str1);

})
    console.log(">>>",result)
    return result
}

rpc.exports = {
    getsign:sign
}

=============================补充========================

Java.choose("路径.类名", {
    onMatch: function (instance) {
        console.log(instance.成员变量.value)
    },
    onComplete: function () { }
});

==========================补充2==============================

因为我用的是模拟器,启动Frida的时候需要一些额外步骤,我就都写下来吧。

#逍遥模拟器进入adb
'adb connect 127.0.0.1:21513'

'adb forward tcp:27042 tcp:27042'
'adb forward tcp:27043 tcp:27043'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值