吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 25152|回复: 300
收起左侧

[Android 原创] 《安卓逆向这档事》七、Sorry,会Hook真的可以为所欲为-Xposed快速上手(上)模块编..

    [复制链接]
正己 发表于 2023-2-2 08:38
本帖最后由 正己 于 2023-10-10 18:50 编辑

QQ_DVfA4hBztt.png

一、课程目标


1.了解Xposed原理及发展
2.从0到1编写xposed模块
3.配置ubuntu的逆向环境
4.了解xposed的常用Api

二、工具


1.教程Demo(更新)
2.jadx-gui
3.雷电模拟器
4.vmware
5.Android Studio

三、课程内容


1.什么是Xposed?

Xposed是一款可以在不修改APK的情况下影响程序运行的框架,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。在这个框架下,我们可以编写并加载自己编写的插件APP,实现对目标apk的注入拦截等。

2.Xposed原理

用自己实现的app_process替换掉了系统原本提供的app_process,加载一个额外的jar包,入口从原来的:  com.android.internal.osZygoteInit.main()被替换成了:  de.robv.android.xposed.XposedBridge.main()
创建的Zygote进程就变成Hook的Zygote进程了,从而完成对zygote进程及其创建的Dalvik/ART虚拟机的劫持(zytoge注入)
chrome_ZigoTxOFYW.png

3.Xposed的发展及免root框架

名称 地址 支持版本 是否免root
xposed https://github.com/rovo89/Xposed 2.3-8.1
EDXposed https://github.com/ElderDrivers/EdXposed 8.0-10
LSPosed https://github.com/LSPosed/LSPosed 8.1-13
VirtualXposed https://github.com/android-hacker/VirtualXposed 5.0-10.0
太极 https://www.coolapk.com/apk/me.weishu.exp 5.0-13
两仪 https://www.coolapk.com/apk/io.twoyi 8.1-13
天鉴 https://github.com/Katana-Official/SPatch-Update 6-10

4.Xposed可以做什么?

1.修改app布局:上帝模式
2.劫持数据,修改参数值、返回值、主动调用等。例:微信防撤回、步数修改、一键新机
应用变量
Carnac汉化版_DnbVLE4kDL.png
3.自动化操作,例:微信抢红包
QQ_4VZmn3d29R.png

学习项目:
QQ_BGWZxRkQ6P.png
2022 最好的Xposed模块: GravityBox, Pixelify, XPrivacyLua
基于Xposed的抖音爬虫,抖音风控后自动一键新机,模拟一个全新的运行环境
基于xposed的frida持久化方案
A Xposed Module for Android Penetration Test, with NanoHttpd.
GravityBox
Xposed-Modules-Repo]
一个旨在使QQ变得更好用的开源Xposed模块
杜比大喇叭
知乎去广告Xposed模块
哔哩漫游
曲境
自动化创建Xposed模块及钩子,让Xposed模块编写时只需关注钩子实现

5.Xposed环境配置

前置

ubuntu虚拟机镜像,感谢沐阳哥提供的镜像!!!
内置:

  • Frida开发环境
  • 动态分析及开发工具:android-studio
  • 动态分析工具:ddms
  • 静态分析工具:jadx1.4.4
  • 动静态分析工具:jeb
  • 动态分析工具:集成HyperPwn
  • 静态分析工具:010 editor
  • 抓包工具:Charles
  • 抓包工具:WireShark
  • 动态分析工具:unidbg

vm虚拟机:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html
(或下载我打包好的)
激活码自行百度哦

第一步,安装虚拟机调整路径,输入激活码

第二步,导入镜像,文件->打开->选择解压好的镜像

第三步,点击运行,待初始化,输入密码:toor

chrome_KU8rxf8i0L.png


1.Android Studio创建新项目
2.将下载的xposedBridgeApi.jar包拖进libs文件夹
3.右击jar包,选择add as library
4.修改xml文件配置

<!-- 是否是xposed模块,xposed根据这个来判断是否是模块 -->
<meta-data
    android:name="xposedmodule"
    android:value="true" />
