幕后小黑

我的Android逆向学习之旅(三)——实战
本章内容 今天进行一次实战讲解,可能对于很多刚学的人来说可能有点困难,所以我们会在先讲一个Demo逆向破解,然后再...
扫描右侧二维码阅读全文
27
2018/06

我的Android逆向学习之旅(三)——实战

本章内容

今天进行一次实战讲解,可能对于很多刚学的人来说可能有点困难,所以我们会在先讲一个Demo逆向破解,然后再讲一个网上的游戏破解。
所以还先请各位下载好工具,请前往 《我的Android逆向学习之旅(一)—— Smali中的基本类型以及简单的Smali类结构》 下载(找不到的说明没好好读文章,至少前两行没好好去读!)

Demo 逆向破解

首先写一个Demo 代码参考如下

public class MainActivity extends AppCompatActivity {
    Button mLoginBtn;
    EditText mAccount;
    EditText mPasswd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mLoginBtn = findViewById(R.id.login);
        mAccount = findViewById(R.id.account);
        mPasswd = findViewById(R.id.passwd);
        mLoginBtn.setOnClickListener(mOnClickListener);
    }

    View.OnClickListener mOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String account = "Xiaohei";
            String passwd = "123456";
            if(TextUtils.equals(mAccount.getText().toString(),account) && TextUtils.equals(mPasswd.getText().toString(),passwd)){
                Toast.makeText(MainActivity.this,"登陸成功",Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(MainActivity.this,"登陸失敗",Toast.LENGTH_SHORT).show();
            }
        }
    };
}

OK,有能力的自己编译APK或者写代码,没能力的Demo讲解结束的时候会附上Demo APK和Demo源码.

第一步:找文件

由于是自己写的代码所以我们可以快速找到对应的文件,当然后面还会在实战破解游戏的时候去讲查找方法

avatar

第二步:修改分析

接下来找到对应的代码,我们的目的是当我们点击登陆按钮的时候提示登陆成功,而从上面的代码看,只有在帐号是 xiaohei,密码是 123456 才会提示。再不修改帐号密码的情况下我们如何完成这个操作请看下图

avatar

当然除了这种修改还是还有别的方法,大家可以试试思考一下。
Demo APK 以及源码下看这里 ---> 戳我下载

实战逆向破解

实战APK下载 ---> 戳我下载
首先我们打开游戏,看见右边有一个“金币礼包”,点击以后开始播放广告,正常情况下播放玩才有奖励,如果提前关闭就会出现异常的字样,所以我们的目标是不看广告或者不看完广告就能领取奖励,具体情况如下图,只要我们绕过去就好了。
avatar

检索修改代码的位置

这里讲解的是 字符检索发 也就是Demo中的方法,我们在实战用来讲解之前的问题
首先我们用工具打开APK,然后检索字符串 “暂时无法领取”,遗憾的是通过搜索只能检索到下图信息
avatar
avatar

也就是说找不到!为什么?因为Demo里面讲过,在代码中是不支持中文的,所以这个时候我们需要转码!这样搜索框里就得到Unicode码,也就Demo中看到的东西,然后进行搜索。我们就能得到如下信息

avatar
avatar
avatar

这样我们就找到提示异常的地方了!双击搜索结果,我们就可以跳转到对应的Smali文件

avatar

是不是就看见 onError()这个错误函数了,提示的整个文字就都出来了!

代码分析

Smali看代码还是比较吃力的,为了方便起见,这里介绍反编译工具的另外也给功能。

avatar

avatar

是不是瞬间就很容易看出来了。
看到这里我们就能快速修改了。当错误的时候,仅仅就是弹出一个提示就结束了。看下面有成功的代码

int i = (int)(Math.random() * 10.0D + 5.0D);
GameJNI.add(i);

多了两行,从代码来看,是产生了一个随机数活得奖励。那么我们就该只要把奖励的代码挪到失败里面就OK了。当然了,还有一种改法,就是把所有调用 onError 的地方全部换成 onRewar直接跑奖励流程。这里主要还是讲一下直接修改代码吧。至于换调用各位有兴趣的可以自己改改看。

这里我就直接上图了,描述也在图上,看注释就好了。

avatar

这样修改即使提示错误,我们也能获取奖励,毕竟只要我们的奖励函数被调用就OK了

总结

从这里看是不是修改起来破解很容易,我们通过字段查找可以快速的搜索到我们想要修改的地方。然后利用java源码查看工具即可方便的去读代码。当然有人问为什么不直接用java源码去看和修改,因为代码方便以后出现乱码的情况,无法再反编译回去。另外如果代码被混效果看起来也不是这么方便。

当然这个方法不是万能的,因为可能存在一些字段在so中,回调,奖励等代码没有那么容易去找到。那么后面再讲解其他的方法。不过上面这种手段只要破解市面上15%左右的应用是没有问题。

1核/512M/20M独享/洛杉矶/128元/年 ---- 双十一特价 102.4元/年
2核/512M/20M独享/洛杉矶CN2 GT/229元/年/39元/月 ---- 双十一特价 183.2元/年/31.2元/月
2核/1G/5M独享/贵州电信/260元/年/40元/月 ---- 双十一特价 208元/年/32元/月
双十一活动时间:10月29日-11月19日!

Last modification:July 1st, 2018 at 05:45 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment