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




# Android逆向  

tocToc: