当前位置:网站首页>秒拍app分析

秒拍app分析

2022-08-09 09:19:00 Codeooo

秒拍APP短视频逆向分析:最新版version ===7.2.98 :
在这里插入图片描述

在这里插入图片描述

抓一个用户主页包看下:
在这里插入图片描述
这个是我抓的科普中国用户的主页,经过分析发现请求头有变化参数。
在这里插入图片描述
rt : 暂时分析微时间戳 pk:固定 ov : 固定
变化:si ,ti, sk, p

开始正式逆向路程========
jadx 查看下入口:在这里插入图片描述
这不啥也找不到,加壳了,不说了 直接脱壳:
网上各种脱壳工具或者脱壳机,自动回填修复dex:
定位加密地方:当前包名: package e.f.a.l.v;
在这里插入图片描述
valueOf: 当前时间 String valueOf = String.valueOf(System.currentTimeMillis());
str2: str2 = deviceBean; 设备数据
str, strArr 传进来的

静态分析后:

        linkedList.add(new h("si", g.getKey()));
        linkedList.add(new h("ti", g.getTrace()));
        linkedList.add(new h("sk", g.getSignature()));

是通过走了一个g方法后:将所有参数回写。
在这里插入图片描述
这是一个 native 同步锁的操作,将参数传进so加密结果返回到 bean 对象里。
在这里插入图片描述
frida hook下查看传入传出:

# -*- coding: utf-8 -*-
# @Author : Codeooo
# @Time : 2022/04/29


import sys
import frida

code = """ Java.perform(function(){ var lk = Java.use("com.dubmic.basic.e"); lk.g.implementation = function(a,b,c,d,e){ //var b1 = String((new Date()).valueOf()); //console.log(typeof b) //console.log(typeof b1) //console.log('参数b1 ' + b1) console.log('参数str ' + a) console.log('参数str1 '+ b) console.log('参数str2 ' + c) //var c1 = '{"dpi":420,"did":"b81b219fcafc7d50e652e0d80ff12985","dname":"QW5kcm9pZA\u003d\u003d","sl":"zh","sv":"7.1.2","os":"android","av":"7.2.87","bv":"6790000","dm":"AOSP on msm8996","dmid":"AB:44:48:4P:3R:19","daid":"89d9abcd39014bfd","network":1,"dw":1440,"dh":2434,"lon":0.0,"lag":0.0,"channel":"xiaomi_market","rt":1639052393988,"carrier":0}' console.log('参数str3 ' + d) console.log('参数str4 ', JSON.stringify(e)) var e2 = [["userId","78143099"],["type","1"],["page","1"],["limit","20"]] console.log('==== ' + this.g(a,b,c,d,e2)) return this.g(a,b,c,d,e2) } var EncryptUtils = Java.use("com.dubmic.basic.bean.HttpEncryptionBean"); var EncryptUtils = Java.use("com.dubmic.basic.bean.HttpEncryptionBean"); EncryptUtils.getKey.implementation = function(){ //console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new())); console.log("Codeoooo " + this.getCode()) console.log("si " + this.getKey()) console.log("ti " + this.getTrace()) console.log("sk " + this.getSignature()) console.log("p " + this.getP()) return this.getKey() } }); """


process = frida.get_remote_device().attach('com.yixia.videoeditor')
script = process.create_script(code)
script.load()
sys.stdin.read()

在这里插入图片描述
再搭建个frida_RPC + flask 一个动态刷用户服务即可调用。
接下来咱们分析下so文件:

在这里插入图片描述
在这里插入图片描述
在 IDA 打开的时候发现报错,该so文件为加密so,需要在内存中dump修复elf文件,这个需要了解elf文件结构。

我们可以用 010Editor 或者 其他medit 去看下so文件到底是什么文件。
参考:https://blog.csdn.net/weixin_38927522/article/details/120164359

在这里插入图片描述
以后面试再问到这么基础的题,可不要不会了啊,多了解下NDK开发及so文件elf结构。

解决思路:
1.可以用IDA中的plugins下修改so插件 内存dump脚本
2.frida dump内存
3.SoFixer_Rel
4.xAnSo
5.大佬手动修复

当然修复的so可能并不一定成功,需要自己去回填指定等。

由于frida 不稳定的因素,这里我编写了一个xposed 主动调用去调用so文件进行解密:
部分代码公开:
在这里插入图片描述
在这里插入图片描述

原网站

版权声明
本文为[Codeooo]所创,转载请带上原文链接,感谢
https://codeooo.blog.csdn.net/article/details/124495601