吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9087|回复: 102
上一主题 下一主题
收起左侧

[Android 原创] XX助手7.6.0专业版破解分析

    [复制链接]
跳转到指定楼层
楼主
scllqk 发表于 2024-9-12 21:47 回帖奖励
本帖最后由 scllqk 于 2024-9-12 22:17 编辑

XX助手7.6.0专业版破解分析

1.最近听说这个叫XX助手的app挺好用的,下载之后,发现好多功能需要进行付费才能使用,这哪能忍?

2.先让我探探它的深浅,使用np管理器先看看加没加壳,发现使用了360加固

image

3.本来还想直接用np管理器直接改代码重打包的,没想到用了360加固难办喽,难办?那就别办了,掀桌子了,先给它脱个壳,这里我直接用frida-dexdump脱壳了

image

4.脱完壳之后,直接丢jadx里面进行反编译,大概这样吧

image

5.接下来就该分析一下了,这里我直接上算法助手,让我看看它这个窗口是怎么调用的

image

6.双击跳转过来,直接查看一下代码,然后我们直接写frida脚本,上frida调用一下试试。

image

7.脚本详情

Java.perform(function () {
    console.log("启动");
    let o00Oo0 = Java.use("o0000oo0.o00Oo0");
    o00Oo0["onStart"].implementation = function () {
        console.log(`o00Oo0.onStart is called`);
        this["onStart"]();
    };    
});

8.使用frida脚本注入一下,发现成功调用了,说明出付费弹窗的时候,确实调用这个地方了。

image

9.但是后面经过测试,发现非付费功能,也会调用这个参数,说明这个方法是用来处理弹窗的,我们往上追看是谁调用了它,结果发现,没有人调用它,它是系统自动调用的,这是一个生命周期方法。

image

10.那接下来怎么办呢?正当我一筹莫展之际,我想到了,既然它需要付费激活,肯定会和服务端进行通信,所以,让我们抓个包试试,小黄鸟启动!!

image

11.在上述的包中,我们可以看到我们输入了激活码1234567890,响应回来的是激活码长度是不对的,我们看看相关的关键字首先是域名codekk.com,其次是路径/common/v,以及一些其他的特征,我们拿着这些特征点去搜索一下。

image

12.运气不错,只有一处,我们去看看相关代码,和请求报文参数正好对应的上,说明就是调用了这个地方。

image

13.之前发现响应包报错激活码长度不够,经过不断尝试,终于把在第32位时,不再报错激活码长度不够而且发现响应包code返回1而不是之前的11

image

14.我们在代码里再继续找找,发现这个地方的代码跳转过去和响应包的内容可以对应上。

image

15.这里的code和message和响应包正好对应上,我们尝试去hook一下,看看会不会触发此处。

image

16.脚本详情

Java.perform(function () {
    console.log("启动");
    let OooO0O0 = Java.use("o00000Oo.OooO0O0");
    OooO0O0["getCode"].implementation = function () {
        console.log(`OooO0O0.getCode is called`);
        let result = this["getCode"]();
        console.log(`OooO0O0.getCode result=${result}`);
        return result;
    };
});

17.启动脚本,发现确实触发此处代码了

image

18.我们前面发现,激活码错误时,code返回1,我们大胆猜测,是不是当code返回0时就表示激活成功呢?这里我们直接把脚本里的return的结果直接返回为0试试。

Java.perform(function () {
    console.log("启动");
    let OooO0O0 = Java.use("o00000Oo.OooO0O0");
    OooO0O0["getCode"].implementation = function () {
        console.log(`OooO0O0.getCode is called`);
        let result = this["getCode"]();
        console.log(`OooO0O0.getCode result=${result}`);
        return 0;
    };
});

19.使用脚本注入后,我们输入1234567890,发现成功激活,现在我们可以使用专业版工具了。

image

20.接下来就是进行持久化了,让我们来看一下xposed插件的写法。让我们打开Android Studio,先新建一个工程。


21.新建完工程后,我们先build一下,看看这个app能否正常build。


22.运行成功了,app成功安装并运行起来了。接下来让我们正式进入xposed插件的编写过程,首先就是去下载XposedBridgeAPI,地址:https://github.com/nashor1/XposedBridgeAPI ,下载完成后把下载下来的jar包放到libs目录里。

  1. 然后选中jar包,右键点击Add As Library,添加到配置文件build.gradle里

  1. 打开配置文件build.gradle,我们可以看到新增加了一条implementation(files("libs/XposedBridgeAPI-89.jar")),这里我们需要把implementation换成compileOnly,然后记得点击一下Sync Now。具体为啥需要换,我也不太了解,之前跟大佬学习的时候,就是这样教的。

  1. 创建assets文件夹,里面指定xposed插件的入口,在assets文件夹下创建一个file文件,命名为xposed_init。最后在xposed_init文件里写入xposed的hook启动类



26.在AndroidManifest.xml文件里面写明这是一个xposed插件,这可以让它在xposed中展示出来,做完之后,可以run一下,看能否在xposed中看到它。


27.可以找到它,说明上述我们做的都没问题,接下来开始写主要的hook代码,从哪里写呢?当然是刚才我们新建的Hookmain里写了。

package com.kfzs.kfzspj;

