吾爱破解安卓逆向入门教程《安卓逆向这档事》十四、是时候学习一下Frida一把梭了(中)
2023-9-27 16:16:17 Author: mp.weixin.qq.com(查看原文) 阅读量:5 收藏

作者坛账号:正己

由吾爱破解论坛移动安全区版主 正己录制的吾爱破解安卓逆向 0基础 新手小白 视频教程《安卓逆向这档事》正式上线啦,如果你想学习安卓逆向,这是一个不错的机会呦!

前情提要:吾爱破解安卓逆向入门教程《安卓逆向这档事》十三、是时候学习一下Frida一把梭了(上)


1.配置objection环境
2.了解objection常用Api
3.了解frida_java_trace工具分析控制流混淆

1.教程Demo(更新)
2.jadx-gui
3.VS Code
4.IDLE

1.objection

1.什么是objection

objection是基于frida的命令行hook集合工具, 可以让你不写代码, 敲几句命令就可以对java函数的高颗粒度hook, 还支持RPC调用。可以实现诸如内存搜索、类和模块搜索、方法hook打印参数返回值调用栈等常用功能,是一个非常方便的,逆向必备、内存漫游神器。
项目地址

2.objection环境配置

已不更新,要和frida的版本匹配

 复制代码 隐藏代码
python使用的版本建议大于3.8,不然可能会报错,或者你调低frida以及objection的版本
pip install objection==1.11.0
pip install frida-tools==9.2.4
frida 14.2.18

3.objection快速上手

1.help命令注释

 复制代码 隐藏代码
objection --help(help命令)
Checking for a newer version of objection...
Usage: objection [OPTIONS] COMMAND [ARGS]...

       _   _         _   _
   ___| |_|_|___ ___| |_|_|___ ___
  | . | . | | -_|  _|  _| | . |   |
  |___|___| |___|___|_| |_|___|_|_|
        |___|(object)inject(ion)

       Runtime Mobile Exploration
          by: @leonjza from @sensepost

  默认情况下,通信将通过USB进行,除非提供了`--network`选项。

选项:
  -N, --network           使用网络连接而不是USB连接。
  -h, --host TEXT          [默认: 127.0.0.1]
  -p, --port INTEGER       [默认: 27042]
  -ah, --api-host TEXT     [默认: 127.0.0.1]
  -ap, --api-port INTEGER  [默认: 8888]
  -g, --gadget TEXT       要连接的Frida Gadget/进程的名称。[默认: Gadget]
  -S, --serial TEXT       要连接的设备序列号。
  -d, --debug             启用带有详细输出的调试模式。(在堆栈跟踪中包括代{过}{滤}理源图)
  --help                  显示此消息并退出。

命令:
  api         以无头模式启动objection API服务器。
  device-type  获取关于已连接设备的信息。
  explore     启动objection探索REPL。
  patchapk    使用frida-gadget.so补丁一个APK。
  patchipa    使用FridaGadget dylib补丁一个IPA。
  run         运行单个objection命令。
  signapk     使用objection密钥对APK进行Zipalign和签名。
  version     打印当前版本并退出。

2.注入命令

 复制代码 隐藏代码
objection -g 包名 explore

-  help:不知道当前命令的效果是什么,在当前命令前加help比如:help env,回车之后会出现当前命令的解释信息
-   按空格:不知道输入什么就按空格,会有提示出来
-  jobs:可以进行多项hook
-   日志:objection的日志文件生成在 C:\Users\Administrator\.objection

启动前就hook

 复制代码 隐藏代码
objection -g 进程名 explore --startup-command "android hooking watch class 路径.类名"

4.objection基础api

  1. memory list modules   -查看内存中加载的库

 复制代码 隐藏代码
memory list modules
Save the output by adding `--json modules.json` to this command
Name                                                              Base          Size                 Path
----------------------------------------------------------------  ------------  -------------------  ------------------------------------------------------------------------------
app_process64                                                     0x57867c9000  40960 (40.0 KiB)     /system/bin/app_process64
linker64                                                          0x72e326a000  229376 (224.0 KiB)   /system/bin/linker64
libandroid_runtime.so                                             0x72e164e000  2113536 (2.0 MiB)    /system/lib64/libandroid_runtime.so
libbase.so                                                        0x72dfa67000  81920 (80.0 KiB)     /system/lib64/libbase.so
libbinder.so                                                      0x72dec1c000  643072 (628.0 KiB)   /system/lib64/libbinder.so
libcutils.so                                                      0x72de269000  86016 (84.0 KiB)     /system/lib64/libcutils.so
libhidlbase.so                                                    0x72df4cc000  692224 (676.0 KiB)   /system/lib64/libhidlbase.so
liblog.so                                                         0x72e0be1000  98304 (96.0 KiB)     /system/lib64/liblog
  1. memory list exports so名称 - 查看库的导出函数

 复制代码 隐藏代码
