App逆向案例 X嘟牛 - Frida监听 & WT-JS工具还原(一)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 前言该文章使用了Frida、JDAX-GUI、Charles、夜神模拟器、WT-JS等工具;主要编程语言:Python,部分涉及到:JavaScript、Java;

App逆向案例 X嘟牛 - Frida监听 & WT-JS工具还原(一)

文章目录

App逆向案例 X嘟牛 - Frida监听 & WT-JS工具还原(一)

前言

一、资源推荐

二、App抓包分析

三、反编译逆向分析

四、还原JS加密

1.Hook示例代码

2.JS还原

五、python登录实现代码

1.python示例代码

2.python运行结果

总结

前言

该文章使用了Frida、JDAX-GUI、Charles、夜神模拟器、WT-JS等工具;
主要编程语言:Python,部分涉及到:JavaScript、Java;


提示:以下是本篇文章正文内容,下面案例可供参考

一、资源推荐

Frida - App逆向 概念介绍:https://blog.csdn.net/EXIxiaozhou/article/details/128112421
安装抓包工具以及模拟器 App抓包:https://blog.csdn.net/EXIxiaozhou/article/details/127767808
JS逆向 Frida - 夜神模拟器安装配置 基本使用:https://blog.csdn.net/EXIxiaozhou/article/details/128035059
ApkScan-PKID 查壳工具下载:https://blog.csdn.net/EXIxiaozhou/article/details/127196615
Frida-Dexdump 脱壳工具下载使用:https://blog.csdn.net/EXIxiaozhou/article/details/128208068
JDAX-GUI 反编译工具下载:https://blog.csdn.net/EXIxiaozhou/article/details/127207762
JS逆向加密解密工具 下载使用:https://blog.csdn.net/EXIxiaozhou/article/details/128034062
X嘟牛Apk下载:https://pan.baidu.com/s/1HMxGZx9m8QZwAZSZPBiHwQ?pwd=m1qk
示例代码下载:https://pan.baidu.com/s/1rfFBzLeMQgKaajyUIhCb9Q?pwd=ad7i#list/path=%2F

二、App抓包分析

1、打开Charles、夜神模拟器,开始App抓包;

在这里插入图片描述

三、反编译逆向分析

提示:可以把反编译的Java代码,复制到IDEA分析运行,这样会提高逆向的效率;
加密参数的关键词:"Encrypt",点击"转到"来到加密代码处
在这里插入图片描述
在这里插入图片描述
MD5加密生成sign参数,public static String paraMap(Map addMap, String append, String sign)
在这里插入图片描述
DES加密生成encrypt,public static String encodeDesMap(String data, String desKey, String desIV)
在这里插入图片描述
在这里插入图片描述

四、还原JS加密

1.Hook示例代码

import frida
import sys

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

java_code = """
    Java.perform(function(){
   
        var hooksClass = Java.use("com.dodonew.online.http.RequestUtil");
        hooksClass.paraMap.overload('java.util.Map', 'java.lang.String', 'java.lang.String').implementation = function (addMap, append, sign) {
   
            console.log("MD5加密参数1为:"+addMap);
            console.log("MD5加密参数2为:"+append);
            console.log("MD5加密参数3为:"+sign);
            var result = this.paraMap(addMap, append, sign);
            console.log("sign加密结果:"+result);
            console.log("sign加密结果:"+result['equtype']);
            return result;
        }
    })
    Java.perform(function(){
   
        var hooksClass = Java.use("com.dodonew.online.http.RequestUtil");
        hooksClass.encodeDesMap.overload('java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function (data, desKey, desIV) {
   
            console.log("DES加密参数1为:"+data);
            console.log("DES加密参数2为:"+desKey);
            console.log("DES加密参数3为:"+desIV);
            var result = this.encodeDesMap(data, desKey, desIV);
            console.log("encrypt加密结果:"+result);
            return result;
        }
    })
"""       

# get_usb_device改成get_remote_device方法,get_usb_device有的电脑会报错
process = frida.get_remote_device().attach(3179)  # 'App名称', 或 App应用的 Process Pid
script = process.create_script(java_code)  # 把js的hook脚本注入到进程里面
script.on('message', on_message)
print('[*] Running CTF')
script.load()
sys.stdin.read()

2.JS还原

