app逆向 || x动

news2025/1/14 0:52:40

声明

本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负!

如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦!
本文适用于对安卓开发和Java有了解的同学!
文中涉及的app均放在网盘中,有需自取!

前言

前几天写了一篇关于某动网的js逆向文章,然后又发现了它的app竟然也有加密。那么今天就将这个app分析一下。
其实网页端和app端的加密非常类似(一模一样),区别在于实现的语言的不同。

附js文章链接:js逆向-某动网演出数据获取
目标app:x动
目标参数:data、sign

工具介绍

  • frida
  • charles
  • nexus 6p
  • postern

抓包分析

这个app对于抓包会有一些检测,对于挂了代理软件都会有检测。
使用fiddler甚至都抓不到包。
对于这个问题怎么解决呢,凡事不会就去百度,一般来说都可以找到解决方案。

这里我使用的是一个hook vpn的脚本,依然是依赖于frida。

function hook_vpn(){
    Java.perform(function (){
        var String = Java.use("java.lang.String");
        var NetworkInterface = Java.use("java.net.NetworkInterface");
        NetworkInterface.getName.implementation = function (){
            var result = this.getName();
            console.log("find getName:", result);
            if (result && (result.indexOf("ppp0") > -1 || result.indexOf("tun0") > -1)){
                result = String.$new("rmnet_data0");
            }
            return result;
        }

        var ConnectivityManager = Java.use("android.net.ConnectivityManager");
        ConnectivityManager.getNetworkCapabilities.implementation = function (arg){
            var result = this.getNetworkCapabilities(arg);
            console.log("find getNetworkCapabilities:", result);
            return null;
        }
        Java.use("android.net.NetworkCapabilities").hasTransport.implementation = function(v){
            console.log(v)
            var res = this.hasTransport(v)
            console.log("res hasTransport ==> ", res)
            return false;
        }

    })
}

setImmediate(hook_vpn);

如果小伙伴们有更好的过代理检测脚本可以在下方评论或者私信分享给笔者哦。

启动脚本后,打开charles后发现就可以抓到包了。
在这里插入图片描述
在这里插入图片描述
抓包数据和真机数据完全是对的上的,这里的抓包就没有任何问题。

做爬虫的同学都知道,要构建一个爬虫需要一个完整的request。看一下post请求中提交的data。
在这里插入图片描述
在这里有三个可疑的值,经过反复抓包发现aru是一个定值,sign和data在不断的变换,可以确定这两个地方是进行了加密。

脱壳

完成上述分析后,就要开始编写frida的hook脚本了。
打开后会有一个坑,看不到apk的源码。
在这里插入图片描述

这是为什么呢?是因为apk做了防护,加了一层壳。
这里的加壳很简单是一个360的,使用一下脚本或工具就可以脱掉。

介绍一个查壳工具,只需要将apk拖进去就可以看出是什么加固。

在这里插入图片描述
所以在分析源码之前最好是查一下有没有加固。

寻找加密参数

完成脱壳后将所以的dex文件放进jadx中,搜索关键字,找到如下图:
在这里插入图片描述
进入之后就定位到了sign、data的加密处。
在这里插入图片描述

Frida hook 脚本编写

直接看函数f.v.a.j.l.d(x, jSONString),因为sign的参数值里也有相同的JSONS字符串。

运行脚本后关于x和JSONString就被输出了.

