Android 逻辑判断修改
使用AS创建一个工程,利用生成工程的初始代码来做。
创建新的layout,在mainactivity中添加新的layout标识。在显示界面的时候加一个判断逻辑,完成后类似如下
if(a==1) {
setContentView(R.layout.activity_main);
}
else
setContentView(R.layout.activity_main2);
}
于是乎,当a为1的时候显示activity_main界面字段。不为1显示activity_main2字段。
一般情况下,对于有些需要内购,或者某些情况才给你显示的界面的时候,界面不是从后端返回而是返回json参数由前端接收显示的时候,可以从前端修改逻辑来绕过判断。
生成smali代码,其中主要部分为下:
.method protected onCreate(Landroid/os/Bundle;)V
.registers 4
.param p1, "savedInstanceState" # Landroid/os/Bundle;
.prologue
.line 17
invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V
.line 18
const/4 v0, 0x0
.line 19
.local v0, "a":I
const/4 v1, 0x1
if-ne v0, v1, :cond_e
.line 20
const v1, 0x7f09001c
invoke-virtual {p0, v1}, Lcom/example/user/application/MainActivity;->setContentView(I)V
.line 24
:goto_d
return-void
.line 23
:cond_e
const v1, 0x7f09001d
invoke-virtual {p0, v1}, Lcom/example/user/application/MainActivity;->setContentView(I)V
goto :goto_d
.end method
整体的代码相当简单轻松,来看判断代码处。
.line 18
const/4 v0, 0x0
.line 19
.local v0, "a":I
const/4 v1, 0x1
if-ne v0, v1, :cond_e
其中if-ne,逻辑显示v0不等于v1,跳转到cond_e标签处。
修改一:
直接修改if-ne判断形式,修改为if-eq,这样只要不完成正常的逻辑操作,都会跳转到我们想看的界面。
修改二:
由于判断处是根据参数a的值和1做对比,所以我们直接对a重赋值(以上的a赋值可以粗略的看为是请求获取的值)。
.line 18
const/4 v0, 0x0
.line 19
.local v0, "a":I
const/4 v1, 0x1
const/4 v0, 0x1
if-ne v0, v1, :cond_e
修改三:
利用强制跳转,在需要去查看,或者执行下去的地方添加标签,goto_1,然后在判断执行前强制跳转进去。
const/4 v1, 0x1
goto :goto_1
if-ne v0, v1, :cond_0
.line 20
:goto_1
const v1, 0x7f09001c