【Android学习】二

工具学习

Posted by Corax on January 19, 2024

4

安卓四大组件

组件 描述
activity 活动 在应用中的一个Activity可以用来表示一个界面,意思可以理解为“活动”,即一个活动开始,代表 Activity组件启动,活动结束,代表一个Activity的生命周期结束。一个Android应用必须通过Activity来运行和启动,Activity的生命周期交给系统统一管理。 简单来讲就是界面,或者说是一个函数,函数包含界面。
Service(服务) 在后台不需要用户界面的应用组件
Broadcast Receiver(广播接收器) 接受广播信息 用来接收类似于时区改变,电量高低等等系统信息,应用接受了这些系统信息之后就可以作出相对应响应
Content Provider(内容提供者) 应用程序间通讯,win上有类似的。

等待广告

就是下面这玩意

image-20240120141632869

通过打开MT的activity记录,(有点类似于堆栈回溯),找到这个adactivity

image-20240120142924213

换到NP转为java代码

image-20240120143131315

//
// Decompiled by Jadx (from NP Manager)
//
package com.zj.wuaipojie.ui;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import androidx.appcompat.app.AppCompatActivity;
import com.zj.wuaipojie.ui.AdActivity$.ExternalSyntheticLambda0;
import kotlin.Metadata;

@Metadata(d1 = {"\u0000\u001a\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0000\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002J\b\u0010\u0003\u001a\u00020\u0004H\u0002J\b\u0010\u0005\u001a\u00020\u0004H\u0002J\u0012\u0010\u0006\u001a\u00020\u00042\b\u0010\u0007\u001a\u0004\u0018\u00010\bH\u0014¨\u0006\t"}, d2 = {"Lcom/zj/wuaipojie/ui/AdActivity;", "Landroidx/appcompat/app/AppCompatActivity;", "()V", "jump", "", "loadAd", "onCreate", "savedInstanceState", "Landroid/os/Bundle;", "app_release"}, k = 1, mv = {1, 7, 1}, xi = 48)
/* compiled from: AdActivity.kt */
public final class AdActivity extends AppCompatActivity {
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(2131427363);
        loadAd();
    }

    private final void jump() {
        startActivity(new Intent((Context) this, ChallengeThird.class));
        finish();
    }

    private final void loadAd() {
        new Handler().postDelayed(new ExternalSyntheticLambda0(this), 3000);
    }

    /* renamed from: loadAd$lambda-0 */
    private static final void m0loadAd$lambda-0(AdActivity adActivity) {
        adActivity.jump();
    }
}

重点在于这个

写了一个线程 并等待三秒钟

image-20240120143219803

换到smali就是这里

image-20240120144006850

现在进去就没有等待广告了

image-20240120144138164

版本更新弹窗

涉及一些activity生命周期的内容

image-20240120144452316

image-20240120144502794

本来其实应该有的,但我可能因为断网进入所以没了

image-20240120144541577

方法是更改versioncode,也就是更改版本号

image-20240120144626038

一号弹窗

这里需要用到算法助手里面这个日志

image-20240120150645181

点进去最后一个

在我看来其实也像一个栈堆回溯

image-20240120150700762

注意到这个

image-20240120150729503

进mt搜 搜得到 但不知道为什么在np里搜不到。。

下拉几个找到一号弹窗的地方

把show方法注释掉

image-20240120151750823

ok

image-20240120151829951

二号弹窗

如上

横幅广告

这玩意要用到一个开发助手看布局

通过资源id找到这里

image-20240120152214951

可以更改这里的长款,也可以添加一句隐藏

image-20240120152731874

ok

image-20240120152635250

5

这里主要讲的是Android上面的动调

第一个是要我们做好debug的设置

分为四种方法

方法一:在AndroidManifest.xml里添加可调试权限


android:debuggable="true"

方法二:XappDebug模块hook对应的app

项目地址

XappDebug

方法三:Magisk命令(重启失效)

 复制代码 隐藏代码1.  adb shell #adb进入命令行模式

2.  su #切换至超级用户

3.  magisk resetprop ro.debuggable 1

4.  stop;start; #一定要通过该方式重启

方法四:刷入MagiskHide Props Config模块(永久有效,但我这两台手机都不行,哭死,呜呜呜)

一般来说,在4选项中如果有ro.debuggable那就直接修改 没有的话就选5 image-20240120182406044

修改ro.debuggable的值为1

ok打开jeb,搜索字符串找到这里

image-20240120182444744

可以看到这里的check是关键

image-20240120182603056

两个判断是否是flag

image-20240120182649292

然后我们直接在出口处下断

image-20240120182727071

p1是关键

动调

ok我们进行动调

image-20240120183712232

开始

image-20240120183736915

附到进程上

image-20240120184655779

运行到断点处 进入base方法,在出口处看到i字符串

这个是根据用户名算出来的

image-20240120192323218

ok

image-20240120192408081

插桩

通过在代码里插入一些代码,把程序进行中的关键信息,以log日志的形式输出出来。

image-20240120221033822

重命名

image-20240120221215954

插入调用命令

image-20240120221559311

开启算法助手捕获

image-20240120221709987

流程走一遍就在日志里看到了

image-20240120221804464