吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2766|回复: 106
收起左侧

[Android 原创] 某算命app过付费以及抓取结果数据

  [复制链接]
fyr666 发表于 2024-11-14 23:20

感谢肉丝大佬带小弟入门。
整个过程使用到了frida、objection、wallbreaker、jadx、jeb。
当前实现结果:在首页输入相关信息后,直接运行frida脚本 ,直接调用计算方法,并自动跳转到结果界面,在frida脚本中也输出了结果。
1.jpg

2.jpg

操作步骤:
1.脱壳,拿到dex文件
2.查找MainActivity存在的classdex文件
3.使用jadx和jeb分析MainActivity
4.确定是在调用e0()方法后,跳转界面,所以e0()很关键
5.e0()中排查到v.a.x和v.a.j,来处理是否过期
6.使用frida动态修改v.a.x,v.a.j,使两个值都为true
7.通过jeb分析,显示结果是webshow,其中使用的是webview进行加载,那么就hook webview的加载方法,获取结果值
8.关键代码如下:



[Java] 纯文本查看 复制代码
Java.perform(function(){
                    var va = Java.use("v.a");
                        var result3 = va.x.value = true;
                        var result4 = va.j.value = true;
                        console.log("result3 , result4 => ",result3+","+result4);
                    Java.use("com.xxxx.xxxxx.MainActivity").e0.implementation = function(){
                        console.log("ffffffffff");
                        var va = Java.use("v.a");
                        var result3 = va.x.value = true;
                        var result4 = va.j.value = true;
                        console.log("result3 , result4 => ",result3+","+result4);
        
                        console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
            
                    }
                })

Java.perform(function () {
        // Hook WebView 类
        var WebView = Java.use('android.webkit.WebView');
    
        // Hook loadData 方法
        WebView.loadData.overload('java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function (data, mimeType, encoding) {
            console.log('==== Hooked WebView.loadData ====');
            console.log('HTML Content: ' + data);
            console.log('MIME Type: ' + mimeType);
            console.log('Encoding: ' + encoding);
            // 调用原始方法
            this.loadData(data, mimeType, encoding);
        };
    
        // Hook loadDataWithBaseURL 方法
        WebView.loadDataWithBaseURL.overload('java.lang.String', 'java.lang.String', 'java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function (baseUrl, data, mimeType, encoding, historyUrl) {
            console.log('==== Hooked WebView.loadDataWithBaseURL ====');
            console.log('Base URL: ' + baseUrl);
            console.log('HTML Content: ' + data);
            console.log('MIME Type: ' + mimeType);
            console.log('Encoding: ' + encoding);
            console.log('History URL: ' + historyUrl);
            // 调用原始方法
            this.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl);
        };
    
        // Hook loadUrl 方法
        WebView.loadUrl.overload('java.lang.String').implementation = function (url) {
            console.log('==== Hooked WebView.loadUrl ====');
            console.log('URL: ' + url);
            // 检查是否是 data:text/html 类型的 URL
            if (url.startsWith('data:text/html')) {
                try {
                    // 提取 HTML 内容
                    var base64Content = url.split(',')[1];
                    var decodedContent = Java.use('android.util.Base64').decode(base64Content, 0);
                    var htmlContent = Java.use('java.lang.String').$new(decodedContent);
                    console.log('Decoded HTML Content: ' + htmlContent);
                } catch (e) {
                    console.error('Failed to decode HTML content: ' + e);
                }
            }
            // 调用原始方法
            this.loadUrl(url);
        };
    });Java.perform(function () {
        // Hook WebView 类
        var WebView = Java.use('android.webkit.WebView');
    
        // Hook loadData 方法
        WebView.loadData.overload('java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function (data, mimeType, encoding) {
            console.log('==== Hooked WebView.loadData ====');
            console.log('HTML Content: ' + data);
            console.log('MIME Type: ' + mimeType);
            console.log('Encoding: ' + encoding);
            // 调用原始方法
            this.loadData(data, mimeType, encoding);
        };
    
        // Hook loadDataWithBaseURL 方法
        WebView.loadDataWithBaseURL.overload('java.lang.String', 'java.lang.String', 'java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function (baseUrl, data, mimeType, encoding, historyUrl) {
            console.log('==== Hooked WebView.loadDataWithBaseURL ====');
            console.log('Base URL: ' + baseUrl);
            console.log('HTML Content: ' + data);
            console.log('MIME Type: ' + mimeType);
            console.log('Encoding: ' + encoding);
            console.log('History URL: ' + historyUrl);
            // 调用原始方法
            this.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl);
        };
    
        // Hook loadUrl 方法
        WebView.loadUrl.overload('java.lang.String').implementation = function (url) {
            console.log('==== Hooked WebView.loadUrl ====');
            console.log('URL: ' + url);
            // 检查是否是 data:text/html 类型的 URL
            if (url.startsWith('data:text/html')) {
                try {
                    // 提取 HTML 内容
                    var base64Content = url.split(',')[1];
                    var decodedContent = Java.use('android.util.Base64').decode(base64Content, 0);
                    var htmlContent = Java.use('java.lang.String').$new(decodedContent);
                    console.log('Decoded HTML Content: ' + htmlContent);
                } catch (e) {
                    console.error('Failed to decode HTML content: ' + e);
                }
            }
            // 调用原始方法
            this.loadUrl(url);
        };
    });
