安卓移动逆向(二)

大家对反编译以及smali有盲点可以先看看

安卓移动逆向(扫盲)

小实践–破解一个小程序

如何破解

破解Android程序通常的方法是将apk文件利用ApkTool反编译,生成Smali格式的反汇编代码.然后阅读Smali文件的代码来理解程序的运行机制,找到程序的突破口进行修改,最后使用ApkTool重新编译生成Apk文件并签名,最后运行测试,如此循环,直到程序被成功破解.

需要工具

编译工具 : ApkTool

签名工具: SignApk : 链接:http://pan.baidu.com/s/1miwl6lU 密码:ze44

下载完之后 解压目录到path环境变量 你懂得


准备

我们先建立一个自己的App,长得像这样(PS:不愿意自己建有源码下载)

待破解代码

功能就是根据输入的用户名生成注册码,判断输入的注册码和系统算法生成的注册码是否一致,一致则注册成功,软件可用,否则则不可用;

软件

软件核心代码

        findViewById(R.id.act_main_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String userName = etUser.getText().toString().trim();
                String sn = etSN.getText().toString().trim();
                if (checkSN(userName, sn)) {
                    Toast.makeText(MainActivity.this, R.string.string_register, Toast.LENGTH_SHORT).show();
                    tvTitle.setText(R.string.string_success_register);
                } else {
                    Toast.makeText(MainActivity.this, R.string.string_unregister, Toast.LENGTH_SHORT).show();
                }

            }
        });

开始破解

首先我们需要用apktool d appname.apk 进行反编译 如图

反编译

然后生成了一个appName的文件夹 里面就是 那些smali等文件了

之后我们的目的 是找到突破口,什么是突破口?

点击Button之后的提示文字就是突破口

我们进入values中的string.xml找找看

..

开发Android程序时,String.xml文件中的所有字符串资源都在”gen//R.java”文件的String类中被标识,每个字符串都有唯一的int类型索引值,使用ApkTool反编译Apk文件后,所有的索引值保存在string.xml文件同目录下的public.xml中

搜索string_unregister在public.xml中

这里写图片描述

我们发现string_unregister所对应的id为 0x7f060027

书上说需要全局搜索smali文件夹中包含0x7f060027文件的位置,我们知道是在MainActivity中声明的,直接进入即可(PS:惭愧,我不知道如何全局搜索文件内的内容)

我们进入MainActivity$1.smali搜索0x7f060027 如图

这里写图片描述

解析如下

这里写图片描述

按图修改之后,我们进入app文件夹,再次编译打包会在dist中生成一个app,我们现在签名(不签名是无法运行测试的) 如图

这里写图片描述

然后我们进行签名,用我们下载的signapk工具,生成->已签名的App 如图
这里写图片描述

生成之后 我们可以通过adb install signed.apk 安装到手机测试 也可以复制到手机上直接安装,哦,可能会报错

这里写图片描述

把手机上的相同App卸载了即可

安装之后,就这样了

这里写图片描述

参考书籍: Android软件安全与逆向分析

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值