memory list exports liblog.so
Save the output by adding `--json exports.json` to this command
Type      Name                                  Address
--------  ------------------------------------  ------------
function  android_log_write_int32               0x72e0be77c8
function  android_log_write_list_begin          0x72e0be76f0
function  __android_log_bswrite                 0x72e0be9bd8
function  __android_log_security                0x72e0bf2144
function  __android_log_bwrite                  0x72e0be9a18
function  android_log_reset                     0x72e0be75ec
function  android_log_write_string8             0x72e0be7a38
function  android_logger_list_free              0x72e0be8c04
function  __android_log_print                   0x72e0be9728
function  __android_logger_property_get_bool    0x72e0bf2248
function  android_logger_get_id                 0x72e0be8270
function  android_logger_set_prune_list         0x72e0be8948
  1. android hooking list activities -查看内存中加载的activity   /android hooking list services -查看内存中加载的services

  2. android intent launch_activity 类名 -启动activityservice(可以用于一些没有验证的activity,在一些简单的ctf中有时候可以出奇效)

  3. 关闭ssl校验  android sslpinning disable

  4. 关闭root检测  android root disable

    5.objection内存漫游

  5. 内存搜刮类实例

 复制代码 隐藏代码
android heap search instances 类名(命令)
Class instance enumeration complete for com.zj.wuaipojie.Demo  
Hashcode  Class                  toString()
---------  ---------------------  -----------------------------
215120583  com.zj.wuaipojie.Demo  com.zj.wuaipojie.Demo@cd27ac7
  1. 调用实例的方法

 复制代码 隐藏代码
android heap execute <handle> getPublicInt(实例的hashcode+方法名)
如果是带参数的方法,则需要进入编辑器环境  
android heap evaluate <handle>  
console.log(clazz.a("吾爱破解"));
按住esc+enter触发
  1. android hooking list classes -列出内存中所有的类(结果比静态分析的更准确)

 复制代码 隐藏代码
android hooking list classes

tw.idv.palatis.xappdebug.MainApplication
tw.idv.palatis.xappdebug.xposed.HookMain
tw.idv.palatis.xappdebug.xposed.HookMain$a
tw.idv.palatis.xappdebug.xposed.HookMain$b
tw.idv.palatis.xappdebug.xposed.HookMain$c
tw.idv.palatis.xappdebug.xposed.HookMain$d
tw.idv.palatis.xappdebug.xposed.HookSelf
u
v
void
w
xposed.dummy.XResourcesSuperClass
xposed.dummy.XTypedArraySuperClass

Found 10798 classes

  1. android hooking search classes 关键类名 -在内存中所有已加载的类中搜索包含特定关键词的类

 复制代码 隐藏代码
android hooking search classes wuaipojie
Note that Java classes are only loaded when they are used, so if the expected class has not been found, it might not have been loaded yet.
com.zj.wuaipojie.Demo
com.zj.wuaipojie.Demo$Animal
com.zj.wuaipojie.Demo$Companion
com.zj.wuaipojie.Demo$InnerClass
com.zj.wuaipojie.Demo$test$1
com.zj.wuaipojie.MainApplication
com.zj.wuaipojie.databinding.ActivityMainBinding
...

Found 38 classes

  1. android hooking search methods 关键方法名 -在内存中所有已加载的类的方法中搜索包含特定关键词的方法(一般不建议使用,特别耗时,还可能崩溃)

  2. android hooking list class_methods 类名 -内存漫游类中的所有方法

 复制代码 隐藏代码
android hooking list class_methods com.zj.wuaipojie.ui.ChallengeSixth
private static final void com.zj.wuaipojie.ui.ChallengeSixth.onCreate$lambda-0(com.zj.wuaipojie.ui.ChallengeSixth,android.view.View)
private static final void com.zj.wuaipojie.ui.ChallengeSixth.onCreate$lambda-1(com.zj.wuaipojie.ui.ChallengeSixth,android.view.View)
private static final void com.zj.wuaipojie.ui.ChallengeSixth.onCreate$lambda-2(com.zj.wuaipojie.ui.ChallengeSixth,android.view.View)
private static final void com.zj.wuaipojie.ui.ChallengeSixth.onCreate$lambda-3(com.zj.wuaipojie.ui.ChallengeSixth,android.view.View)
protected void com.zj.wuaipojie.ui.ChallengeSixth.onCreate(android.os.Bundle)
public final java.lang.String com.zj.wuaipojie.ui.ChallengeSixth.hexToString(java.lang.String)
public final java.lang.String com.zj.wuaipojie.ui.ChallengeSixth.unicodeToString(java.lang.String)
public final void com.zj.wuaipojie.ui.ChallengeSixth.toastPrint(java.lang.String)
public static void com.zj.wuaipojie.ui.ChallengeSixth.$r8$lambda$1lrkrgiCEFWXZDHzLRibYURG1h8(com.zj.wuaipojie.ui.ChallengeSixth,android.view.View)
public static void com.zj.wuaipojie.ui.ChallengeSixth.$r8$lambda$IUqwMqbTKaOGiTaeOmvy_GjNBso(com.zj.wuaipojie.ui.ChallengeSixth,android.view.View)
public static void com.zj.wuaipojie.ui.ChallengeSixth.$r8$lambda$Kc_cRYZjjhjsTl6GYNHbgD-i6sE(com.zj.wuaipojie.ui.ChallengeSixth,android.view.View)
public static void com.zj.wuaipojie.ui.ChallengeSixth.$r8$lambda$PDKm2AfziZQo6Lv1HEFkJWkUsoE(com.zj.wuaipojie.ui.ChallengeSixth,android.view.View)