1、运行Hook代码
在这里插入图片描述
2、分析加密参数:
sign的加密参数:equtype=ANDROID&loginImei=Android354730613429558&timeStamp=1670240167016&userPwd=123456&username=15888888888&key=sdlkjsdljf0j2fsjk
sign的MD5加密结果:B5BC60EB36B54B683656B56B88714E00
3、WT-JS还原MD5
在这里插入图片描述
4、使用WT-JS生成MD5的加密代码
在这里插入图片描述
5、查看生成的代码
在这里插入图片描述
6、WT-JS还原DES
public static final String BASE_DES_IV = "32028092";
public static final String BASE_DES_KEY = "65102933";
这里有个小坑,分析apk源码可以发现,key先进行了MD5加密后才作为参数传入创建DES加密对象
在这里插入图片描述
这里先用WT-JS生成DES加密代码
在这里插入图片描述
7、查看WT-JS生成的DES加密代码
在这里插入图片描述

五、python登录实现代码

1.python示例代码

import time
import execjs
import urllib
import requests


class DuDuNiu(object):
    def __init__(self):
        with open(file="js_code.js", mode='r', encoding='utf-8') as fis:
            self.js_code = fis.read()
        self.js_obj = execjs.compile(source=self.js_code, cwd=r'D:\software_install\nodejs\node_modules')
        self.username = "15888888888"
        self.password = "123456"
        self.time_string = str(int(time.time() * 1000))
        self.headers = {
   
            'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 7.1.2; SM-G9810 Build/QP1A.190711.020)'
        }

    def get_login_params(self):
        items = {
   
            'equtype': 'ANDROID', 'loginImei': 'Android354730613429558', 'timeStamp': self.time_string,
            "userPwd": self.password, "username": self.username
        }
        content = ''
        for keys in items:
            content += f"{keys}={items[keys]}&"
        append = "sdlkjsdljf0j2fsjk"
        content += f"key={append}"
        print(content)
        sign = str(self.js_obj.call('MD5_Encrypt', content)).upper()
        print("sign参数:", sign)
        items['sign'] = sign
        content = str(items).replace(' ', '')
        print(content)
        encrypt_string = self.js_obj.call('DES_Encrypt', content)
        print("login参数:", encrypt_string)
        return encrypt_string

    def des_decrypt(self, content):
        result = self.js_obj.call('DES_Decrypt', content)
        return result

    def register(self):
        pass

    def login(self):
        login_url = 
        params = {
   "Encrypt": self.get_login_params()}
        login_response = requests.post(url=login_url, headers=self.headers, json=params)
        login_result = str(login_response.text)
        print("login响应:", login_result)
        login_result = self.des_decrypt(content=login_result)
        print(urllib.parse.unquote(login_result))

    def runs(self):
        self.login()


obj = DuDuNiu()
obj.runs()

2.python运行结果

在这里插入图片描述


总结

以上就是今天要讲的内容,本文仅仅简单介绍了一个app的逆向案例,需要仔细观察一下加密的参数以及加密结果的变化,该示例用的加密参数都是同一种,希望对大家有所帮助;

目录
相关文章
|
3月前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
109 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
2月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
149 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
4月前
|
安全 数据安全/隐私保护 Android开发
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
560 75
|
22天前
|
存储 数据库 UED
【Axure原型案例】悦购APP产品原型设计
本文介绍了悦购APP的产品原型设计,专注于潮流服装市场。设计包括登录、过渡、首页、商品分享、个人中心、购物车、消息及修改信息等页面。通过Axure实现交互功能,如页面跳转、动态效果和数据模拟,优化内容、交互与兼容性,确保用户体验流畅。最终,原型为开发和推广提供了坚实基础,助力悦购APP成为高效的潮流购物平台。
|
3月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
86 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
2月前
|
JavaScript 前端开发 Java
深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
Array.find() 是 JavaScript 数组方法中一个非常实用和强大的工具。它不仅提供了简洁的查找操作,还具有性能上的独特优势:返回的引用能够直接影响原数组的数据内容,使得数据更新更加高效。通过各种场景的展示,我们可以看到 Array.find() 在更新、条件查找和嵌套结构查找等场景中的广泛应用。 在实际开发中,掌握 Array.find() 的特性和使用技巧,可以让代码更加简洁高效,特别是在需要直接修改原数据内容的情形。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
3月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
95 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
2月前
|
监控 JavaScript 前端开发
MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例
MutationObserver 是一个非常强大的 API,提供了一种高效、灵活的方式来监听和响应 DOM 变化。它解决了传统 DOM 事件监听器的诸多局限性,通过异步、批量的方式处理 DOM 变化,大大提高了性能和效率。在实际开发中,合理使用 MutationObserver 可以帮助我们更好地控制 DOM 操作,提高代码的健壮性和可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
DeepSeek Artifacts是Hugging Face推出的免费AI编程工具,基于DeepSeek V3,支持快速生成React和Tailwind CSS代码,适合快速原型开发和前端组件构建。
1616 39
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
|
7月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
1137 1
下一篇
oss创建bucket