首页 > 其他分享 >猿人学app2022-第一题

猿人学app2022-第一题

时间:2023-10-07 16:34:54浏览次数:40  
标签:function Java 猿人 第一 app2022 sign print message data

抓包需要hook sslpinning

// hook_ssl_pinning
function logger(message) {
  console.log(message);
  Java.perform(function () {
    var Log = Java.use("android.util.Log");
    Log.v("ssl_pinnig_bypass", message);
  });
}

Java.perform(function () {
  try {
    const x509TrustManager = Java.use("javax.net.ssl.X509TrustManager");
    const sSLContext = Java.use("javax.net.ssl.SSLContext");
    const TrustManager = Java.registerClass({
      implements: [x509TrustManager],
      methods: {
        checkClientTrusted(chain, authType) {
        },
        checkServerTrusted(chain, authType) {
        },
        getAcceptedIssuers() {
          return [];
        },
      },
      name: "cc.timer9527",
    });
    const TrustManagers = [TrustManager.$new()];
    const SSLContextInit = sSLContext.init.overload(
      "[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom");
    SSLContextInit.implementation = function (keyManager, trustManager, secureRandom) {
      SSLContextInit.call(this, keyManager, TrustManagers, secureRandom);
    };
    logger("[*][+] Hooked SSLContextInit")
  } catch (e) {
    logger("[*][-] Failed to hook SSLContextInit")
  }
})

请求app1路径可以获取数字的返回值,提交参数中的sign是需要计算的,需要拿到每次请求的sign值

jadx反编译,并搜索app1,找到相关路由的定义

右键“查找用例”,发现有两处调用了该函数

选择第一个,点进去,发现sign参数的生成函数,跟进去

 

sign方法需要一个byte数组作为参数

 

最后返回一个String类型字符串,hook这个返回值,然后拿这个返回值去请求就可以了

 frida rpc调用脚本如下。tips:由于js没有byte类型,传入sign方法的参数需要转化一下(stringToBytes函数)

//check1.js
function hookSign(str){
    let result
    let test = 0
    Java.perform(function (){
        let targetClassName = Java.use("com.yuanrenxue.match2022.security.Sign")
        let targetClassNameObj = targetClassName.$new()  
        result = targetClassNameObj.sign(stringToBytes(str))
    })
    return result
}

function stringToBytes(str) {
    var data = Java.use("java.lang.String").$new(str);
    return data.getBytes();
}

rpc.exports = {
    hooksign: hookSign
}
import frida, sys
import time
import requests


def on_message(message, data):
    if message['type'] == 'send':
        print("[*] {0}".format(message['payload']))
    else:
        print('msg: ', message)
        print('test data2', data)


device = frida.get_usb_device()
# attach
session = device.attach("猿人学2022")

with open('check1.js', encoding='utf-8') as f:
    jscode = f.read()

script = session.create_script(jscode)
script.on('message', on_message)
script.load()

url = "https://appmatch.yuanrenxue.cn/app1"

headers = {
    "Accept-Language": "zh-CN,zh;q=0.8",
    "User-Agent": "Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; Nexus 6P Build/OPM1.171019.011) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
    "Cache-Control": "no-cache"
}

sum = 0
for i in range(1, 101):
    t = str(int(time.time() * 1000))
    payload = "page=" + str(i) + t
    result = script.exports_sync.hooksign(payload)
    print("sign>> ", result)
    data = {
        "page": str(i),
        "sign": result,
        "t": t,
        "token": "IKLostJxwdM%20ktruxVoZSAZsS6hiThDIkGizuHGvfScO2jmu4OaGArRxg6lZdAUl"
    }
    resp = requests.post(url=url, data=data, headers=headers)
    print(resp.json())
    for x in resp.json()["data"]:
        sum += int(x['value'].strip())
        print("tmp >>: ", sum)

print("sum is >>: ", sum)
sys.stdin.read()

 

 

 

 

 

 

标签:function,Java,猿人,第一,app2022,sign,print,message,data
From: https://www.cnblogs.com/planBinary/p/17746615.html

相关文章

  • 第一次git上传的完整流程
    第一次git上传的完整流程使用git简单命令上传代码push到远程仓库+简单介绍了一个.git文件结构。代码上传到gitee和github流程一样的,不过你上传到github可能网不行失败,所以我们使用gitee*前置说明你必须有git工具并且配置了环境变量。配置环境变量使用git会更方便。测......
  • 《流畅的Python》 读书笔记 231007(第二章第一部分)
    第2章数据结构ABC语言是Python的爸爸~很多点子在现在看来都很有Python风格:序列的泛型操作、内置的元组和映射类型、用缩进来架构的源码、无需变量声明的强类型不管是哪种数据结构,字符串、列表、字节序列、数组、XML元素,抑或是数据库查询结果,它们都共用一套丰富的操作:迭......
  • 2023-2024-1 20231409佟伟铭 《计算机基础与程序设计》第一周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2023-2024-1计算机基础与程序设计第一周作业这个作业的目标<计算机基础与程序设计中的问题>作业正文https://www.cnblogs.com/twma......
  • 2023-2024-1学号20231407陈原《计算机基础与程序设计》第一周学习总结
    这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求是什么2023-2024-1计算机基础与程序设计第一周作业这个作业的目的是什么简单浏览《计算机概论》,提出疑问,并尝试解决问题    作业正文 https://www.cnblogs.com/CCCY12345/p/17744827.ht......
  • 2023-2024-1 20231428《计算机基础与程序设计》第一周学习总结
           这个作业属于哪个课程2023-2024-1-计算机基础与程序设计            作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01          这个作业的目标快速阅读教材,初步了解所学内容 ......
  • 这是我在51CTO博客的第一篇博文
    1.狮子import turtle as tdef hair():  # 画头发    t.penup()    t.goto(-50, 150)    t.pendown()    t.fillcolor('#a2774d')    t.begin_fill()    for j in range(10):  # 重复执行10次        t.setheading(60 - (j * 36)......
  • 这是我在51CTO博客的第一篇博文
    1.狮子import turtle as tdef hair():  # 画头发    t.penup()    t.goto(-50, 150)    t.pendown()    t.fillcolor('#a2774d')    t.begin_fill()    for j in range(10):  # 重复执行10次        t.setheading(60 - (j * 36)......
  • 第一章 计算机系统概述
    1.2.2计算机硬件系统由运算器,储存器,控制器,输入设备,输出设备5大部件组成,主观上来说最初的CPU=运算器+控制器先详细介绍一下储存器:储存器主要分为主储存器和辅助储存器,CPU能够直接访问的是主储存器。主储存器的工作方式是按存储单元的地址进行存取,称为按地址存取方式。......
  • 2023-2024-1 20231415吴昕洋 《计算机基础与程序设计》第一周学习总结
    这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求是什么2023-2024-1-计算机基础与程序设计第一周作业这个作业的目标简单浏览《计算机概论》,提出疑问,并尝试解决问题作业正文https://i.cnblogs.com/posts/edit教材内容·学习总结  ......
  • servlet在web项目的基本创建(我的第一篇博客,用来试试水的)
    下面这个是要写在WEB-INf的web.xml里面用来注册你要用的servlet类的<servlet>//这个用来注册servlet标签     <servlet-name>TestServlet</servlet-name>//你要用的servlet类的名字     <servlet-class>cn.com.TestServlet</servlet-class>//完整的类名(其实......