码迷,mamicode.com
首页 > 移动开发 > 详细

Android学习心得(11) --- MAC下Android反编译(3)

时间:2015-08-08 10:32:01      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:android   反编译   mac   apktool   dex2jar   

我在博客上发表一些我的Android学习心得,希望对大家能有帮助。
在前一章我们学习了反编译。
这一章再次学习一下两个demo。


两个demo下载地址
KeygenMe#1.apk crackme0a.apk
链接: http://pan.baidu.com/s/1kTs11Tt 密码: davk


KeygenMe#1.apk

1、首先在模拟器安装测试
技术分享

由于模拟器检测不到wifi mac地址,所以会报错。
我们首先需要将检测代码跳过
先通过dex2jar和jd-gui查看源代码进行分析

技术分享

查看了main.class文件中,
在public static String _activity_create(boolean paramBoolean)方法中找到了判断wifi的语句,
由于模拟器不能接入wifi网络,所以必须跳过才能继续下去

技术分享

使用apktool工具反编译

技术分享
技术分享

通过goto :cond_1来直接跳过上面if语句,跳转到label229标签处

技术分享

使用apktool和signapk.jar

技术分享
技术分享

重新安装后又显示检测IMEI错误

技术分享

重新打开,发现通过跳转代码,再查看源代码直接就跳过了wifi验证

技术分享

下面继续通过上面提示的错误信息,来进行查找

技术分享

错误显示由_emulator_dete1()函数产生,在main.smali中找到此函数

技术分享
技术分享

跳过判断语句,添加goto语句,直接跳过判断语句,修改完成后我们进行验证破解。

技术分享

由于这里需要读取key.txt文件,在解压出来的apk中没找到此文件,所以最终还是进行跳转破解了  
判断函数是_check_code(),我们需要其每次进行判断都是正确

技术分享

修改if-eqz为if-nez,则不管输入什么都能验证成功(除了正确的验证码)

技术分享


crackme0a.apk

我们第一件事情就是安装后进行初步查看

技术分享
技术分享
主要功能是通过输入的code来验证
下面我们通过dex2jar和jd-gui来进行查看源代码

技术分享

验证的函数是validateSerial()函数

技术分享

在validateSerial()函数中,最重要的是generateIDHash()函数

技术分享

下面,我自己通过generateIDHash()函数编写一个注册机代码
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Test t = new Test();
        System.out.println(t.generateIDHash());
    }


    private String generateIDHash() {
        int k;
        String str = "IMEI code";
        MessageDigest localMessageDigest = null;
        try {
            localMessageDigest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        localMessageDigest.update(str.getBytes(), 0, str.length());
        byte[] arrayOfByte1 = localMessageDigest.digest();
        byte[] arrayOfByte2 = new byte[arrayOfByte1.length];
        int i = 0;
        int j = 0;
        while (true) {
            if (i >= arrayOfByte1.length)
                return new BigInteger(1, arrayOfByte2).toString(16).substring(0, 15);
            if (i >= -1 + arrayOfByte1.length)
                k = 0;
            else
                k=i+1;
            arrayOfByte2[j] = (byte)(arrayOfByte1[i] ^ arrayOfByte1[k]);
            i += 2;
            ++j;
        }
    }
}

最开始的str是输入你自己手机的IMEI码,通过计算后会得出验证code

技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android学习心得(11) --- MAC下Android反编译(3)

标签:android   反编译   mac   apktool   dex2jar   

原文地址:http://blog.csdn.net/qiyu93422/article/details/47344739

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!