Crack App | yrx App 对抗赛第二、第三题加密签名对抗

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: Crack App | yrx App 对抗赛第二、第三题加密签名对抗

今日目标

昨天整了个珍惜逆向的团购,当了一晚上的客服,结果还是很多人错过拍大腿了,算了算了  还是老老实实写文章吧

aHR0cHM6Ly9hcHBtYXRjaC55dWFucmVueHVlLmNvbQ==

上一篇写了 yrx App 比赛的第一个题目

Crack App | yrx App 对抗赛第一题 Sign 算法的还原

今天搞一搞二、三题的加密签名,为什么把这两个放在一起写,是因为这两道题目有一个通用解法

Unidbg

即可以满足主办方的要求又可以完成 so 算法的脱机调用

第二题:so 层加密

抓包分析(第二题)

先来看看这第二题的请求包

time+app2两个请求包,主要看看app2

主要的参数很明显,还是sign

加密定位与分析(第二题)

根据上一篇文章

可以快速定位加密位置如下

这个sign是下面的native方法

既然开始就决定要使用unidbg调用这个算法,那么就费劲拖到IDA里分析了

只需要用Frida确认sign的出入参数,之后方便使用Unidbg调用即可

使用下面的代码hook sign

console.log("脚本加载成功");
function main(){
    Java.perform(function() {
        var clazz = Java.use('com.yuanrenxue.match2022.fragment.challenge.ChallengeTwoFragment');
        clazz.sign.implementation = function(str) {
            console.log('find ======');
            console.log('str ========>' + str)
            var result = this.sign(str)
            console.log("result =======>" + result)
            return result;
        }
    });
}
setImmediate(main)

然后运行可以得到下面的打印结果

这里的str就是入参,可以知道就是page+:+time的组合

返回的结果看着很像Base64

先把出入参数复制保存起来,等最后和Unidbg 的结果做个对比

Unidbg 调用 so 算法(第二题)

之前写过一篇关于Unidbg环境搭建的教程,里面讲了如何下载开源项目并成功运行第一个demo

没有搭好环境的可以照着下面的链接先搭建一下

Crack App | 初试 Unidbg 环境搭建

这个appso命名很规范,所以不用看java层的加载代码也能很快的知道so是哪个

先把这个libmatch02.so复制出来

打开搭建好的unidbg项目,并创建一个app2的包,并将apkso都放进去

新建一个MainActivity.java文件,这个是我们调用so主逻辑的代码存放位置

如果之前没有写过的话,可以参考Unidbg自带的demo

下面直接附上主要的代码

public class MainActivity extends AbstractJni {
    private final AndroidEmulator emulator;
    private final VM vm;
    private final Memory memory;
    private final Module module;
    public MainActivity(){
        // 创建模拟器实例(这里必须是 64bit 的版本,因为是 64 位的 so)
        emulator = AndroidEmulatorBuilder
                .for64Bit()
                .build();
        // 获取内存
        memory = emulator.getMemory();
        // 设置解析器sdk版本
        memory.setLibraryResolver(new AndroidResolver(23));
        // 这里应该给一个 apk 的文件路径
     //vm = emulator.createDalvikVM();
        // 创建Android虚拟机,传入APK,Unidbg可以替我们做部分签名校验的工作
        vm = emulator.createDalvikVM(new File("unidbg-android/src/test/java/com/app2/app-match-22.apk"));
        // 打印日志
        vm.setVerbose(true);
        vm.setJni(this);
     // 加载 so 
        DalvikModule dalvikModule = vm.loadLibrary(new File("unidbg-android/src/test/java/com/app2/libmatch02.so"), false);
        // 获取本SO模块的句柄
        module = dalvikModule.getModule();
    // 调用JNI OnLoad,可以看到JNI中做的事情,比如动态注册以及签名校验等。
        vm.callJNI_OnLoad(emulator,module);
    }
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        MainActivity mainActivity = new MainActivity();
        System.out.println("load the vm "+( System.currentTimeMillis() - start )+ "ms");
        mainActivity.getHash();
    }
}

这里面除了创建模拟器实例的时候需要用到的64bit之外,其他都是正常的逻辑

然后只要写一个方法调用sign就可以了