<!-- 模块描述,显示在xposed模块列表那里第二行 -->
<meta-data
    android:name="xposeddescription"
    android:value="这是一个Xposed模块" />
<!-- 最低xposed版本号(lib文件名可知) -->
<meta-data
    android:name="xposedminversion"
    android:value="89" />

5.修改build.gradle,将此处修改为compileOnly 默认的是implementation

implementation 使用该方式依赖的库将会参与编译和打包
compileOnly 只在编译时有效,不会参与打包

6.新建-->Folder-->Assets Folder,创建xposed_init(不要后缀名):只有一行代码,就是说明入口类
7.新建Hook类,实现IXposedHookLoadPackage接口,然后在handleLoadPackage函数内编写Hook逻辑

import de.robv.android.xposed.IXposedHookLoadPackage; 
import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class Hook implements IXposedHookLoadPackage {
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {

    }
}

继承了IXposedHookLoadPackag便拥有了hook的能力

6.Xpoosed常用API

An efficient Hook API and Xposed Module solution built in Kotlin

1.Hook普通方法

修改返回值

XposedHelpers.findAndHookMethod("com.zj.wuaipojie.Demo", loadPackageParam.classLoader, "a", String.class, new XC_MethodHook() {
    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        super.afterHookedMethod(param);
        param.setResult(999);
    }
});

修改参数

XposedHelpers.findAndHookMethod("com.zj.wuaipojie.Demo", loadPackageParam.classLoader, "a", String.class, new XC_MethodHook() {
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
        super.beforeHookedMethod(param);
        String a = "pt";
        param.args[0] = a;    }
});

2.Hook复杂&自定义参数

Class a = loadPackageParam.classLoader.loadClass("类名");
XposedBridge.hookAllMethods(a, "方法名", new XC_MethodHook() {
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
        super.beforeHookedMethod(param);

        }
});

3.Hook替换函数

Class a = classLoader.loadClass("类名")
XposedBridge.hookAllMethods(a,"方法名",new XC_MethodReplacement() {  
    @Override  
    protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {  
        return "";  
    }  
});

4.Hook加固通杀

XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {  
    @Override  
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {  
        Context context = (Context) param.args[0];  
        ClassLoader classLoader = context.getClassLoader();
        //hook逻辑在这里面写  
    }  
});

四、课后小作业


写一个xposed模块去修改上节课smali相关学习里的方法,并修改参数以及返回值

五、答疑


待更新

六、视频及课件地址


百度云
阿里云
哔哩哔哩
PS:解压密码都是52pj,阿里云由于不能分享压缩包,所以下载exe文件,双击自解压

七、其他章节


《安卓逆向这档事》一、模拟器环境搭建
《安卓逆向这档事》二、初识APK文件结构、双开、汉化、基础修改
《安卓逆向这档事》三、初识smail,vip终结者
《安卓逆向这档事》四、恭喜你获得广告&弹窗静默卡
《安卓逆向这档事》五、1000-7=?&动态调试&Log插桩
《安卓逆向这档事》六、校验的N次方-签名校验对抗、PM代{过}{滤}理、IO重定向

八、参考文档


[原创]源码编译(2)——Xopsed源码编译详解
[原创]Xposed Hook技巧,代{过}{滤}理abstract
[原创]Xposed callMethod 如何传入接口参数

免费评分

