Android逆向小实例(2)

本题基于攻防世界的一道题

1. MD5加密

MD5加密是一种常用的加密算法,全称为“Message-Digest Algorithm 5”,即消息摘要算法,由MD2、MD3、MD4演变过来的,是一种单向加密算法,是一种不可逆的加密方式。
MD5优点:
压缩性:任意长度的数据,算出的MD5值长度都是固定的(16字节)。
容易计算:从原数据计算出MD5值很容易。
抗修改性:对原数据进行任何改动,所得到的MD5值都有很大区别。
强抗碰撞:已知原数据和其MD5值,想找到一个相同MD5值得数据是非常困难的。

2. 分析

直接用JEB反汇编出这个apk文件,直接分析代码的实现过程。
常规审计先看MainActivity的 OnCrate,在OnCrate中会看到Onclick,分析代码可知:

image

当函数 checkSN()不成立,界面会显示 2131099678 位置的字符,当函数 checkSN()成立,界面会显示 2131099675 位置的字符,然后我们看一下这两个位置的字符的具体内容(此类内容一般存在R类中):

image

最后分析checkSN()函数:

// 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)
MessageDigest v1 = MessageDigest.getInstance("MD5");
/*java.security.MessageDigest类的reset()方法用于将当前消息摘要值重置为此MessageDisgest对象的默认消息摘要值。*/
v1.reset(); 
// 输入的字符串转换成字节数组,并进行MD5加密
v1.update(arg11.getBytes());
/* java.lang.Integer.toHexString() 方法返回为无符号整数基数为16的整数参数的字符串表示形式(十六进制)*/
String v3 = MainActivity.toHexString(v1.digest(), "");
//字符串连接
StringBuilder v5 = new StringBuilder();
int v4;
for(v4 = 0; v4 < v3.length(); v4 += 2) {
    v5.append(v3.charAt(v4)); //v5即为flag
    }
if(!"flag{" + v5.toString() + "}".equalsIgnoreCase(arg12)) {
    return v7;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。