private void getHash() {
        DvmObject<?> dvmObject = vm.resolveClass("com/yuanrenxue/match2022/fragment/challenge/ChallengeTwoFragment").newObject(null);
        String input = "3:1652458832";
        DvmObject<?> ret = dvmObject.callJniMethodObject(emulator, "sign(Ljava/long/String;)Ljava/long/String;", input);
        System.out.println("result ==>" + ret.getValue());
    }

Unidbg运行结果如下

和我们 hook 的结果一样,之后只要搭配Unidbg Server就可以直接调用了




此为分割线


看过第二题的赶紧练起来,试试按照上面的思路把第三题做出来,做不出来再看下面的内容

说归说闹归闹,别拿点赞开玩笑,记得点赞





此为分割线


第三题:so 层加密带混淆

抓包分析(第三题)

第三题的抓包大同小异

也是time+app3两个请求包,主要看app3这个请求包

主要的分析参数是m

加密定位与分析(第三题)

根据上一篇文章

可以定位到下面的位置

然后和第二题一样,使用Frida确定出入参数就可以了,方便之后用Unidbg调用

第三题的crypt可以通过下面的代码hook

console.log("脚本加载成功");
function main(){
    Java.perform(function() {
        var clazz = Java.use('com.yuanrenxue.match2022.fragment.challenge.ChallengeThreeFragment');
        clazz.crypto.overload('java.lang.String', 'long').implementation = function(str,time) {
            console.log('find ======> crypt');
            console.log("str ===>   "+str)
            console.log("time ===>   "+time)
            var result = this.crypto(str,time)
            console.log("result ====>   " + result)
            return result;
        }
    });
}
setImmediate(main)

hook结果如下

这个strpage+time*1000

timetime*1000

同样的先把出入参数复制保存起来,等最后和Unidbg 的结果做个对比

Unidbg 调用 so 算法(第三题)

看过第二题的小伙伴都知道前面的步骤了,这里直接跳过环境搭建等步骤

直接上代码

private void getHash() {
        DvmObject<?> dvmObject = vm.resolveClass("com/yuanrenxue/match2022/fragment/challenge/ChallengeThreeFragment").newObject(null);
        String input = "懒得敲了";
        Long time = 懒得敲了;
        DvmObject<?> ret = dvmObject.callJniMethodObject(emulator, "crypto(Ljava/lang/String;J)Ljava/lang/String;", input,time);
        System.out.println("result ==>" + ret.getValue());
    }

逻辑的其他部分除了要替换apkso的路径之外,其他完全一样

以上就是yrx 的第二、第三题的题目讲解了,还好不限制Unidbg,不然连第二第三题就已经把我干掉了

End.

相关文章
|
14天前
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
|
8月前
|
存储 Java API
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
1057 0
|
8月前
|
JSON 小程序 数据安全/隐私保护
小程序动态调试-解密加密数据与签名校验
本文主要讲解微信小程序加密、验签的情况下如何进行动态调试已获取签名以及加密信息
|
8月前
|
算法 安全 Java
Java 实现 RSA 非对称加密算法-加解密和签名验签
Java 实现 RSA 非对称加密算法-加解密和签名验签
339 0
|
21天前
|
安全 数据安全/隐私保护 Android开发
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
168 75
|
11天前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
24天前
|
测试技术 Android开发 开发者
【03】优雅草央千澈详解关于APP签名以及分发-上架完整流程-第三篇安卓APP上架华为商店后面的步骤-华为应用商店相对比较麻烦一些-华为商店安卓上架
【03】优雅草央千澈详解关于APP签名以及分发-上架完整流程-第三篇安卓APP上架华为商店后面的步骤-华为应用商店相对比较麻烦一些-华为商店安卓上架
|
4月前
|
算法 安全 网络安全
概念区分:对称加密、非对称加密、公钥、私钥、签名、证书
概念区分:对称加密、非对称加密、公钥、私钥、签名、证书
208 0
|
5月前
|
JavaScript 前端开发 安全
VUE——APP,后端,前端三端AES加密解密
VUE——APP,后端,前端三端AES加密解密
200 0
|
8月前
|
Android开发 开发者
 一键在线获取APP公钥、包名、签名及备案信息方法介绍
本文介绍了一款在线APP解析工具,可以一键获取APP的公钥、包名、签名等基础信息,同时提供了详细的操作步骤和使用示例,帮助开发者更便捷地进行APP备案信息的获取。

热门文章

最新文章