crackme.apk分析实例

样本2crackme与注册码破解

apk运行

apk运行效果:随意输入不能注册

目标:破解注册码

在这里插入图片描述

分析apk

GDA打开

从onclick到access2最后到checkSN函数,发现最后的注册码逻辑

该关键函数代码如下,解读代码逻辑就是:

读取username,将其转换成md5,然后将md5字符串间隔(2个2个)生成一个子串。子串则是username对应的sn。对比用户输入的sn和由用户名生成的规则的sn,如果一致,那么就能成功注册。

private boolean MainActivity.checkSN(String userName,String sn)	//method@0b9d
{
     MessageDigest v1;
     byte[] bytes;
     String v3;
     StringBuilder v5;
     int v4;
     String userSN;
     boolean v7 = false;
     if ((!userName)||((userName.length())&&((sn)&&(sn.length() == 16)))) {	
         v1 = MessageDigest.getInstance("MD5");
         v1.reset();
         v1.update(userName.getBytes());//获取字符串bytes数组
         bytes = v1.digest();//md5加密
         v3 = MainActivity.toHexString(bytes, "");//变成hex
         v5 = new StringBuilder();
         v4 = 0;
         while ((v4 < v3.length())) {	
             v5 = v5.append(v3.charAt(v4));//charAt获取对应index的字符
             v4 = v4+2;
         }	
         userSN = v5.toString();
         if (userSN.equalsIgnoreCase(sn)) {	
             v7 = true;
         }	
     }	
     return v7;
}

在这里插入图片描述

破解注册码

  • 方法1:网上md5在线计算

md5在线计算 - StrErr.com

在这里插入图片描述

将结果隔一个取成新的字符串。

  • 方法2:自己编写脚本
import hashlib

data = input()
data = bytes(data,encoding='utf-8')###注意在md5加密之前,要将字符串变成bytes类型

m = hashlib.md5()  # 创建md5对象

m.update(data)  # 更新md5对象

t= m.hexdigest()  # 返回md5对象

print(t[::2])

在这里插入图片描述

方法1 2 结果都是一样的。

验证并破解apk

在这里插入图片描述

注:该apk是一次性的,也就是说,点过注册按钮之后,关掉重新启动才会正常。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值