demo还是上一次的demo,这次我们更改一下Button逻辑,改成跳转。
这里跳转到我们新建的Activity。
使用Intent进行跳转,Intent相当于一个载体。
具体代码如下:
Intent i=new Intent(MainActivity.this,Main2Activity.class); startActivity(i);
首先来看下Androidmanifest.xml的内容
<?xml version="1.0" encoding="utf-8"?><manifest> <application> <activity> <intent-filter> <action></action> <category></category> </intent-filter> </activity> <activity></activity> </application></manifest>
在这里我们可以看到有两个Activity。
这里有两个Activity,那么app是怎么识别那个是最先启动的Activity呢。
这里我们对比一下两个Activity的区别。
这是第一个Activity
<activity> <intent-filter> <action></action> <category></category> </intent-filter> </activity>
这个是我们的第二个Activity
<activity></activity>
是不是区别很明显,一个有一大堆的内容,一个只有一句话。
所以我们的重点就是:
<intent-filter> <action></action> <category></category> </intent-filter>
很容易就发现是因为这个所以才是最先启动的。
我们来做一个简单的测试。
我们把这个移动一下位置。
现在Androidmanifest,xml是这个样子。
<activity> <intent-filter> <action></action> <category></category> </intent-filter> </activity>
现在我们生成apk。
我们发现,点开之后发现已经不是之前的Activity,而是我们之后自己添加的Activity。
基于这个思路,我们可以想嘛,如果有第三方的Activity注入,我们是不是可以通过改变启动的Activity从而避开一些验证问题。
恩,之后通过实战来进行一个测试。
有到了学习smali的时候到了。可能很无聊吧,但是写的人却是很有兴趣呢。
废话不说,开始吧。
恩。在$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</init>
这里我们不一句一句翻译,想看的回去翻之前的内容,很多。
我们来看这里的主要代码:
新建一个 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</init>
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语言是因为学习时坚持不懈地敲了许多代码并完成了几个项目。
样本为了方便我就传在百度云里了
原APK:链接:https://pan.baidu.com/s/1pMwcuef 密码:a673
不知道为什么我的夜深模拟器打不开了。试试别的模拟器。
一打开游戏,就弹出个这个界面,很不喜欢,我想直接弹出我的游戏界面。
好,我们用我们刚开始的技能。
<activity></activity> <activity></activity> <activity> <intent-filter> <action></action> <category></category> </intent-filter> </activity> <intent-filter> <action></action> <category></category> </intent-filter> <category></category> <category></category> <activity></activity>
首先来看下我们的跳转。
<intent-filter> <action></action> <category></category> </intent-filter> <category></category> <category></category>
跳转的Activity名称为:cn.cmgame.billing.api.GameOpenActivity,Gameopen。。。恩,这是什么唉,好奇怪。但是呢,肯定就是我们打开的界面。恩。我觉得这个有点重要,以后可能会涉及到。所以还是找个小本子记下来。我应该建立一个小本子。
我们来看一下我们的Activity。
<activity></activity><activity></activity>
这里有两个Activity:
第一个Activity的name:android:name="MainActivity"
第二个Activity的name:android:name="LogActivity"
作为开发人员,MainActivity,就是一个开始恩。我们直接开始更改。
<intent-filter> <action></action> <category></category> </intent-filter> <category></category> <category></category>
这个是修改后的Activity。
其实我也只是对
<action></action> <category></category>
这两句有了解。但是还有三句是什么,一起来看一下吧。关于测试的问题,我们学习完之后再进行测试吧。
首选是
<category></category>
<category></category>
这两个直接挪过去,直接失败。所以,还是分析一下吧。
刚才说的
<category></category>
这句就是必须的。
还有两句
<category></category>
Das obige ist der detaillierte Inhalt vonDas grundlegende Reverse Engineering von Android ist nicht sehr gut implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!