参与人数 90威望 +1 吾爱币 +122 热心值 +82 收起 理由
PRfectDD + 1 + 1 我很赞同!
lwt198888 + 1 + 1 谢谢@Thanks!
niceqiezi + 1 + 1 用心讨论,共获提升!
jiaohao + 1 我很赞同!
haozhupeiqi + 1 + 1 用心讨论,共获提升!
franklizz + 1 热心回复!
dixiu + 1 + 1 谢谢@Thanks!
jxhuangwei + 1 + 1 谢谢@Thanks!
PinkTT + 1 + 1 我很赞同!
Jerry_bean + 1 + 1 用心讨论,共获提升!
zhugedafashi + 1 + 1 鼓励转贴优秀软件安全工具和文档!
icepyb + 1 谢谢@Thanks!
LineCat + 1 + 1 谢谢@Thanks!
bzdimsorry + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
hkhkhk + 1 + 1 谢谢@Thanks!
m2kar + 1 用心讨论,共获提升!
业余小徐 + 1 + 1 我很赞同!
dbv2pj + 1 + 1 用心讨论,共获提升!
xiaomin86 + 1 + 1 谢谢@Thanks!
TQl麒麟 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
liuxiaoxin + 1 + 1 谢谢@Thanks!
Promisess + 1 谢谢@Thanks!
junjia215 + 1 + 1 谢谢@Thanks!
Lsygood + 1 + 1 用心讨论,共获提升!
breezehan + 1 + 1 谢谢@Thanks!
importhis + 1 + 1 我很赞同!
牧尘凉凉 + 1 + 1 热心回复!
weixu + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ichiban123 + 1 我很赞同!
zhangxu888 + 1 + 1 用心讨论,共获提升!
kuiur0810 + 1 + 1 我很赞同!
芽衣 + 3 + 1 用心讨论,共获提升!
z0eey + 1 + 1 谢谢@Thanks!
rnadow + 1 学习了
a657938016 + 1 + 1 我很赞同!
1.shui + 2 + 1 谢谢@Thanks!
潇洒哥er + 1 用心讨论,共获提升!
9违D温柔 + 1 + 1 热心回复!
Cherry33 + 1 用心讨论,共获提升!
1120813330 + 1 用心讨论,共获提升!
hwh425 + 1 热心回复!
wenrow + 1 + 1 用心讨论,共获提升!
安道尔的鱼 + 1 + 1 热心回复!
h07799486 + 1 + 1 谢谢@Thanks!
2016976438 + 1 + 1 我很赞同!
luochunyan + 1 + 1 谢谢@Thanks!
alanhays + 1 + 1 我很赞同!
hbzjhg + 1 我很赞同!
edge + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
努力的小七 + 1 + 1 我很赞同!
放手一搏09 + 1 + 1 用心讨论,共获提升!
露珠闪闪 + 1 + 1 用心讨论,共获提升!
丶贤之 + 1 谢谢@Thanks!
hzr121792 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
gzhi521 + 1 + 1 好快啊,才学到第五课,新年红包中级的还没领到
一夜梦惊人 + 2 + 1 用心讨论,共获提升!
52菜鸟 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Chenda1 + 1 + 1 无脑给币就对了
Tianchengo + 1 谢谢@Thanks!
小菜鸟一枚 + 1 + 1 谢谢@Thanks!
zuiai125520 + 2 + 1 我很赞同!
13077535368 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
root000001 + 1 谢谢@Thanks!
King1993 + 1 + 1 谢谢@Thanks!
jinyi666 + 1 + 1 谢谢@Thanks!
156608225 + 1 + 1 用心讨论,共获提升!
yyb414 + 1 + 1 热心回复!
wwb66668 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Tonyha7 + 2 + 1 终于更新了
aa5516875 + 1 + 1 用心讨论,共获提升!
努力加载中 + 1 + 1 热心回复!
jafck + 1 + 1 断跟了3集,晚上打算一起看完他们。谢谢楼主。
mazh369 + 1 我很赞同!
愚无尽 + 1 + 1 我很赞同!
gunxsword + 1 + 1 谢谢@Thanks!
chuanyuehuoxian + 1 + 1 热心回复!
Vmoon + 1 + 1 用心讨论,共获提升!
1054114709 + 1 + 1 我很赞同!
allspark + 1 + 1 用心讨论,共获提升!
eleven2026 + 1 + 1 谢谢@Thanks!
debug_cat + 1 + 1 用心讨论,共获提升!
GenW + 16 + 1 黑米cb太抠门了,鼓励优秀原创教程
凡若尘曦 + 1 + 1 用心讨论,共获提升!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zhufengwan + 1 + 1 用心讨论,共获提升!
BlackCaesar + 1 + 1 谢谢@Thanks!
偶尔.c + 2 + 1 用心讨论,共获提升!
kentish + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
winshaw + 1 哇哦~~支持一波~~

查看全部评分

本帖被以下淘专辑推荐:

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

 楼主| 正己 发表于 2024-1-12 22:02
