Android逆向之条件跳转改变以及变量赋值

1.目的

使用jeb对apk文件进行反编译, 观察代码逻辑,判断找出要修改的位置

通过apktool解析apk,修改smali文件中的部分内容达到以下效果:

1) 改变if条件跳转的方向

2) 给某个关键变量赋予新的值

 

2.平台及工具:

win10

android studio, apktool, jeb

 

apktool的下载地址

https://ibotpeaches.github.io/Apktool/

3.实验步骤

(1)打开android studio新建一个项目,主要代码如下:

 

public class MainActivity extends AppCompatActivity {

    TextView
textView;
    private int
k;

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
       
setContentView(R.layout.activity_main);
       
textView = findViewById(R.id.text);
       
k = 1;
        if
(mTest(k) == 100){
           
textView.setText("k is "+k);
       
}else{
           
textView.setText("k is not 100");
       
}

    }

   
private int mTest(int num){
       
return num+1;
   
}
}

 

为了方便,使用as在debug下的默认签名来签名生成的apk

 

 

(2) 将apk用模拟器和jeb打开查看如下:

 

 

以上为MainActivity对应的smali文件中的内容,按Tab键可切换为熟悉的java源代码,且光标停在的位置与smali对应,方便查找要修改的位置

 

 

将光标停在if后,按tab键,返回到smali文件中对应的位置。

If-ne表明v0 (mTest函数的返回结果)和v1 (100)不相等时,将要跳转到 :74的位置,

即textView中显示”k is not 100”这块代码的位置。

 

显然 k+1 = 2 != 100, 显示的内容正如模拟器中看到的 ”k is not 100”

 

通过修改smali文件的部分内容后,再重新打包签名apk,可使跳转进入另一个分支。

修改方式

  1. if-ne修改为if-eq
  2. 在判断前将v0的值修改为100(或者将v1的值修改为2)

 

(3) 用apktool解析apk

命令行下输入apktool d app-debug.apk -o output

 

之后在产生的output文件夹中找到MainActivity.smali, 以下是通过Notepad++打开并修改

将if-ne改为if-eq:

 

 

或者在if-ne判断之前修改v0的值为100

 

以上两种方法都可以实现分支的跳转

保存后再次来到apktool.bat所在目录对output文件夹进行编译:

apktool b output -o changed.apk

生成名为changed.apk,此时还无法安装,需要进行签名:

Note:签名是对要发布的apk文件作标记,确保你的apk文件有唯一的身份归属认证,只有相同签名和相同包名的文件才可以覆盖安装并保留用户信息,显然这方便了app的升级操作。

对于反编译修改过的apk,由于我们使用的签名一般不可能和原作者的签名相同,好比我们写不出别人的字迹一样,盗版与正版一目了然。

使用指令生成key store:

keytool -genkey -alias demo.keystore -keyalg RSA -validity 10000 -keystore demo.keystore

之后按要求可随意输入内容,完成后生成一个demo.keystore文件

参数解释:

-genkey 产生证书文件
-alias 产生别名,名称随意
-keystore 指定密钥库的.keystore文件中
-keyalg 指定密钥的算法,这里指定为RSA(非对称密钥算法),默认使用DSA加密
-validity 为证书有效天数,这里我们写的是10000天

 

这一步实际上是android studio的Generate Signed Bundle or APK中create new key store这个功能,所以完全可以用as产生一个key store:

 

签名APK:

输入:

jarsigner -verbose -keystore demo.keystore changed.apk demo.keystore

回车后会要求输入生成demo.keystore时设置的密码。

参数解释:

-verbose 指定生成详细输出
-keystore 指定数字证书存储路径

 

最后记得将原来安装的卸载,因为签名已经更换,否则会安装失败

 

模拟器运行截图:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值