jSONString = {"action":"/app/activity/search","deviceName":"Nexus 6P","qtime":1673682226239,"query":{"activityType":"34","cityId":"10","cityType":1,"isHome":1,"pageNo":7,"pageSize":脱敏,脱敏,脱敏,脱敏,脱敏,,"sysVersion":"8.1.0"}
x = FztG254r4uaUo7Ih

hook脚本:

# -*- coding:utf-8 -*-
import frida, sys

hook_data = """
Java.perform(function () {
    send("start hook!")
    var l = Java.use('f.v.a.j.l')
    l.d.implementation = function (str1,jSONString) {
        console.log("str1---->:",str1)
        console.log("jSONString---->:",jSONString)
        console.log("data---->:",this.d(str1,jSONString))
        return this.d(str1,str2);
    };
    
});
"""


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


process = frida.get_usb_device().attach('com.showstartfans.activity')
script = process.create_script(hook_data)
script.on('message', on_message)
script.load()
sys.stdin.read()

data值加密,所以继续追踪源码观察加密,之后就可以使用rpc或者python去还原。
在这里插入图片描述
这也太熟悉了,AES加密,和网页端一模一样。
d函数完成了加密,传入的第一个参数就是x,也就是AES的密钥。

那不用说sign肯定是md5,直接看源码。
在这里插入图片描述
知道了加密参数和加密方法,使用python直接还原就可以了。
剩下的就是都会的事情了。

最后

总结一下该apk使用到的一些方法:

  • 抓包检测
  • apk脱壳
  • 加密还原

链接:代码

apk获取
链接:https://pan.baidu.com/s/1v09qWEP5qnaxfqeYAmBTGw
提取码:8888

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/162720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运行Dlinknet提取道路和水体(总结帖)——全流程步骤总结

之前写了很多制作样本然后跑代码的帖子 但由于我也是第一次跑 记录一下自己摸索的过程 因此导致 每一篇的内容很碎 每次我想自己去回顾一下的时候 都有太多摸索尝试的过程了 因此我在这里总结一下我摸索的整个过程的详细步骤 大家可以先看这篇再去我的对应博客里面看具体的细节…

【C++逆向】虚表(Virtual table)

什么是多态 定义一个虚基类ISpeaker class ISpeaker{ protected:size_t b; public:ISpeaker( size_t _v ): b(_v) {}virtual void speak() 0; };有两个子类,都实现了虚函数speak(): class Dog : public ISpeaker { public:Dog(): ISpeaker(0){}//vir…

Gin操作MySQLd的增加修改删除的Restful风格的API

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文 目录 一、gin是什么? 二、gin- mysql 1.gin-mysql 2.CRUD的gin的mysql 通过jsontool

Win10忘记开机密码无法进入桌面怎么办?

Win10忘记开机密码无法进入桌面怎么办?有用户设置了电脑的开机密码之后,因为一段时间没有去开机使用电脑了,导致将开机的密码忘记了。那么这个情况下我们怎么去进行电脑的开机呢?接下来我们来看看详细的解决方法分享吧。 解决方法…

SpringCore RCE 1day漏洞复现(NSSCTF Spring Core RCE)

漏洞描述: 作为目前全球最受欢迎的Java轻量级开源框架,Spring允许开发人员专注于业务逻辑,简化Java企业级应用的开发周期。 但在Spring框架的JDK9版本(及以上版本)中,远程攻击者可在满足特定条件的基础上,通过框架的…

【学习笔记】【Pytorch】一、卷积层

【学习笔记】【Pytorch】一、卷积层学习地址主要内容一、卷积操作示例二、Tensor(张量)是什么?三、functional.conv2d函数的使用1.使用说明2.代码实现四、torch.Tensor与torch.tensor区别五、nn.Conv2d类的使用1.使用说明2.代码实现六、卷积公…

基于servlet+mysql+jsp实现鞋子商城系统

基于servletmysqljsp实现鞋子商城系统一、系统介绍1、系统主要功能:2、环境配置二、功能展示1.主页(客户)2.用户登陆、个人中心(客户)3.商品分类(客户)3.我的购物车(客户)4.我的订单(客户)5.订单…

微信小程序页面导航、编程式导航、页面事件、生命周期和WXS脚本

文章目录页面导航1.导航到tarBar页面2.导航到非 tabBar 页面3.后退导航编程式导航1.导航到tabBar页面2.导航到非 tabBar 页面3.后退导航导航传参1. 声明式导航传参2. 编程式导航传参3. 在 onLoad 中接收导航参数页面事件下拉刷新上拉触底数据请求获取中添加loading效果,请求完毕…

一本修炼秘籍,带你打穿文件上传的21层妖塔(1)

目录 前言 引子 第一层:JS限制——你在玩一种很新的防御 第二层:Content-Type限制——我好像在哪见过你 第三层:黑名单绕过——让我康康! 前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、…

Jetpack Compose中的副作用Api

Compose的生命周期 每个Composable函数最终会对应LayoutNode节点树中的一个LayoutNode节点,可简单的为其定义生命周期: onActive: 进入重组作用域, Composable对应的LayoutNode节点被挂接到节点树上onUpdate:触发重组&#xff0c…

Dolphin scheduler在Windows环境下的部署与开发

这里写自定义目录标题环境介绍WSL2工程下载修改POM文件java版本mysql驱动修改mysql密码IDEA配置JDK8模块导出运行配置环境介绍 MySql:8.0.31 JDK:17 需要安装windows的wsl2 WSL2 首先安装好WSL2,并且通过 sudo apt-get install openjdk-17…

类模板与模板类

#include <stdio.h>#include <iostream>using namespace std;//注意必须将类的声明和定义写在同一个.h文件中 未来把它包含进来//写上关键字template 和模板参数列表template<typename T, int KSize, int KVal>class MyArray{public:MyArray();//当在类内定义…

正点原子STM32(基于HAL库)2

目录STM32 基础知识入门寄存器基础知识STM32F103 系统架构Cortex M3 内核& 芯片STM32 系统架构存储器映射寄存器映射新建寄存器版本MDK 工程STM32 基础知识入门 寄存器基础知识 寄存器&#xff08;Register&#xff09;是单片机内部一种特殊的内存&#xff0c;它可以实现…

【自学Docker】Docker HelloWorld

Docker HelloWorld Docker服务 查看Docker服务状态 使用 systemctl status docker 命令查看 Docker 服务的状态。 haicoder(www.haicoder.net)# systemctl status docker我们使用 systemctl status docker 命令查看 Docker 服务的状态&#xff0c;显示结果如下图所示&#…

HotPDF Delphi PDF编译器形成PDF文档

HotPDF Delphi PDF编译器形成PDF文档 HotPDF Delphi PDF编译器支持通过内部和外部链接完全形成PDF文档。计算机还完全支持Unicode。此外&#xff0c;在您的产品和软件中使用此计算机的最新功能&#xff0c;您可以指定加密、打印和编辑PDF文档的能力。当您加密PDF文档时&#xf…

Markdown总结

为什么要使用Markdowm 什么是Markdown?为什么需要使用Markdown&#xff1f; Markdown 是一种轻量级标记语言&#xff0c;它允许人们使用易读易写的纯文本格式编写文档。 Markdown 语言在 2004 由约翰格鲁伯&#xff08;英语&#xff1a;John Gruber&#xff09;创建。 Markdo…

openEuler 社区 2022 年 12 月运作报告

社区活跃度在社区所有开发者和用户的共同参与下&#xff0c;openEuler的3年持续迸发活力&#xff01;从0到超过1.27万名开发者&#xff0c;从0到超过100万的社区用户&#xff0c;从0到超过750家企业伙伴加入社区……截至目前&#xff0c;在大家的持续贡献下&#xff0c;openEul…

GemBox.Bundle 47.0.1012 VS Spire.Office Platinum 8.1.1

GemBox.Bundle 是一个 .NET 组件包&#xff0c;使您能够简单高效地处理办公文件&#xff08;电子表格、文档、演示文稿和电子邮件&#xff09;。 使用我们的组件&#xff0c;您可以以易于使用的形式快速获得可靠的结果。只需要 .NET&#xff0c;因此您可以轻松部署您的应用程序…

收官!OceanBase第五届技术征文大赛获奖名单公布!

OceanBase 一直在思考&#xff0c;什么样的数据库对用户而言更易用&#xff1f; 更易用&#xff0c;除了功能完善、性能优秀、运行稳定的数据库系统&#xff0c;丰富多样的生态工具也必不可少。 作为一款完全自主研发的原生分布式数据库&#xff0c;OceanBase 的生态工具经历…

基于Java SSM springboot+VUE+redis实现的前后端分类版网上商城项目

基于Java SSM springbootVUEredis实现的前后端分类版网上商城项目 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言…