当前位置:网站首页>秒拍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文件进行解密:
部分代码公开:
边栏推荐
猜你喜欢
随机推荐
A first look at the code to start, Go lang1.18 introductory refining tutorial, from Bai Ding to Hongru, the first time to run the golang program EP01
教你如何免费获取0.1米高精度卫星地图
SQL Server2000 各个版本之间的区别
Teach you how to get a 0.1-meter high-precision satellite map for free
Redis基础
测试计划包括哪些内容?目的和意义是什么?
本体开发日记05-努力理解SWRL(中)
centos7 mysql异常ERROR 2002 (HY000)分析解决
全网最全的软件测试基础知识整理(新手入门必学)
JMeter参数化4种实现方式
初窥门径代码起手,Go lang1.18入门精炼教程,由白丁入鸿儒,首次运行golang程序EP01
Django实现对数据库数据增删改查(一)
MySQL indexes
【百日行动】炎炎夏日安全不松懈 消防培训“加满”安全知识“油”
本体开发日记02-sparql简单查询
如何用数组实现环形队列
谷歌地图时代结束,怎么看高清卫星影像地图?
C语言单、双引号的区别
What are the basic concepts of performance testing?What knowledge do you need to master to perform performance testing?
Consolidation of Questionnaire Questions and Answers