安卓逆向半次元app逆向分析源码

目录
  • 前言
  • 一、案例
  • 二、分析
    • 1. jadx反编译
    • 2.ida分析so层
    • 3. Frida
      • 3.1 hook结果
    • 4. 算法还原
  • 总结

仅供学习交流,禁止商业用途。如侵害利益,联系必删!

前言

最近一位小伙伴钟爱二次元文化,于是找到半次元这个app,但是很快他就遇到了问题。

一、案例

样本: 半次元 v5.0.6

工具: jadx-gui、ida、frida 问题描述:

POST请求body中的data加密,那要想动态模拟请求数据,就需要逆向分析data如何加密的了。

二、分析

1. jadx反编译

分析过程比较枯燥就不过多阐述了,直接上分析的结果图。

2.ida分析so层

很清楚的可以看到"com_banciyuan_AI"就是key啦

3. Frida

代码如下:

# -*- coding: utf-8 -*-
import frida, sys
def on_message(message, data):
    if message['type'] == 'send':
        print("[*] {0}".format(message['payload']))
    else:
        print(message)
jscode_hook = """
    Java.perform(
        function(){
            var en = Java.use("com.banciyuan.bcywebview.utils.encrypt.Encrypt");
            en.a.overload("java.lang.String").implementation = function (str){
                console.log("参数: "+str);
                var res = this.a(str);
                console.log("返回: "+res);
                return res;
            }
        }

    )
"""
process = frida.get_usb_device().attach('com.banciyuan.bcywebview')
script = process.create_script(jscode_hook)
script.on('message', on_message)
print('[*] Hook Start Running')
script.load()
sys.stdin.read()

3.1 hook结果

4. 算法还原

能看出来没有魔改的地方,AES.ECB模式Pkcs7padding.

代码如下:

# -*- coding:utf-8 -*-
import base64
from Crypto.Cipher import AES
class EncryptDate:
    def __init__(self, key):
        self.key = key  # 初始化密钥
        self.length = 16  # 初始化数据块大小
        self.aes = AES.new(self.key, AES.MODE_ECB)  # 初始化AES,ECB模式的实例
        # 截断函数,去除填充的字符
        self.unpad = lambda date: date[0:-ord(date[-1])]
        print(self.unpad)
    def pad(self, text):
        """
        #填充函数,使被加密数据的字节码长度是block_size的整数倍
        """
        count = len(text.encode('utf-8'))
        add = self.length - (count % self.length)
        entext = text + (chr(add) * add)
        return entext
    def encrypt(self, encrData):  # 加密函数
        a = self.pad(encrData)
        res = self.aes.encrypt(a.encode("utf-8"))
        msg = str(base64.b64encode(res), encoding="utf8")
        return msg
    def decrypt(self, decrData):  # 解密函数
        res = base64.decodebytes(decrData.encode("utf-8"))
        msg = self.aes.decrypt(res).decode("utf-8")
        return self.unpad(msg)
eg = EncryptDate("com_banciyuan_AI".encode("utf-8"))
res = eg.encrypt('{"uid":3526863969856576,"face":"f"}')
print(res)
print(eg.decrypt(res))

安心使用

总结

难度适中,工具运用(jadx、ida、frida)AES的加密模式分析切勿着急。

以上就是安卓逆向半次元app逆向分析源码的详细内容,更多关于半次元app逆向分析的资料请关注我们其它相关文章!

(0)

