吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3574|回复: 7
收起左侧

[Android CTF] 安卓逆向吾爱破解2023春节领红包第三、第四题

[复制链接]
天空宫阙 发表于 2023-10-8 20:25
本帖最后由 天空宫阙 于 2023-10-8 20:28 编辑

安卓逆向吾爱破解2023春节领红包第三、第四题

写在前面

这几天跟着正己大佬学习了一些安卓逆向的知识,真心感觉大佬录制的课程不错,受益匪浅,吾爱破解安卓逆向入门教程《安卓逆向这档事》课程链接 https://www.bilibili.com/video/BV1wT411N7sV

课程中提到了春节领红包题目于是我觉得来试一下,虽然可能有点晚了,但是我决定贡献一下自己的解题思路,我对frida相对熟悉一些,所以主要使用的是fridajadx,当然lsposedJEB也是可以的。

环境介绍

活动帖子(已经结束) https://www.52pojie.cn/thread-1738015-1-1.html

活动已结束,题目打包放到爱盘供大家下载学习(web也一起打包,可以重新下载):
https://down.52pojie.cn/Challenge/Happy_New_Year_2023_Challenge.rar

名称 描述 链接
雷电模拟器、或者安卓真机 安卓版本需要大于8,需要root 官网下载即可
frida server 一般模拟器选择x86、真机选择arm架构 https://github.com/frida/frida/releases
jadx 反编译工具 https://github.com/skylot/jadx/releases

frida 环境还需安装相应的python环境,对此相关的文章介绍较多,不多赘述

第三题

首先直接用jadx反编译
image-20231008193751206.png

以上的逻辑非常清楚,只要点击999下响应的flag信息就会显示出来

有两种方法,一是修改我们点击的次数,二是主动调用decrypt方法解密相关字符串

import frida, sys
from pprint import pp

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

jscode = '''
Java.perform(function () {
    let MainActivity = Java.use("com.zj.wuaipojie2023_3.MainActivity");
    MainActivity["check"].implementation = function () {
        console.log(`MainActivity.check is called`);
        // let result = this["check"]();
        let result = 999; // 修改我们点击的次数
        console.log(`MainActivity.check result=${result}`);
        return result;
    };

    MainActivity["decrypt"].implementation = function (encryptTxt, i) {
        console.log(`MainActivity.decrypt is called: encryptTxt=${encryptTxt}, i=${i}`);
        let result = this["decrypt"](encryptTxt, i);
        console.log(`MainActivity.decrypt result=${result}`);
        return result;
    };
})
'''

device = frida.get_remote_device() 
# device = frida.get_usb_device() # usb调试的真机
# 方式1 hook 启动后的app
process = device.attach("【2023春节】解题领红包之三")
script = process.create_script(jscode)
script.on('message', on_message)
print('Running Hook')script.load()
sys.stdin.read()

效果如下:
image-20231008194829393.png

或者通过主动调用

import frida, sys
from pprint import pp

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

jscode = '''
Java.perform(function () {
    // 主动调用
    Java.choose('com.zj.wuaipojie2023_3.MainActivity', {
        onMatch: function (instance) {
        // textView = instance.textView;
            console.log(instance["decrypt"]("hnci}|jwfclkczkppkcpmwckng\u007f", 2))
        },
        onComplete: function () {}
    });
})
'''

device = frida.get_remote_device() 
# device = frida.get_usb_device() # usb调试的真机
# 方式1 hook 启动后的app
process = device.attach("【2023春节】解题领红包之三")
script = process.create_script(jscode)
script.on('message', on_message)
print(' Running Hook')
script.load()
sys.stdin.read()

也可以顺利拿到flag

对于第二种方法使用了java.choose(...)找到了com.zj.wuaipojie2023_3.MainActivity类的实例,然后调用该实例的的decrypt方法;按道理还可以new一个新的实例进行调用,但是我失败了,可能是MainActivity的作为比较特殊的Activity入参需要一些安卓的环境,有知道的大佬不吝赐教。

动态方法,有两种方法可以调用动态方法

第一种是,使用内存中已存在实例的方法,需要用到java.choose(...),这个是在内存中寻找对象

//从内存中(堆)直接搜索已存在的对象
Java.choose('xxx.xxx.xxx', //这里写类名 
{ //onMatch 匹配到对象执行的回调函数
    onMatch: function (instance) {
    },
    //堆中搜索完成后执行的回调函数
    onComplete: function () {
    }
});
第二种是,我们new一个新的实例,然后调用实例中的方法

 //获取类的引用
var cls = Java.use('这里写类名');

//调用构造函数 创建新对象  这里注意参数
var obj = cls.$new();

第四题

还是老套路,先用jadx反编译(能反编译没有加壳真的很幸福,脱壳真的很麻烦)
image-20231008200153272.png

flag正确字符串明显,进入到B方法
image-20231008200301144.png

发现核心代码

其实此时已经可以还原出算法了,但是为了方便起见,直接hook areEqual方法最简单,但是注意输入的验证flag形式如flag{XXX},不然不会进入验证的逻辑。

hook代码如下

Java.perform(function () {
    let Intrinsics = Java.use("kotlin.jvm.internal.Intrinsics");
    Intrinsics["areEqual"].overload('java.lang.Object', 'java.lang.Object').implementation = function (obj, obj2) {
    console.log(`Intrinsics.areEqual is called: obj=${obj}, obj2=${obj2}`);
    let result = this["areEqual"](obj, obj2);
    console.log(`Intrinsics.areEqual result=${result}`);
    return result;
};
})

image-20231008200857130.png

此外这题还有针对jeb的反动态调试,因为我用的frida,所有没有受到影响【狗头】
image-20231008201305290.png

还有一个简单的签名验证,如果要删掉这段反调试的代码还要过掉这个签名验证,否则按钮就不可见了【真坏】
image-20231008201524976.png

免费评分

参与人数 10吾爱币 +21 热心值 +10 收起 理由
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
kenchanone + 1 + 1 谢谢@Thanks!
审判者压缩 + 1 + 1 用心讨论,共获提升!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
hellozhanghe + 1 + 1 热心回复!
yuan01234 + 1 + 1 谢谢@Thanks!
Tonyha7 + 1 用心讨论,共获提升!
darklure + 1 + 1 热心回复!
gamingnow + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

panqiangge 发表于 2023-10-10 08:08
等着2024年的红包了
xjh88232259 发表于 2023-10-10 09:37
yang0318 发表于 2023-10-10 10:00
去年发红包的就特别少了。很少看见有人发红包了。是大家口袋里没钱了。还是怎么样了。
菜鸟--不二 发表于 2023-10-10 10:12
可以可以,感谢感谢
LaoKuang 发表于 2023-10-10 23:16
可以啊感谢分享
ztqddj007 发表于 2023-10-13 07:59
谢谢分享
debug_cat 发表于 2023-12-18 17:34
第七题怎么玩啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-3 15:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表