[Asm] 纯文本查看 复制代码
Java.perform(function () {
            console.log("开始执行延迟启动 Activity");

            // 获取当前应用的 Context
            var Activity = Java.use('android.app.Activity');
            var currentActivity = Java.use('android.app.ActivityThread').currentActivityThread().getApplication().getApplicationContext();

            // 创建 Intent 对象
            var Intent = Java.use('android.content.Intent');
            var intent = Intent.$new();
            
            // 设置目标 Activity
            var targetClass = 'com.x x x x.xxxx.webshow'; // 替换为你的目标类的完整路径
            intent.setClassName(currentActivity.getPackageName(), targetClass);

            // 启动目标 Activity
            currentActivity.startActivity(intent);
            console.log("启动目标 Activity 成功: " + targetClass);
        });

免费评分

参与人数 14吾爱币 +16 热心值 +10 收起 理由
caivi + 1 + 1 热心回复!
lubeijia + 1 谢谢@Thanks!
linqiu431 + 1 我很赞同!
nekolzc + 1 我很赞同!
Vice666 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lgc81034 + 1 谢谢@Thanks!
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
ganbey + 1 我很赞同!
jaffa + 1 谢谢@Thanks!
HeroLee898 + 1 + 1 我很赞同!
DeShuaiTongGu88 + 1 + 1 谢谢@Thanks!
heifengxiaokeai + 1 我很赞同!
zhangsan173 + 1 + 1 我很赞同!
vicky526356 + 1 + 1 大佬帮我算算我撒时候能发财哟。嘿嘿

查看全部评分

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

 楼主| fyr666 发表于 2024-11-18 09:11
zhangsan173 发表于 2024-11-16 00:47
大佬frida版本和app版本号是多少啊

android8.0,frida12.8.0,app是1.6.7
kimiman 发表于 2024-11-15 12:38
zyh5028 发表于 2024-11-15 12:48
lyn1875 发表于 2024-11-15 13:19
感谢分享。
laugh68 发表于 2024-11-15 13:59
哈哈哈哈,和论坛上另一个赛博算命的app有的一拼,学习了学习了。
 楼主| fyr666 发表于 2024-11-15 14:01
kimiman 发表于 2024-11-15 12:38
大佬,有推荐的练手软件吗

我是随便搜了一个,自己就拿来练手了。没想到它都是本地做的,抓包都用不上。
 楼主| fyr666 发表于 2024-11-15 14:06
laugh68 发表于 2024-11-15 13:59
哈哈哈哈,和论坛上另一个赛博算命的app有的一拼,学习了学习了。

看来算命的app不少啊
我又不乱来y 发表于 2024-11-15 14:08
这种软件到底谁在用
wangjichuan 发表于 2024-11-15 14:32
感谢分享
msmvc 发表于 2024-11-15 15:06
laugh68 发表于 2024-11-15 13:59
哈哈哈哈,和论坛上另一个赛博算命的app有的一拼,学习了学习了。

南方起名程序
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-21 13:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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