import android.util.Log;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class Hookmain implements IXposedHookLoadPackage {
    public String tag = "lsposed_hook";

    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
        if (loadPackageParam.packageName.equals("XX的包名")) {
            Log.d(tag, "jin ru le");
            Class ActivityThread = XposedHelpers.findClass("android.app.ActivityThread", loadPackageParam.classLoader);
            XposedBridge.hookAllMethods(ActivityThread, "performLaunchActivity", new XC_MethodHook() {
                protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    Class OooO0O0_class = XposedHelpers.findClass("o00000Oo.OooO0O0", loadPackageParam.classLoader);
                    XposedHelpers.findAndHookMethod(OooO0O0_class, "getCode", new XC_MethodHook() {
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            param.setResult(0);
                        }
                    });
                }
            });
        }
    }
}

28.前面frida只要hook就行了,而使用xposed时,需要考虑的就比较多。比如,因为此软件使用了x60加固,所以我们直接hook改getCode的返回值是不生效的,没办法找到classLoader,会出现报错,也不能注入成功,我们需要绕过360加固获得真正的classloader后才能hook成功。所以才会多出一些绕过的代码,写完这些代码后,直接安装运行即可。

29.安装完成后,在Lsposed里直接勾选作用域后,运行XX助手后,输入任意9位以上激活码,即可破解成功。到此,还不算结束,因为现在我们的xposed插件还不是完整的app,没有进行签名之类的,只能本地通过adb安装,所以下面,我们要对这个app进行签名,这样才能给大家用,点击Build->Generate Signed Bundle or APK。

30.然后选择APK,并且创建自己的签名,这里我自己创建了一个,然后点击Next,选择release,并点击Create就可以创建出来,生成的文件/{项目目录}/app/release/app-release.apk,这样就可以给其他人用了。


31.新手第一次发帖子,还望各位大佬多多指教,跟着各位大佬学习。


免费评分

参与人数 40吾爱币 +41 热心值 +35 收起 理由
蓝色雨纷飞 + 1 + 1 用心讨论,共获提升!
2316361 + 1 + 1 谢谢@Thanks!
meet52 + 1 + 1 我很赞同!
lovFlov + 1 + 1 强强强!
我自有分数 + 1 + 1 谢谢@Thanks!
Andrea99 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
寻找乐趣 + 1 + 1 谢谢@Thanks!
wwqkcb + 1 + 1 谢谢@Thanks!
yjkhc + 1 谢谢@Thanks!
lyrong2008 + 1 这么好的帖子,必须顶了!
KingStar188 + 1 我很赞同!
debug_cat + 2 + 1 谢谢@Thanks!
baohe + 1 我很赞同!
a927 + 1 + 1 谢谢@Thanks!
jaffa + 1 谢谢@Thanks!
wzl90327 + 1 + 1 用心讨论,共获提升!
乌木屋 + 1 + 1 热心回复!
bigzhang + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
cux666 + 1 谢谢@Thanks!
nighv0120 + 1 用心讨论,共获提升!
Rockhat + 1 谢谢@Thanks!
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
victos + 1 + 1 谢谢@Thanks!
lnastacies + 1 + 1 鼓励转贴优秀软件安全工具和文档!
Monitor + 3 + 1 鼓励转贴优秀软件安全工具和文档!
zzccyydd + 1 + 1 谢谢@Thanks!
ioyr5995 + 1 + 1 我很赞同!
tomanpj + 1 谢谢@Thanks!
0jiao0 + 1 用心讨论,共获提升!
yyzwnjxw + 1 谢谢@Thanks!
kwan8888 + 1 + 1 用心讨论,共获提升!
PastorBonus + 1 + 1 谢谢@Thanks!
Optimal + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Voccoo + 1 + 1 我很赞同!
bookbug + 1 + 1 用心讨论,共获提升!
yono233 + 1 我很赞同!
LuckyClover + 1 + 1 谢谢@Thanks!
1045837055lucy + 1 + 1 感谢分享
卑鄙的你 + 1 + 1 热心回复!
AiniWang + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

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

推荐
侃遍天下无二人 发表于 2024-9-13 22:08
哈哈哈哈,我做的一个软件把验证逻辑放onCreate里了,毕竟这块指令会被抽到so中,更难搞,你看看你脱壳的代码里的onCreate方法有没有被还原
推荐
debug_cat 发表于 2024-9-18 11:04
侃遍天下无二人 发表于 2024-9-13 22:08
哈哈哈哈,我做的一个软件把验证逻辑放onCreate里了,毕竟这块指令会被抽到so中,更难搞,你看看你脱壳的代 ...

是所有逻辑都丢onCreate吗,毕竟验证的逻辑有时候需要调用其他函数来组合,比如网络框架,json解析,或者MD5等等,如果不断堆代码在onCreate,能正常工作吗,没有测试过堆多少。但是他们的onCreate目前是蜕壳了也不会还原的。

点评

验证逻辑全在onCreate实现的,不请求网络,通过另一个app生成离线许可,然后在onCreate校验  详情 回复 发表于 2024-9-18 12:29
沙发
正己 发表于 2024-9-13 13:35
新人首帖比较详细,给个精华,期待后续产出更多佳作
3#
lostsailboard 发表于 2024-9-13 14:06
就喜欢用图说话,支持支持
4#
LuckyClover 发表于 2024-9-13 14:31
感谢分享宝贵经验
5#
wasm2023 发表于 2024-9-13 15:45
好详细,学习了,感谢楼主
6#
nicelh 发表于 2024-9-13 15:46
第一次就破解成功了,厉害
7#
Csir0103 发表于 2024-9-13 16:03
有点高大上了,看不太懂。。。作为小白来说
8#
hylkxj 发表于 2024-9-13 16:34
回复一个,假装看安懂了
9#
adevour 发表于 2024-9-13 16:41
确实详细,感谢分享啦
10#
WilsonZtw 发表于 2024-9-13 16:52
这是小白 那我们这种小小白咋整哦
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-21 18:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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