首页
论坛
课程
招聘
[原创]Uni-App 某游优品
2023-3-9 15:49 4005

[原创]Uni-App 某游优品

2023-3-9 15:49
4005

Uni-App 某游优品

Untitled

  • adb shell uiautomator dump && adb shell cat /sdcard/window_dump.xml && adb shell rm -rf /sdcard/window_dump.xml
  • packageName:uni.UNI790DB23

    Untitled

  • 网页没抓到数据

    Untitled

1. 获取包数据

  • 账号密码是明文,就只有一个 sign 那么接下来的目标就是解密他了

    Untitled

2. 分析思路 sign

  • 长度 32 位,有点像 md5 跑自吐以及 String.getBytes 都没有输出
  • 反编译 Jadx 搜索参数,看起来也不太对劲

    Untitled

    Untitled

  • 其实分析到这里是不是没有头绪了,那么现在来做排除法,我做过 NewStringUTF String.getBytes md5 okhttp3 等函数 hook 都没拿到有用的信息,那么我觉得它就是 JavaScript 里做的处理

  • 但是呢,我们在 DevTools 函数里没抓到一点信息,倒是在 Charles 端口抓到的登陆信息,这里就需要提一下目前我所了解到的 UniApp 分类
    1. 全部由 JavaScript 处理(参数加密、发送请求)
    2. Java 与 JavaScript 做交互,两者都可以实现参数加密及请求发送
  • 既然在 Java 层没找到有用的信息,那么就从 JavaScript 入手,解压 APK 通过 findstr /limsP "\/user\/login" * 搜索关键词

    Untitled

  • 这里简单说一下 assets\apps\***\www\ 目录下的文件是 UniApp 开发主要目录,其核心文件就是 app-service.js 看到这里其实跟我最开始写的 UniApp 里的其中一个案例手法一样 [原创]Uni-App逆向分析

    1. 解包定位 JavaScript 关键位置
    2. 添加输出或其他一系列能动态分析的手段
    3. 重打包签名安装进行抓包调试
  • 可以看到这里并没有 sign 相关的处理,只看到了账号密码。其实这里的 this.$http.post 请求是该 JavaScript 封装的代码,其核心发包函数是 uni.request (OBJECT) | uni-app 官网

    Untitled

    Untitled

    Untitled

  • 那么接下来我们需要拿到他的参数是怎么拼接的,这里可修改代码。这里跟之前的重打包(Uni-App 逆向分析 ),然后拼接到 URL 上相比方便很多,方式2需要打开 ddms 或 Android Studio 或 使用 adb logcat 查看日志输出

    Untitled

  • 修改完后保存代码,回到 APP 根目录,删除自带签名信息,进行签名安装

  • APP 重打包签名:但是我发现不用签名也能安装,而且能正常使用!!!

    1. 命令行签名 ApkSigner
    2. MT 管理器签名
    3. PC 签名工具
      Untitled

      Untitled

  • 重新抓包验证:i.substring(0, i.length - 1) 因为这里有处理所以需要删掉末尾一个字符

  • app_id app_key 这种一般都是固定值,代表 APP 信息的

    Untitled

  • 完美 sign 就还原出来了

算法复现 - Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# -*- coding: utf-8 -*-
# @Time    : 2022-06-20 21:20
# @Author  : KKings
# @File    : main.py
# @Software: PyCharm
 
from hashlib import md5
from loguru import logger
 
import requests
 
class uniapp():
    def __init__(self, phone='16688889999', password='a12345678',
                 app_id='xjgzja72zd3r4195l', app_key='a0xd97v3qteuch6dm'):
        self.app_id = app_id
        self.app_key = app_key
        self.phone = phone
        self.password = password
        self.session = requests.session()
        self.host = 'http://app.changyouch.com/user/login.html'
        self.sign = self.__get_sign(app_id, app_key, password, phone)
        self.__set_headers()
 
    def __get_sign(self, *args):
        data = f'app_id={args[0]}&app_key={args[1]}&password={args[2]}&phone={args[3]}'
        encStr = md5(data.encode()).hexdigest()
        logger.debug(encStr)
        return encStr
 
    def __set_headers(self):
        self.session.headers = {
            'sign': self.sign,
            'token': '',
            'User-Agent': 'Mozilla/5.0 (Linux; Android 10; Pixel Build/QP1A.191005.007.A3; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.61 Mobile Safari/537.36',
        }
 
    def __md5(self, data: str):
        m = md5(data.encode())
        logger.debug(m.hexdigest())
        return m.hexdigest()
 
    def run(self):
        data = {
            'phone': self.phone,
            'password': self.password,
        }
        r = self.session.post(self.host, data=data).text
        logger.debug(r)
 
if __name__ == '__main__':
    uniapp().run()
 
-----------------------------------------------------------------------------------------------
# log日志
 
2022-06-20 21:39:22.812 | DEBUG    | __main__:__get_sign:28 - 6ab57fc0fc38326cfed1129199260ccd
2022-06-20 21:39:23.003 | DEBUG    | __main__:run:49 - {"code":4041,"msg":"您输入错误次数过多,已被锁定,解锁时间:2022-06-21 15:05:49。"}

Untitled

总结

  • Uni-App分类
    1. 全部由 JavaScript 处理(参数加密、发送请求)
    2. Java 与 JavaScript 做交互,两者都可以实现参数加密及请求发送
  • Uni-App 导入 Java 类:plus.android.importClass('android.util.Log').d("uniapp",i)

[2023春季班]2023,新的征程,脱壳机更新、iOS/eBPF、赠送云手机套装!一块裸板虚拟化五个容器云手机!3月25日起同时上调价格并赠送新设备!

收藏
点赞2
打赏
分享
最新回复 (2)
雪    币: 419
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
万里星河 活跃值 2023-3-19 17:06
3
0
支持一下
游客
登录 | 注册 方可回帖
返回