lwt198888 发表于 2024-1-11 19:24
@正己   大神,课程里面大神用了真机,但是这里虚拟机ubuntu怎么连主机里面的雷电模拟器啊,这里没说,还是 ...

可以通过桥接,百度一下,网上有教程
不知道改成啥 发表于 2023-2-2 08:56
 楼主| 正己 发表于 2023-2-2 08:39
ssson 发表于 2024-3-1 23:33
正己 发表于 2024-3-1 22:15
不会啊,重启看看

这是我写的hook硬币的函数,但是没有效果,还是显示0。
[Java] 纯文本查看 复制代码
// hook coin count
        XposedHelpers.findAndHookMethod("com.zj.wuaipojie.ui.SmaliLearn", loadPackageParam.classLoader,"getVip_coin", new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                super.afterHookedMethod(param);
                param.setResult(99);
            }
        });


于是静态分析看到这段代码并没有调用函数,直接访问的类的变量
[Java] 纯文本查看 复制代码
int i = smaliLearn.vip_coin;
        if (i != 0) {
            textView3.setText(String.valueOf(i));
        }


问了chatgpt教我这么hook
[Java] 纯文本查看 复制代码
Class<?> clazz = XposedHelpers.findClass("com.zj.wuaipojie.ui.SmaliLearn", loadPackageParam.classLoader);
        Field field = XposedHelpers.findField(clazz, "vip_coin");

        // 获取字段值
        int currentValue = (int) XposedHelpers.getIntField(field, yourInstance);

        // 设置字段值
        XposedHelpers.setIntField(field, yourInstance, 999);


这个yourInstance不知道要怎么填,chatgpt的回答是这样的

Xposed框架确实可以hook类的字段。虽然Xposed框架最常见的是用来hook方法以改变其行为,但它同样支持通过反射机制来读取和修改类的字段(包括私有字段)。对于你提到的私有字段`vip_coin`,可以通过Xposed的`XposedHelpers`类提供的`findField`方法找到这个字段,并使用`getField`和`setField`方法来获取或修改它的值。

例如:

```java
Class<?> clazz = XposedHelpers.findClass("YourTargetClassName", lpparam.classLoader);
Field field = XposedHelpers.findField(clazz, "vip_coin");

// 获取字段值
int currentValue = (int) XposedHelpers.getField(field, yourInstance);

// 设置字段值
XposedHelpers.setField(field, yourInstance, newValue);
```

这里`yourInstance`应当是指向包含`vip_coin`字段的实际对象实例的引用。在Xposed模块中,你需要在适当的位置(如`handleLoadPackage`方法内)插入这样的代码来实现对目标字段的hook。

请注意,由于Xposed框架的强大能力,这种操作应当谨慎使用,避免破坏原有应用的正常逻辑或引起不可预见的后果。而且,为了安全性和稳定性,通常建议仅在必要的情况下才对非公开API进行hook操作。

点评

下一课不就有hook字段的 final Class clazz = XposedHelpers.findClass("类名", classLoader); XposedHelpers.setStaticIntField(clazz, "变量名", 999);  详情 回复 发表于 2024-3-2 13:31
偶尔.c 发表于 2023-2-2 08:51
下一集有没有预告
 楼主| 正己 发表于 2024-2-14 14:56
HandSonic 发表于 2024-2-14 14:52
大佬,有加固hook直接闪退怎么破呀

拦截闪退的代码

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
失色的星星 + 1 + 1 大佬能否出一期寻找闪退代码的帖子,hook未加固的某啰APP也碰到了这个问题
HandSonic + 1 + 1 热心回复!

查看全部评分

a976606645 发表于 2023-2-2 08:47
前排支持
GYB6 发表于 2023-2-2 09:00
支持支持
klxn0-0 发表于 2023-2-2 09:04
正好在学,跟着深入了
201811094222 发表于 2023-2-2 09:18
太好了 真的太好了
debug_cat 发表于 2023-2-2 09:18
快进到魔改Xposed移除特征内置到系统
not2die 发表于 2023-2-2 09:22
谢谢正己大佬
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 12:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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