总结
豆包 AI 助手文章总结
首页 > 运维 > 安全 > 正文

Android基础逆向没怎么实现

PHPz
发布: 2023-05-17 20:22:36
转载
1107人浏览过

0x01 Activity 跳转

demo还是上一次的demo,这次我们更改一下button逻辑,改成跳转。

建一个新的Activity

Android基础逆向没怎么实现

跳转Activity

这里跳转到我们新建的Activity。
使用Intent进行跳转,Intent相当于一个载体。
具体代码如下:

        Intent i=new Intent(MainActivity.this,Main2Activity.class);        startActivity(i);
登录后复制


Android基础逆向没怎么实现

设置标识


Android基础逆向没怎么实现

生成apk测试


Android基础逆向没怎么实现

0x02 Androidmanifest.xml说明

首先来看下Androidmanifest.xml的内容

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.hanlei.first_demo">    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity android:name=".Main2Activity"></activity>    </application></manifest>
登录后复制

在这里我们可以看到有两个Activity。

如何设置最先启动?

这里有两个Activity,那么app是怎么识别那个是最先启动的Activity呢。
这里我们对比一下两个Activity的区别。
这是第一个Activity

 <activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>
登录后复制

这个是我们的第二个Activity

  <activity android:name=".Main2Activity"></activity>
登录后复制

是不是区别很明显,一个有一大堆的内容,一个只有一句话。
所以我们的重点就是:

<intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>
登录后复制

很容易就发现是因为这个所以才是最先启动的。
我们来做一个简单的测试。
我们把这个移动一下位置。
现在Androidmanifest,xml是这个样子。

                                        <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>            
登录后复制

测试

现在我们生成apk。
Android基础逆向没怎么实现

我们发现,点开之后发现已经不是之前的Activity,而是我们之后自己添加的Activity。
基于这个思路,我们可以想嘛,如果有第三方的Activity注入,我们是不是可以通过改变启动的Activity从而避开一些验证问题。
恩,之后通过实战来进行一个测试。

0x03 反编译

有到了学习smali的时候到了。可能很无聊吧,但是写的人却是很有兴趣呢。
废话不说,开始吧。

1. 丢Android Killer里。

2.找到关键代码

恩。在$2里。

.method public onClick(Landroid/view/View;)V    .locals 3    .param p1, "v"    # Landroid/view/View;    .prologue
    .line 33    new-instance v0, Landroid/content/Intent;

    iget-object v1, p0, Lcom/example/hanlei/first_demo/MainActivity$2;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    const-class v2, Lcom/example/hanlei/first_demo/Main2Activity;    invoke-direct {v0, v1, v2}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V    .line 34    .local v0, "i":Landroid/content/Intent;
    iget-object v1, p0, Lcom/example/hanlei/first_demo/MainActivity$2;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    invoke-virtual {v1, v0}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V    .line 35    return-void
.end method
登录后复制

这里我们不一句一句翻译,想看的回去翻之前的内容,很多。
我们来看这里的主要代码:
新建一个 Intent对象

new-instance v0, Landroid/content/Intent;
登录后复制

获取MainActivity对想存储在v1中

 iget-object v1, p0, Lcom/example/hanlei/first_demo/MainActivity$2;->this$0:Lcom/example/hanlei/first_demo/MainActivity;
登录后复制

把Main2Activity存入v2中

 const-class v2, Lcom/example/hanlei/first_demo/Main2Activity;
登录后复制

然后把v1和v2放入v0中。

invoke-direct {v0, v1, v2}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V
登录后复制

startActivity调用即可。还是很简单的,很容易理解的。

.line 34    .local v0, "i":Landroid/content/Intent;
    iget-object v1, p0, Lcom/example/hanlei/first_demo/MainActivity$2;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    invoke-virtual {v1, v0}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V
登录后复制

虽然我不知道smali的含义,但我很熟悉它,一下就理解了。恩,语言还是多看看,多分析分析,有好处的。我熟练掌握C语言是因为学习时坚持不懈地敲了许多代码并完成了几个项目。

0x04 实战分析

样本

样本为了方便我就传在百度云里了
原APK:链接:https://pan.baidu.com/s/1pMwcuef 密码:a673

试玩

不知道为什么我的夜深模拟器打不开了。试试别的模拟器。

Android基础逆向没怎么实现

一打开游戏,就弹出个这个界面,很不喜欢,我想直接弹出我的游戏界面。
好,我们用我们刚开始的技能。

1.apk反编译

Android基础逆向没怎么实现

2.查看Androidmanifest.xml文件

