安卓Hook逆向思路,实战合集

本文不会提供具体的逆向的软件或者是成品,文章内容仅用于技术交流学习!

关于签名校验

  • 对应用执行改包操作前,第一步就是要去掉签名校验,否则会闪退,或者让你到应用商店下载
  • MT管理器-*.apk-功能-去除签名校验-确定

关于HOOK

请阅读:Frida用法之Hook Java层代码

APK1

逆向版本:2.4.6.7

  • 登录账号后到会员页面,可以看到立即开通
  • *.arsc-资源查询-立即开通-搜索字符串- 点击检索的目标即可复制资源ID(7f0f049e)
  • dex搜索代码复制的资源ID,可以锁定到com.screen.recorder.components.activities.vip.domestic.DomesticVIPActivity
  • 将其转成java代码
    public final void Z0() {
        boolean p = c13.p(this);
        boolean z = this.x && c13.n(this);
        this.p.setVisibility(z ? 8 : 0);
        if (z) {
            this.q.setVisibility(0);
            this.r.setVisibility(8);
        } else {
            this.q.setVisibility(8);
            this.r.setVisibility(0);
            this.r.setText((this.x && p) ? 0x7f0f0498 : 0x7f0f049e);
            m0();
        }
        R0(false);
    }
  • 通过分析java代码,(this.x && p) ? 0x7f0f0498 : 0x7f0f049e很明显是个三目运算符
  • 当运算结果为fasle时是立即开通,所以true时就会执行前面的0x7f0f0498,通过查询这个代表的字符串是续期
  • 如何让表达式为true?this.x暂且不论,直接去改p,也就是c13.ptrue就行
  • 直接转回smali代码定位跳转到c13.p
    smali

    method public static p(Landroid/content/Context;)Z
    .registers 1
    
    .line 1
    invoke-static {p0}, Lcom/duapps/recorder/b13;->D(Landroid/content/Context;)Lcom/duapps/recorder/b13;
    
    move-result-object p0
    
    invoke-virtual {p0}, Lcom/duapps/recorder/b13;->K()Z
    
    move-result p0
    
    return p0
    .end method

    java

    public static boolean p(Context context) {
        return b13.D(context).K();
    }
  • 那么,修改思路就很清晰了,直接在smali的return p0前增加
    const/4 p0,0x1
  • 修改后保存编译发现就已经是vip了
  • 但是此时你会发现不能登录了,可能会有点强迫症,那么此时我们再把会员页面去掉吧
  • 会员页面是怎么触发的呢?当我们点击左上角的图标时就会触发,所以打开开发助手去定位其资源id(0x7f090277
  • 再根据资源id搜索,定位到了com.screen.recorder.components.activities.HomeActivity
  • 转java代码后
    ...
    ImageView imageView = (ImageView) findViewById(0x7f090277);
    this.m = imageView;
    imageView.setOnClickListener(new y60(this));
    this.n = (ImageView) findViewById(0x7f090279);
    L0();
    if (this.m.getVisibility() == 0) {
    l03.C("home_page", p03.g(this), x13.C(this).D());
    }
  • 本来没啥思路,当我看到getVisibility时眼前一亮,直接设置为不可见不就好了,而且根据代码this.m.getVisibility() == 0时会执行home_page,所谓的home_page应该就是主页面了,虽然不确定这个与vip页面有没有关,但是至少有路可以走,先走再说!
  • 根据代码,图标按钮被赋值成了this.m,那么home_page的触发与否就看this.m的可见性是否为0了
  • 那么继续查看代码,看看有没有地方会去修改this.m的值,看到了个L0()这个函数,那么直接定位看看
    public final void L0() {
        if (p03.i(this)) {
            this.l.setVisibility(0);
            this.m.setVisibility(0);
            ...
        }
    }
  • 可以看到,当p03.i(this)的值为true的时候就会触发设置this.m的可见性为0
  • 那么不让他触发,那肯定得让他的值为false,定位到p03.i
    smali

    .method public static i(Landroid/content/Context;)Z
    .registers 1
    
    .line 1
    invoke-static {p0}, Lcom/duapps/recorder/u03;->h(Landroid/content/Context;)Z
    
    move-result p0
    
    return p0
    .end method

    java

    public static boolean i(Context context) {
        return u03.h(context);
    }
  • 那么,修改思路就很清晰了,直接在smali的return p0前增加
    const/4 p0,0x0
  • 编译后打开软件发现果然vip相关的都消失了,此时新问题又来了,设置页面会有个启用查看应用使用情况的按钮,点击后跳转的授权页面竟然没有这个应用,没有还怎么授权?这应该是这个应用的一个bug,或者是可能没有适配安卓高系统
  • 只能自己增加权限了,打开AndroidManifest.xml
  • 在权限并列处增加下列权限后编译即可
    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />

APK2

逆向版本:13.1.16

  • 小黄鸟抓包:抓到vip的请求
    https://pay.*.com/verify/vip/status
    {
      "code": 200,
      "data": {
        "vipStatus": 2,
        "expiryDate": "",
        "appSubManageInfo": null
      },
      "msg": ""
    }
  • 此时去dex里搜索vipStatus,稍加思索可定位到getvipStatus()
  • 跳转进入对应的smali代码

    .method public final getVipStatus()I
    .registers 2
    
    iget v0, p0, Lcom/yiruike/android/billing/entity/UserStatusEntity;->a:I
    
    return v0
    .end method
  • 转成java代码
    public final int getVipStatus() {
    return this.a;
    }
  • 上方请求的vipStatus值为2,java代码返回值也刚好是int,所以直接猜想使用整数1去尝试
  • 那么,修改思路就很清晰了,直接在smali的return v0前增加
    const/4 v0,0x1
  • 修改后保存编译签名即可!

其它待补充


作 者:道无涯
来 源:道无涯博客
链 接: https://www.daowuya.love/安卓hook逆向思路,实战合集/
版 权 声 明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议。文章版权归作者所有,未经允许请勿转载!


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