不让我用?这个真不能忍 - 某视频App强制启动

一、目标

朋友给我发了一个看直播的App,刚一启动,硕大的弹窗就崩脸上了。这个真忍不了,盘它。

二、步骤

Jadx

先给他拆开,搜字符串, 激活本应用

bash 复制代码
<string name="unknown_device">当前设备暂不支持激活本应用。</string>

代码里面没找到痕迹,在资源里面居然找到了。 反编译的类列表太干净了,感觉可能加固了。

也没有发现这个字符串在代码中被调用的地方,肯定是加固了

关门,上AI

bash 复制代码
万能的AI,帮我生成一个 Frida hook脚本,捕获 res/layout/dialog_double_button.xml 弹窗显示位置和堆栈,

有了AI,人人都是工程师

js 复制代码
// Hook AlertDialog.show() 
var AlertDialog = Java.use("android.app.AlertDialog");
AlertDialog.show.implementation = function() {
    console.log("\n================================================================================");
    console.log("[*] AlertDialog.show() 被调用 ");
    console.log("================================================================================");
    
    console.log("\n[*] 调用堆栈:");
    console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));
    console.log("================================================================================\n");
    
    return this.show();
};

跑一下,没反应,frida直接挂了。

先不急着问AI,咱们之前分析这个App大概率加固了,所以检测frida应该是基操。

咱们换上魔改版的Frida

github.com/Ylarod/Flor...

再跑一下

bash 复制代码
================================================================================
[*] AlertDialog.show() 被调用 
================================================================================

[*] 调用堆栈:
java.lang.Exception
	at android.app.Dialog.show(Native Method)
	at com.gXXX.tv.gXX.utils.x2.a(NoticeUtils.java:125)
	at com.gXXX.tv.gXX.activity.BaseActivity.g(BaseActivity.java:1)
	at com.gXXX.tv.gXX.activity.BaseActivity.onLoginEvent(BaseActivity.java:6)
	at com.gXXX.tv.gXX.activity.WelcomeActivity.onLoginEvent(WelcomeActivity.java:1)
	at java.lang.reflect.Method.invoke(Native Method)

这次比较顺利,逮住了

脱壳

这次脱壳用的是老朋友 BlackDex

github.com/ZiTanIOI/ne...

这次感觉是猛壳,所以在软件设置里 勾上 深度脱壳和主动调用

双手合十,默念 芝麻开门

图灵保佑,壳拖出来了。

Jadx一下,然后搜索 onLoginEvent

打开 BaseActivity.onLoginEvent

这哥们也真累,一堆判断,一言不合就掀桌子退出。

不怕,哥是有AI的,把整个onLoginEvent函数的代码喂给AI

bash 复制代码
请帮我生成Frida Hook脚本,hook住onLoginEvent函数的所有判断,定位一下到底是在哪里退出的。

吭哧吭哧,AI给我生成了一堆代码,看的眼花缭乱。

这不行,还得古法上,硅基暂时让步,碳基上位。我们观察一下这个函数的代码还是很规整的, 每次判断退出都会有提示

呼唤AI

bash 复制代码
请帮我生成Frida Hook脚本,hook住com.gXXX.tv.gXX.activity.BaseActivity.c , 加上异常处理,没有找到这个类就100毫秒之后重试 。

因为这个是加壳应用,所以需要给壳一个解密的时间,直接hook是找不到 com.gXXX.tv.gXX.activity.BaseActivity 类的。

AI写的代码就是漂亮

js 复制代码
Java.perform(function() {
    console.log("[*] 开始Hook BaseActivity.c");
    
    function tryHook() {
        try {
            var BaseActivity = Java.use("com.gXXX.tv.gXX.activity.BaseActivity");
            
            BaseActivity["c"].overload('java.lang.String').implementation = function(str) {
                console.log("BaseActivity.c is called: str=" + str);
                this["c"](str);
            };


            console.log("[+] BaseActivity.c Hook成功");
            return true;
            
        } catch (e) {
            console.log("[-] Hook失败: " + e.message);
            return false;
        }
    }
    
    function hookWithRetry() {
        if (!tryHook()) {
            console.log("[*] 100ms后重试...");
            setTimeout(hookWithRetry, 100);
        }
    }
    
    hookWithRetry();
});

好了,发现提示

bash 复制代码
onLoginEvent false showErrorTerminalDialog and SendErrorPingback

原来第一个判断 isTerminalFailStatus 就挂掉了

啥也不说了,增加一个 Hook

js 复制代码
let BaseLoginTask = Java.use("com.gXXX.tv.gXX.service.task.BaseLoginTask");
BaseLoginTask["isTerminalFailStatus"].implementation = function (i) {
    console.log(`BaseLoginTask.isTerminalFailStatus is called: i=${i}`);
    let result = this["isTerminalFailStatus"](i);
    console.log(`BaseLoginTask.isTerminalFailStatus result=${result}`);
    return false;
    // return result;
}; 

完美收工。

三、总结

不要给你的对手太明显的提示。

不要太相信AI,如果你不知道自己在干什么,AI也不知道。

脱壳是玄学,多试几个方案,万一运气到了呢?

雪之妙在能积,云之妙在不留,月之妙在有圆有缺

💡 TIP

: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系.

相关推荐
潆润千川科技10 分钟前
中老年同城社交应用后端设计:如何平衡安全、性能与真实性?
安全·聊天小程序
市场部需要一个软件开发岗位40 分钟前
JAVA开发常见安全问题:纵向越权
java·数据库·安全
飞凌嵌入式1 小时前
用「EN 18031认证」通关欧盟,这张 “网络安全护照” 已就位
网络·安全·能源
●VON2 小时前
CANN安全与隐私:从模型加固到数据合规的全栈防护实战
人工智能·安全
程序员清洒2 小时前
CANN模型安全:从对抗防御到隐私保护的全栈安全实战
人工智能·深度学习·安全
秋邱2 小时前
不仅是极速:从 CANN SHMEM 看 AIGC 集群通信的“安全微操”艺术
安全·aigc
初恋叫萱萱2 小时前
CANN 生态安全加固指南:构建可信、鲁棒、可审计的边缘 AI 系统
人工智能·安全
麦聪聊数据4 小时前
为何通用堡垒机无法在数据库运维中实现精准风控?
数据库·sql·安全·低代码·架构
m0_466525294 小时前
绿盟科技风云卫AI安全能力平台成果重磅发布
大数据·数据库·人工智能·安全
晚霞的不甘5 小时前
守护智能边界:CANN 的 AI 安全机制深度解析
人工智能·安全·语言模型·自然语言处理·前端框架