相关推荐

  • 爬虫逆向抖音新版signature分析案例

    目录 断点调试 流程分析 流程总结 因为老策略一直能用,一直没有看新版signature.本文做一下分析记录. 断点调试 堆栈进来之后,url中signature已经有了 shift+f11 往前找,找到了还没signature的位置,然后断点 重新触发请求 这里目前是没有signature的 F9 F11都行,单步往下走 过了一会儿能看到g.send(d) 这里是XMLHttpRequest 的 send 请求. send下一步到_0x2856c7方法 这里进行处理之后再返回到 XMLHttp

  • 安卓逆向分析之酷狗signature案例分享

    目录 前言 一.抓包待分析参数 1.1 charles抓包-音乐评论接口 1.2 模拟请求 1.3 查壳 二.分析 2.1 packageName 2.2 搜索关键词 2.3 a2追踪hook 2.4 b2追踪hook 2.5 hook 加密函数 仅做学习交流,如有侵犯联系必删. 前言 一篇酷狗app安卓逆向的文章,难度适中. 样本: 酷狗app v10.8.8 工具: jadx.Pixel3 安卓10.frida.charles 小伙伴可以跟着一起做做 提示:以下是本篇文章正文内容,下面案例可

  • Android APK反编译图文教程

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看.下面是我参考了一些文章后简单的教程详解. (注:反编译不是让各位开发者去对一个应用破解搞重装什么的,主要目的是为了促进开发者学习,借鉴好的代码,提升自我开发水平.) 测试环境: win 7 使用工具: 我们下载地址: apktool (资源文件获取)  下载        

  • 安卓逆向案例分析之蝉妈妈sign破解

    目录 前言 1.抓包 2. 定位分析 2.1 package 2.2 jadx-gui 3. hook 总结 前言 蝉妈妈app v2.6.1 安卓逆向分析之sign破解 提示:以下是本篇文章正文内容,下面案例可供参考 1.抓包 接口: https://api-service.chanmama.com/v1/douyin/live/rank/realtime 由图可见Headers中关键参数sign 2. 定位分析 2.1 package package=‘com.chandashi.chanm

  • 使用android-apktool来逆向(反编译)APK包方法介绍

    谷歌官方提供了apktool可以逆向已经发布出去的APK应用,即反编译已经打包成功的APK文件,使用它可以将其反编译成非常接近打包前的原始格式,对于APK来说,可以具体的逆向AndroidManifest.xml.资源文件resources.arsc以及将dex文件反编译成可以调试的smali文件. Warnning 但apktool并不等于是可以用来侵犯前作者的作品的工具,所以使用apktool工具的用户千万不用用其来进行不正当.非法的使用. It is NOT intended for pi

  • 非常详细的android so库逆向调试教程

    目录 前言 应用环境准备 创建默认的native application 修改stringFromJNI方法,便于调试 修改androidManifest文件 修改CMakeLists.txt 编译运行,获取so hook环境准备 使用ida pro进行hook adb与手机的准备 ida pro的工作准备 使用ida pro进行调试 进行调试 结束 前言 好久没有写博客了,最近的精力全放在逆向上面.目前也只是略懂皮毛. android java层的逆向比较简单,主要就是脱壳 .反编译源码,通过

  • 安卓逆向腾讯动漫app返回数据加密分析案例分享

    目录 前言 一.问题 1.1抓包返回加密数据 1.2查壳 二.分析 1.1 jadx-gui 1.2 全局搜索加密函数 1.3 疑似方法分析 三.Frida 1.1 反编译代码分析 1.2 hook看下结果: 1.3算法还原 1.4 Python还原 总结 前言 腾讯动漫app v8.1.6 工具:jadx.frida.pixel3 安卓10 提示:以下是本篇文章正文内容,案例可供参考 一.问题 1.1抓包返回加密数据 1.2查壳 未发现加壳 直接打开jadx分析 二.分析 1.1 jadx-g

  • 安卓逆向半次元app逆向分析源码

    目录 前言 一.案例 二.分析 1. jadx反编译 2.ida分析so层 3. Frida 3.1 hook结果 4. 算法还原 总结 仅供学习交流,禁止商业用途.如侵害利益,联系必删! 前言 最近一位小伙伴钟爱二次元文化,于是找到半次元这个app,但是很快他就遇到了问题. 一.案例 样本: 半次元 v5.0.6 工具: jadx-gui.ida.frida 问题描述: POST请求body中的data加密,那要想动态模拟请求数据,就需要逆向分析data如何加密的了. 二.分析 1. jadx

  • Android10 App启动Activity源码分析

    目录 正文 ActivityThread的main方法 Application Context对象 LaunchActivityItem ClientLifecycleManager ClientTransaction TransactionExecutor executeLifecycleState方法 正文 上一篇: Android 10 App启动分析之进程创建篇(一) 上一篇文章,我们探讨了App启动过程中进程创建及初始化的流程,这篇文章我们接着上篇的内容,继续探讨App的Applica

  • Android 自定义相机及分析源码

    Android 自定义相机及分析源码 使用Android 系统相机的方法: 要想让应用有相机的action,咱们就必须在清单文件中做一些声明,好让系统知道,如下 <intent-filter> <action android:name="android.intent.action.IMAGE_CAPTURE" /> <category android:name="android.intent.category.DEFAULT" />

  • 实时获取股票数据的android app应用程序源码分享

    最近学习Android应用开发,不知道写一个什么样的程序来练练手,正好最近股票很火,就一个App来实时获取股票数据,取名为Mystock.使用开发工具Android Studio,需要从Android官网下载,下载地址:http://developer.android.com/sdk/index.html.不幸的是Android是Google公司的,任何和Google公司相关的在国内都无法直接访问,只能通过VPN访问. 下图为Android Studio打开一个工程的截图: 下面按步介绍Myst

  • Redis对象与redisObject超详细分析源码层

    目录 一.对象 二.对象的类型及编码 redisObject 结构体 三.不同对象编码规则 四.redisObject结构各字段使用范例 4.1 类型检查(type字段) 4.2 多态命令的实现(encoding) 4.3 内存回收和共享对象(refcount) 4.4 对象的空转时长(lru) 五.对象在源码中的使用 5.1 字符串对象 5.1.1字符串对象创建 5.1.2 字符串对象编码 5.1.3 字符串对象解码 5.1.4 redis对象引用计数及自动清理 六.总结 以下内容是基于Red

  • vue router 源码概览案例分析

    源码这个东西对于实际的工作其实没有立竿见影的效果,不会像那些针对性极强的文章一样看了之后就立马可以运用到实际项目中,产生什么样的效果,源码的作用是一个潜移默化的过程,它的理念.设计模式.代码结构等看了之后可能不会立即知识变现(或者说变现很少),而是在日后的工作过程中悄无声息地发挥出来,你甚至都感觉不到这个过程 另外,优秀的源码案例,例如 vue . react 这种,内容量比较庞大,根本不是三篇五篇十篇八篇文章就能说完的,而且写起来也很难写得清楚,也挺浪费时间的,而如果只是分析其中一个点,例如

  • nginx源码分析configure脚本详解

    nginx源码分析--configure脚本 一.前言 在分析源码时,经常可以看到类似 #if (NGX_PCRE) .... #endif 这样的代码段,这样的设计可以在不改动源码的情况下,通过简单的定义宏的方式来实现功能的打开与关闭,但是在nginx/src目录下始终没有找到宏 NGX_PCRE 对应的 #define 语句. 在之前介绍event模块的时候,讲到init_cycle函数中对cycle进行了初始化,其中很重要一步操作就是讲包含所有module信息的数组拷贝到这个cycle对应

  • Android ViewPager源码详细分析

    1.问题 由于Android Framework源码很庞大,所以读源码必须带着问题来读!没有问题,创造问题再来读!否则很容易迷失在无数的方法与属性之中,最后无功而返. 那么,关于ViewPager有什么问题呢? 1). setOffsreenPageLimit()方法是如何实现页面缓存的? 2). 在布局文件中,ViewPager布局内部能否添加其他View? 3). 为什么ViewPager初始化时,显示了一个页面却不会触发onPageSelected回调? 问题肯定不止这三个,但是有这三个问

  • Java源码分析:深入探讨Iterator模式

    java.util包中包含了一系列重要的集合类.本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕. 下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应Iterator接口,并仔细研究迭代子模式的实现原理. 本文讨论的源代码版本是JDK 1.4.2,因为JDK 1.5在java.util中使用了很多泛型代码,为了简化问题,所以我们还是讨论1.4版本的代码. 集合类的根接口Collection Collect

  • jQuery源码分析-01总体架构分析

    1. 总体架构 1.1 自调用匿名函数 self-invoking anonymous function 打开jQuery源码,首先你会看到这样的代码结构: 复制代码 代码如下: (function( window, undefined ) { // jquery code })(window); 1. 这是一个自调用匿名函数.什么东东呢?在第一个括号内,创建一个匿名函数:第二个括号,立即执行 2. 为什么要创建这样一个"自调用匿名函数"呢? 通过定义一个匿名函数,创建了一个"

随机推荐