千家信息网

Android基础逆向没怎么实现

发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,这篇文章主要介绍"Android基础逆向没怎么实现",在日常操作中,相信很多人在Android基础逆向没怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Andro
千家信息网最后更新 2024年11月27日Android基础逆向没怎么实现

这篇文章主要介绍"Android基础逆向没怎么实现",在日常操作中,相信很多人在Android基础逆向没怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Android基础逆向没怎么实现"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

0x01 Activity 跳转

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

建一个新的Activity



跳转Activity

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

        Intent i=new Intent(MainActivity.this,Main2Activity.class);        startActivity(i);



设置标识



生成apk测试



0x02 Androidmanifest.xml说明

首先来看下Androidmanifest.xml的内容

                                                                                        

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

如何设置最先启动?

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

                                                                 

这个是我们的第二个Activity

  

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

                                            

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

                                                                                                

测试

现在我们生成apk。

我们发现,点开之后发现已经不是之前的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;->(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;->(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

试玩

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


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

1.apk反编译


2.查看Androidmanifest.xml文件

                                                                                                                                                                                                                                                                                                                                                                                                                                            

3.尝试跳转

首先来看下我们的跳转。

                                                                                                                                        

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

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

                                                                                                                                           

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

                                 

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


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

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

 

到此,关于"Android基础逆向没怎么实现"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0