<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal" package="com.sxiaoao.farm.farmherohx">    <uses-feature android:glEsVersion="0x00020000" android:required="true"/>    <uses-permission android:name="android.permission.WAKE_LOCK"/>    <uses-permission android:name="android.permission.INTERNET"/>    <uses-permission android:name="android.permission.VIBRATE"/>    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name=""/>    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>    <uses-permission android:name="android.permission.GET_TASKS"/>    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>    <uses-permission android:name="android.permission.READ_CONTACTS"/>    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>    <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS"/>    <uses-permission android:name="android.permission.INTERNET"/>    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>    <application android:icon="@drawable/icon" android:label="美人鱼消消" android:name="com.sxiaoao.farm.farmherohx.CmgameApplication">        <activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:label="美人鱼消消" android:launchMode="singleTask" android:name="MainActivity" android:screenOrientation="sensorPortrait"/>        <activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:label="美人鱼消消" android:launchMode="singleTask" android:name="LogActivity" android:screenOrientation="sensorPortrait"/>        <activity android:configChanges="keyboard|orientation|screenSize" android:name="cn.cmgame.billing.api.GameOpenActivity" android:screenOrientation="sensorPortrait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>                <category android:name="tv.ouya.intent.category.GAME"/>            </intent-filter>            <intent-filter>                <action android:name="android.intent.action.CHINAMOBILE_OMS_GAME"/>                <category android:name="android.intent.category.CHINAMOBILE_GAMES"/>            </intent-filter>        </activity>        <activity android:name="cn.cmgame2_0.launch_model.shortcut.main.MiguHomeActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Dialog">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="cn.cmgame2_0.category.migu_home"/>            </intent-filter>        </activity>        <service android:name="cn.cmgame.billing.service.GameService"/>        <activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:exported="true" android:label="美人鱼消消" android:launchMode="singleTop" android:name="com.sxiaoao.farm.farmherohx.wxapi.WXEntryActivity" android:screenOrientation="sensorPortrait"/>        <receiver android:name="com.xiaoao.pay.util.update.UpdataBroadcastReceiver">            <intent-filter>                <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>            </intent-filter>        </receiver>        <meta-data android:name="UMENG_APPKEY" android:value="552f4eeafd98c57677001cb8"/>        <meta-data android:name="UMENG_CHANNEL" android:value="8556"/>    </application></manifest>
登录后复制

3.尝试跳转

首先来看下我们的跳转。

<activity android:configChanges="keyboard|orientation|screenSize" android:name="cn.cmgame.billing.api.GameOpenActivity" android:screenOrientation="sensorPortrait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>                <category android:name="tv.ouya.intent.category.GAME"/>            </intent-filter>            <intent-filter>                <action android:name="android.intent.action.CHINAMOBILE_OMS_GAME"/>                <category android:name="android.intent.category.CHINAMOBILE_GAMES"/>            </intent-filter>        </activity>
登录后复制

跳转的Activity名称为:cn.cmgame.billing.api.GameOpenActivity,Gameopen。。。恩,这是什么唉,好奇怪。但是呢,肯定就是我们打开的界面。恩。我觉得这个有点重要,以后可能会涉及到。所以还是找个小本子记下来。我应该建立一个小本子。
我们来看一下我们的Activity。

<activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:label="美人鱼消消" android:launchMode="singleTask" android:name="MainActivity" android:screenOrientation="sensorPortrait"/><activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:label="美人鱼消消" android:launchMode="singleTask" android:name="LogActivity" android:screenOrientation="sensorPortrait"/>
登录后复制

这里有两个Activity:
第一个Activity的name:android:name="MainActivity"
第二个Activity的name:android:name="LogActivity"
作为开发人员,MainActivity,就是一个开始恩。我们直接开始更改。

<activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:label="美人鱼消消" android:launchMode="singleTask" android:name="MainActivity" android:screenOrientation="sensorPortrait">              <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>                <category android:name="tv.ouya.intent.category.GAME"/>            </intent-filter>            <intent-filter>                <action android:name="android.intent.action.CHINAMOBILE_OMS_GAME"/>                <category android:name="android.intent.category.CHINAMOBILE_GAMES"/>            </intent-filter>         </activity>
登录后复制

这个是修改后的Activity。
其实我也只是对

                 <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>
登录后复制

这两句有了解。但是还有三句是什么,一起来看一下吧。关于测试的问题,我们学习完之后再进行测试吧。
首选是

<category android:name="tv.ouya.intent.category.GAME"/>
登录后复制
登录后复制

Android基础逆向没怎么实现

<action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/>
登录后复制

这两个直接挪过去,直接失败。所以,还是分析一下吧。
刚才说的

<category android:name="tv.ouya.intent.category.GAME"/>
登录后复制
登录后复制

这句就是必须的。
还有两句

 <action android:name="android.intent.action.CHINAMOBILE_OMS_GAME"/><category android:name="android.intent.category.CHINAMOBILE_GAMES"/>
登录后复制

以上就是Android基础逆向没怎么实现的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:亿速云网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号