Found 12 method(s)

6.objectionHook

  1. hook类的所有方法

     复制代码 隐藏代码
    android hooking watch class 类名
  2. hook方法的参数、返回值和调用栈

     复制代码 隐藏代码
    android hooking watch class_method 类名.方法名 --dump-args --dump-return --dump-backtrace
  3. hook 类的构造方法

     复制代码 隐藏代码
    android hooking watch class_method 类名.$init
  4. hook 方法的所有重载

     复制代码 隐藏代码
    android hooking watch class_method 类名.方法名

样本展示:


项目地址:
BlackObfuscator

对抗方法

  1. ZenTracer
    项目地址
    缺点:无法打印调用栈,无法hook构造函数

     复制代码 隐藏代码
    因为以长久不更新,故新版frida不兼容,下面是我跑起来的版本
    python==3.8.8
    firda==14.2.18
    frida-tools==9.2.4
    还需要安装pyqt5的库
 复制代码 隐藏代码
//使用说明
1.运行server端
2.点击action
3.点击Match Regex设置过滤标签
4.输入包名(或者方法名等可以过滤的标签),点击add
5.点击action的start
6.点击应用触发相应的逻辑
7.可左上角fils-Export JSON来导出日志分析
  1. r0tracer
    项目地址
    兼容最新版本

 复制代码 隐藏代码

    //A. 简易trace单个lei
    //traceClass("com.zj.wuaipojie2023_1.MainActivity")
    //B. 黑白名单trace多个函数,第一个参数是白名单(包含关键字),第二个参数是黑名单(不包含的关键字)
    hook("com.zj.wuaipojie2023_1", "$");
    //hook("ViewController","UI")
    //C. 报某个类找不到时,将某个类名填写到第三个参数,比如找不到com.roysue.check类。(前两个参数依旧是黑白名单)
    // hook("com.roysue.check"," ","com.roysue.check");   
    //D. 新增hookALL() 打开这个模式的情况下,会hook属于app自己的所有业务类,小型app可用 ,中大型app几乎会崩溃,经不起
    // hookALL()

        //日志输出
        frida -U -f 【2023春节】解题领红包之四 -l r0tracer.js -o Log.txt

待更新

百度云:

https://pan.baidu.com/s/1cFWTLn14jeWfpXxlx3syYw?pwd=nqu9
阿里云PS:
https://www.aliyundrive.com/s/TJoKMK6du6x
哔哩哔哩:
https://www.bilibili.com/video/BV1X24y1m7cj
PS:解压密码都是52pj,阿里云由于不能分享压缩包,所以下载exe文件,双击自解压

《安卓逆向这档事》一、模拟器环境搭建

《安卓逆向这档事》二、初识APK文件结构、双开、汉化、基础修改
《安卓逆向这档事》三、初识smail,vip终结者
《安卓逆向这档事》四、恭喜你获得广告&弹窗静默卡
《安卓逆向这档事》五、1000-7=?&动态调试&Log插桩
《安卓逆向这档事》六、校验的N次方-签名校验对抗、PM代{过}{滤}理、IO重定向
《安卓逆向这档事》七、Sorry,会Hook真的可以为所欲为-Xposed快速上手(上)模块编写,常用Api

《安卓逆向这档事》八、Sorry,会Hook真的可以为所欲为-xposed快速上手(下)快速hook

《安卓逆向这档事》九、密码学基础、算法自吐、非标准加密对抗

《安卓逆向这档事》十、不是我说,有了IDA还要什么女朋友?

《安卓逆向这档事》十二、大佬帮我分析一下

《安卓逆向这档事》番外实战篇1-某电影视全家桶

《安卓逆向这档事》十三、是时候学习一下Frida一把梭了(上)

详细文字介绍、视频原件下载、视频所用到的程序下载、课后作业和学习交流参看论坛原文:
https://www.52pojie.cn/thread-1838539-1-1.htm

实用FRIDA进阶:内存漫游、hook anywhere、抓包

https://www.anquanke.com/post/id/197657

点击左下角阅读原文,进入 B站 线观看视频教程,欢迎一键三连转发~

-官方论坛

www.52pojie.cn

--推荐给朋友

公众微信号:吾爱破解论坛

或搜微信号:pojie_52


文章来源: https://mp.weixin.qq.com/s?__biz=MjM5Mjc3MDM2Mw==&mid=2651139750&idx=1&sn=17a282c1f0e2c56e7d8321867bc2685e&chksm=bd50bef28a2737e4dae8032de4d19cf8e226a00801419c34b837b02074e10f84fe1c1aec4130&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh