首页 > 其他分享 >frida注入脚本持久化从frida-net到frida-inject

frida注入脚本持久化从frida-net到frida-inject

时间:2023-08-11 14:56:06浏览次数:55  
标签:body stamp price ctx 化从 inject time frida

采集APP数据的时候发现需要对参数进行加密,为了简单就没有做算法还原,就想尝试用RPC的方式直接调用

最先开始用frida-net,这个方案有个问题是必须用USB连接手机,方案也能跑通

先下载frida-net 

git clone  https://github.com/frida/gumjs-net.git

本机的需要nodejs环境

 

 下载完gumjs-net后 cd到

  cd gumjs-net\examples\http-server

先安装依赖  直接npm install 

 

 

修改http-server下的agent.js文件

const Koa = require('koa');
const Router = require('koa-router');

const app = new Koa();
const router = new Router();
 
router
  .get('/ranges', (ctx, next) => {
    ctx.body = Process.enumerateRanges({
      protection: '---',
      coalesce: true
    });
  })
  .get('/sign_stamp/:price_type', (ctx, next) => {
    // ctx.body = Process.enumerateModules();
    // ctx.body =hook_post();
   // 获取对应的参数
    let price_type = ctx.params.price_type;
    console.log("参数类型->",price_type);
    // 利用frida的语法hook想要的类库或者方法
    Java.perform(function (){
      // 产品列表url
      let tree_url = "xxx"
      // 产检价格url
      let base_url = "xxx";
      // 价格详情
      let price_detail_url = "xxxxx"
      // 要用到的类库
      let tools = Java.use("com.xxx.utils.Tools");
      let time_stamp = Date.now();
      if(price_type == "tree"){
        let result = tools.a(time_stamp,tree_url);
        ctx.body = {"time_stamp": time_stamp, "result": result};
      }else if(price_type == "price_detail"){
        let result = tools.a(time_stamp,price_detail_url);
        ctx.body = {"time_stamp": time_stamp, "result": result};
      }else{
        let result = tools.a(time_stamp,base_url);
        ctx.body = {"time_stamp": time_stamp, "result": result};
      }
    });
  })
  .get('/modules/:name', (ctx, next) => {
    try {
      ctx.body = Process.getModuleByName(ctx.params.name);
    } catch (e) {
      ctx.status = 404;
      ctx.body = e.message;
    }
  })
  .get('/modules/:name/exports', (ctx, next) => {
    ctx.body = Module.enumerateExports(ctx.params.name);
  })
  .get('/modules/:name/imports', (ctx, next) => {
    ctx.body = Module.enumerateImports(ctx.params.name);
  })
  .get('/objc/classes', (ctx, next) => {
    if (ObjC.available) {
      ctx.body = Object.keys(ObjC.classes);
    } else {
      ctx.status = 404;
      ctx.body = 'Objective-C runtime not available in this process';
    }
  })
  .get('/threads', (ctx, next) => {
    ctx.body = Process.enumerateThreads();
  });

app
  .use(router.routes())
  .use(router.allowedMethods())
  .listen(1337);

 

修改完agent.js后执行  npm run build

这样就生成了一个新的 _agent.js

后面就是把 _agent.js文件注入到手机设备上

手机上启动frida-server

注入脚本 frida  -UF  -l _agent.js

查看手机的ip,浏览器访问

http://192.168.11.85:1337/sign_stamp/price_detail

程序里就可以通过这个接口访问APP里的加密逻辑了。

到此也实现了RPC的调用,但是必须USB连接手机,后面发现经常USB线出问题,调动过程中直接断掉连接,于是切换到frida-inject

下载frida-inject, https://github.com/frida/frida/releases 

 

下载对应的版本,push到手机

adb push frida-inject /data/local/tmp

chmod +x frida-inject

将_agent.js文件也push到   /data/local/tmp

nohup finject16.1.3 -f  包名  -s _agent.js &

这样启动后就可以撤掉USB线了,每次采集的时候需要启动一下

 

 

 

 

 

 

 

 

标签:body,stamp,price,ctx,化从,inject,time,frida
From: https://www.cnblogs.com/fly-kaka/p/17622960.html

相关文章

  • Frida注入微信hook入门篇
    首先找到frida官网地址:https://frida.re/安装python环境此处为win系统,需要根据自己环境进行安装如输入python后输出版本号即安装成功C:\Users\ASUS>pythonPython3.11.4(tags/v3.11.4:d2340ef,Jun72023,05:45:37)[MSCv.193464bit(AMD64)]onwin32Type"hel......
  • frida hook md5加密类
    importfrida,sys​defon_message(message,data):  ifmessage['type']=='send':    print("[*]{0}".format(message['payload']))  else:    print(message)​​jscode="""//打印调用堆栈functionprintsta......
  • 利用AspectInjector实现AOP篡改方法返回值
    AspectInjector一个开源的轻量级AOP框架,满足大多数场景。但由于该框架注入异步方法不是很方便,故记录下解决方案。封装通用基类publicabstractclassBaseUniversalWrapperAspect{privatedelegateobjectMethod(object[]args);privatedelegateob......
  • CTFer成长记录——CTF之Web专题·攻防世界-Web_python_template_injection
    一、题目链接https://adworld.xctf.org.cn/challenges/list二、解法步骤  python的flask模板注入的题思路比较固定,Jinja2模板引擎中,{{}}是变量包裹标识符。{{}}并不仅仅可以传递变量,还可以执行一些简单的表达式。1.猜测是否存在注入:直接在url后面加上{{config}}2.获取基本......
  • Vue学习笔记:VCA下使用provide与 inject
    在VCA模式下使用provide和inject与之前文档中VOA模式类似,不同的是需要在使用前进行importimport{provide,inject}from'vue'在此篇文档中,使用一个示例来演示provide与inject的使用功能如下:组件NavbarDetailList部署在根组件App上。在初始页面,显示Navbar与List。List组件......
  • A Novel Noise Injection-based Training Scheme for Better Model Robustness
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!https://arxiv.org/abs/2302.10802......
  • vue中使用provide和inject依赖注入组件之间进行父子组件传值(也适用于嵌套路由)
      父组件中:provide:function(){return{reload:this.reload//父组件中的方法}}子组件中:inject:['reload']使用:this.reload()//也可传入参数......
  • 个人向frida
    fridajava层部分是抄https://zyzling.gitee.io/2020/05/12/Frida%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/还是真机使用吧配置就不讲了我将frida-server放在/data/local/tmp所以adbshellcd/data/local/tmpsu./frida-server常用命令命令行相关获取所有进程名......
  • Vue学习笔记: provide与inject
    在前几篇学习笔记里,接触到了props$eimt$parent$root等方式实现父子组件间的数据传递方式,但是如果遇到层级很多的情况如何处理呢?provide和inject可以帮助我们解决这一问题。 一个父组件相对于其所有的后代组件,会作为依赖提供者。任何后代的组件树,无论层级有多深,都可以注入......
  • jadx安装与配置,hook框架frida
    jadx1.下载jadx反编译工具,安装(解压即用)#下载地址:https://github.com/skylot/jadx/releases2.打开jadx反编译工具:3.抓包与代码定位3.1抓包#1.安装apk#2.打开chaarles,打开app,定位到登录请求3.2.反编译定位代码的位置#抓包#想去反编译代码中的位置......