猿人学APP逆向第一题

2023-10-31

一、抓包:加密参数sign

二、静态分析

2.1搜索app1直接直接定位到请求位置,查看用例直接定位到加密位置。可以直接看到Sign().sign()方法就是加密函数。

2.2frida-hook加密函数

一目了然,第一题太简单了就不过多分析,直接扣代码,干加密!

三、加密算法生成

3.1算法生成之后需要看着里补一个数组

3.2继续frida-hook看看传的是什么-发现结果是个固定的盐值乱码,我们直接复制出来即可

    let OooO0O0 = Java.use("o00OO.OooO0O0");
    OooO0O0.OooO0O0.implementation = function(j, strArr){
        console.log('OooO0O0 --入参---',j);
        console.log('OooO0O0 --入参---',strArr);
        let ret = this.OooO0O0(j, strArr);
        console.log('OooO0O0 --生成结果' + ret);
        return ret;
    };

四、本地生成结果

java源码


import java.nio.charset.StandardCharsets;
import java.util.ArrayList;


public class Sign {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();

        sb.append("page=");
        sb.append(2);
        long longValue = 1679037321;
        sb.append(longValue);
        System.out.println(sb);
        String cao = new Sign().sign(sb.toString().getBytes(StandardCharsets.UTF_8));
        System.out.println(cao);



    }
    private static final int A = 1732584193;
    private static final int B = -271733879;
    private static final int C = -1732584194;
    private static final int D = 271733878;

    private static int f(int i, int i2, int i3) {
        return ((~i) & i3) | (i2 & i);
    }

    private static int ff(int i, int i2, int i3, int i4, int i5, int i6) {
        return rotateLeft(i + f(i2, i3, i4) + i5, i6);
    }

    private static int g(int i, int i2, int i3) {
        return (i & i3) | (i & i2) | (i2 & i3);
    }

    private static int gg(int i, int i2, int i3, int i4, int i5, int i6) {
        return rotateLeft(i + g(i2, i3, i4) + i5 + 1518565785, i6);
    }

    private static int h(int i, int i2, int i3) {
        return (i ^ i2) ^ i3;
    }

    private static int hh(int i, int i2, int i3, int i4, int i5, int i6) {
        return rotateLeft(i + h(i2, i3, i4) + i5 + 1859775393, i6);
    }

    private ArrayList<Integer> padding(byte[] bArr) {
        long length = bArr.length * 8;
        ArrayList<Integer> arrayList = new ArrayList<>();
        for (byte b : bArr) {
            arrayList.add(Integer.valueOf(b));
        }
        arrayList.add(128);
        while (((arrayList.size() * 8) + 64) % 512 != 0) {
            arrayList.add(0);
        }
        for (int i = 0; i < 8; i++) {
            arrayList.add(Integer.valueOf((int) ((length >>> (i * 8)) & 255)));
        }
        return arrayList;
    }

    private static int rotateLeft(int i, int i2) {
        return (i >>> (32 - i2)) | (i << i2);
    }

    public String sign(byte[] bArr) {
        ArrayList<Integer> padding = padding(bArr);
//        System.out.println();
        int i = A;
        int i2 = B;
        int i3 = C;
        int i4 = D;
        for (int i5 = 0; i5 < padding.size() / 64; i5++) {
            int[] iArr = new int[16];
            for (int i6 = 0; i6 < 16; i6++) {
                int i7 = (i5 * 64) + (i6 * 4);
                iArr[i6] = (padding.get(i7 + 3).intValue() << 24) | padding.get(i7).intValue() | (padding.get(i7 + 1).intValue() << 8) | (padding.get(i7 + 2).intValue() << 16);
            }
            int[] iArr2 = {0, 4, 8, 12};
            int i8 = i;
            int i9 = i2;
            int i10 = i3;
            int i11 = i4;
            int i12 = 0;
            while (i12 < 4) {
                int i13 = iArr2[i12];
                i8 = ff(i8, i9, i10, i11, iArr[i13], 3);
                int ff = ff(i11, i8, i9, i10, iArr[i13 + 1], 7);
                i10 = ff(i10, ff, i8, i9, iArr[i13 + 2], 11);
                i9 = ff(i9, i10, ff, i8, iArr[i13 + 3], 19);
                i12++;
                i11 = ff;
            }
            int[] iArr3 = {0, 1, 2, 3};
            int i14 = i8;
            int i15 = i11;
            for (int i16 = 0; i16 < 4; i16++) {
                int i17 = iArr3[i16];
                i14 = gg(i14, i9, i10, i15, iArr[i17], 3);
                i15 = gg(i15, i14, i9, i10, iArr[i17 + 4], 5);
                i10 = gg(i10, i15, i14, i9, iArr[i17 + 8], 9);
                i9 = gg(i9, i10, i15, i14, iArr[i17 + 12], 13);
            }
            int[] iArr4 = {0, 2, 1, 3};
            int i18 = i14;
            int i19 = 0;
            while (i19 < 4) {
                int i20 = iArr4[i19];
                int hh = hh(i18, i9, i10, i15, iArr[i20], 3);
                i15 = hh(i15, hh, i9, i10, iArr[i20 + 8], 9);
                i10 = hh(i10, i15, hh, i9, iArr[i20 + 4], 11);
                i9 = hh(i9, i10, i15, hh, iArr[i20 + 12], 15);
                i19++;
                i18 = hh;
            }
            i += i18;
            i2 += i9;
            i3 += i10;
            i4 += i15;
        }
        return String.format("%02x%02x%02x%02x", Integer.valueOf(i), Integer.valueOf(i2), Integer.valueOf(i3), Integer.valueOf(i4));
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

猿人学APP逆向第一题 的相关文章

  • 在有限的上下文中运行 JS 代码

    我正在尝试奔跑trusted 隔离 上下文中的 JS 代码 基本上想出了这个方法 function limitedEval src context return function with this return eval src call
  • 如何将值发布到输入框中?

    Intro I would like to get the current time after clicking at click and POST the value into input text box Note 假设包含引导样式表
  • JavaScript 字符串中的脚本标签[重复]

    这个问题在这里已经有答案了 我遇到一个问题 即 JavaScript 中带引号的字符串内有结束脚本标记 并且它正在杀死脚本 我认为这不是预期的行为 可以在这里看到这样的示例 http jsbin com oqepe edit http js
  • jQuery:查找具有特定自定义属性的元素

    我只想找到具有特定自定义属性值的元素 例如 我想找一个div其具有属性data divNumber 6 var number 6 var myDiv data divNumber number 我尝试使用http api jquery co
  • 有没有一种方法可以在没有输入的情况下发送表单值

    假设我有以下表格
  • 从选择 onChange 调用 javascript 函数 [重复]

    这个问题在这里已经有答案了 所以我有一个简单的 HTML 选择框和一个 javascript 警报功能 我希望选择框有一个 onchange 事件来调用 javascript 警报函数 这是我到目前为止所拥有的 HTML div Type
  • 判断字符串是否包含有效的javascript代码

    我正在寻找一个C 返回的函数true如果字符串包含有效的 JavaScript 语法 例如 IsValidJavascript alert hello 会回来true but IsValidJavascript alertXXhelloZ
  • Angular UI 路由器嵌套视图问题

    我在理解 Angular UI Router 嵌套视图的工作原理时遇到了一些问题 我的 stateProvider 看起来像这样 stateProvider state login url login views main template
  • JavaScript 相当于 Python 的参数化 string.format() 函数

    这是 Python 示例 gt gt gt Coordinates latitude longitude format latitude 37 24N longitude 115 81W Coordinates 37 24N 115 81W
  • Apache Thrift Java-Javascript 通信

    我正在编写一个基于 Apache Thrift 的 Java 服务器 它将从 Javascript 客户端接收数据 我已经完成了 Java 服务器 但问题是我可以获得 Javascript 客户端的工作示例 我无法找到一个好的示例 构建文档
  • 如何将一个数组中的所有项目复制到另一个数组中?

    如何将数组的每个元素 其中元素是对象 复制到另一个数组中 以便它们完全独立 我不想更改一个数组中的元素来影响另一个数组 这里的关键是 数组中的条目是对象 并且 您不希望对一个数组中的对象的修改显示在另一个数组中 这意味着我们不仅需要将对象复
  • 使用 float:left 与 display:inline-block 的 jQuery UI 拖放排序比较

    我这里有两个例子 这两个例子之间的唯一区别是 一种使用display inline block 另一种使用float left li doc item 显示 内联块 与 li doc item float left 我的问题是 displa
  • jquery 中的函数返回未定义[重复]

    这个问题在这里已经有答案了 我在 jquery 中调用的函数返回未定义 我检查了该函数 当我对其进行调试时 它返回正确的数据 function addToPlaylist component type add to pl value pl
  • 播放没有音频标签的音频

    是否可以在没有音频标签的情况下仅使用 javascript 播放音频 我通过 tinyMce 编辑器注入脚本 因为我无权访问网站的后端 并且它不支持客户端的音频标签 她只想要当您将鼠标悬停在图像上时发出简单的声音 我已经完成了所有设置 但是
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • 为什么 call 比 apply 快那么多?

    我想知道是否有人知道why call比apply 在 Chrome 中 速度大约快 4 倍 在 Firefox 中快 30 倍 我什至可以制作自定义原型 apply2 在大多数情况下 运行速度是apply 这个想法取自角度 Function
  • 轮播滑动(未滑动)事件上的火灾事件,Bootstrap 3

    Bootstrap 2 似乎可以很好地处理幻灯片事件 请参阅这个问题 https stackoverflow com questions 9651466 how to attach slide slid events to the boot
  • 了解 Document.createElement()

    我在用着GWT及其底层DOM能力 我基本上想要实现的是 Have a div包含一些文本的元素 其中一些文本将被包围span元素 span 元素可相互拖动并提供上下文菜单 New span元素可以由最终用户动态创建 它可能是这样的 在应用程
  • 如何将MathJax公式转换为img

    Mathjax 现在在我的项目中运行良好 但有一个问题 有没有办法将MathJax的公式 纯html和css 转换成img文件 我可以保存 MathJax 可以配置为生成 SVG 看http docs mathjax org en late
  • Graphql 将多个查询合并(组合)为一个?

    我正在尝试使用 JavaScript 将多个 GraphQL 查询合并为一个查询 我正在寻找这样的东西 let query3 mergeQueries query1 query2 我们事先不知道哪些查询将被组合 假设我有这样的查询 输入查询

随机推荐

  • vue使用elment的弹窗里面调用AMap.Autocomplete提示失效

    1 使用AMap Autocomplete提示失效 不是加载失效 是被弹窗的层级挡住了 这里面涉及到用了elment ui 的模态窗组件 我在自定义组件内通过深度选择器也没效果 需要全局引入 amap sug result z index
  • 【C语言】指针的定义、概念和运用

    一 地址和指针的概念 问题 数据在内存中是如何存储和读取的 在程序中定义一个变量后 在对程序编译的时候 系统就会给这个变量分类内存单元 编译系统根据程序中定义的变量类型 分配一定长度的空间 例如 一般整型为2个字节 单精度浮点类型分类4个字
  • Zipper

    http poj org problem id 2192 Description Given three strings you are to determine whether the third string can be formed
  • 阿里开源的这款缓存框架,太强了!

    Java基基 2023 09 09 11 55 发表于上海 这是一个或许对你有用的社群 一对一交流 面试小册 简历优化 求职解惑 欢迎加入 芋道快速开发平台 知识星球 下面是星球提供的部分资料 项目实战 视频 从书中学 往事中 练 互联网高
  • Ubuntu18.04安装WPS后缺失字体

    系统环境 Ubuntu18 04 6 LTS 问题 WPS缺少字体 解决方法 1 下载字体库 wps symbol fonts zip 链接 https pan baidu com s 1HBKWlYKjb6w8 d9yBzbnlw pwd
  • IDEA 开发 vue项目 初学者配置和运行(mac版)

    前言 vue建议用VSCode进行开发 不是必要就不要用Idea啦 VSCode是免费的 直接移步官网直接下载 Tip1 安装插件 打开idea 首页选择configure gt plugins 搜索vue 安装vue js 按照提示操作即
  • vue中mixin的一点理解

    vue中提供了一种混合机制 mixins 用来更高效的实现组件内容的复用 最开始我一度认为这个和组件好像没啥区别 后来发现错了 下面我们来看看mixins和普通情况下引入组件有什么区别 组件在引用之后相当于在父组件内开辟了一块单独的空间 来
  • 实锤研究,ChatGPT能力掉线!

    早在一个多月前 ChatGPT性能下降的传闻便开始在网上流行 不少订阅了Plus版的用户纷纷表示 感觉ChatGPT在经历了几轮更新后开始降智 甚至有时反应速度也会出现问题 而如今 这一传闻终于得到了证实 就在本周 斯坦福大学和加州大学伯克
  • Linux System Calls Hooking Method Summary LD_PRELOAD

    Linux System Calls Hooking Method Summary 相关学习资料 http xiaonieblog com post 121 http hbprotoss github io posts li yong ld
  • 给idea设置注释(超便捷)

    效果 打开设置 File gt settings gt Editor gt File and Code Templates gt Files 点击I 设置头文件 ClassName NAME Author USER create DATE
  • CSS实现流线边框

    使用css实现简单 流线边框 显示上下边框 实例图 html div class box h1 CSS h1 div
  • object对象转数组

    解决方案 let arr for let ip in harddisklist const item Object assign ip harddisklist ip arr push item arr push ip harddiskli
  • C# winform中调用摄像头,拍摄并保存图片!

    首先在NuGet中 下载AForge包 把这些都添加进项目中 1 命名空间和公共属性 using AForge Video DirectShow using System using System Drawing using System
  • 点云中截取自己想要的点云

    文章目录 一 利用python保留自己想要的点云 二 将txt转换为pcd 三 可视化对比 一 利用python保留自己想要的点云 1 python读取pcd点云文件 需要使用python的库open3d读取 在pycharm中打开终端 输
  • educoder算法设计与分析 实验五 回溯法拓展2

    实验五 回溯法拓展2 第1关 非递归实现皇后问题 第2关 递归算法解决皇后问题 第3关 素数圈 第1关 非递归实现皇后问题 题目描述 本关任务 在n n格的棋盘上放置彼此不受攻击的 n 个皇后 按照国际象棋的规则 皇后可以攻击与之处在同一行
  • oracle数据库的 date 和 timestamp 类型区别

    1 date类型存储数据的格式为年月日时分秒 可以精确到秒 timestamp类型存储数据的格式为年月日时分秒 可以精确到纳秒 9位 2 date类型 Date类型的数据可以显示到年月日 也可以显示到年月日时分秒 主要看存储数据的精确度 注
  • 《软件架构设计》一书目录

    第一部分软件架构概念与思想篇 1第1章解析软件架构概念 3 1 1软件架构概念的分类 3 1 1 1组成派 4 1 1 2决策派 5 1 2软件架构概念大观 5 1 2 1Booch Rumbaugh和Jacobson的定义 5 1 2 2
  • 机智的Open3D学习生活(第一集):入坑前的准备工作

    1 Open3D的开源项目地址 https github com isl org Open3D 2 Open3D的官网地址 http www open3d org 3 Open3D的文档地址 http www open3d org docs
  • Jetson 上cmake 带cuda 的程序报错

    报错信息为 找不到CUDA 架构 https blog csdn net qq 19449259 article details 128001426 把cuda 的nvcc 加入环境变量之后 又报了如下错误 报错信息如下 D CUDACC
  • 猿人学APP逆向第一题

    一 抓包 加密参数sign 二 静态分析 2 1搜索app1直接直接定位到请求位置 查看用例直接定位到加密位置 可以直接看到Sign sign 方法就是加密函数 2 2frida hook加密函数 一目了然 第一题太简单了就不过多分析 直接