qtfreet00 发表于 2015-5-21 14:05

一个安卓小crack,欢迎尝试



网上一个demo进行了改动,欢迎爆破和研究加密算法

苏紫方璇 发表于 2015-5-21 15:43

取用户名md5,然后取奇数位字符

xeldax 发表于 2017-12-13 14:33

小白留爪


> smali跳转去做就没意义了


## dex -> jar后的源代码
直接看按钮onClick部分
```
public void onClick(View paramView)
{
    switch (paramView.getId())
    {
    default:
      return;
    case 2131230724:
      if (!checkSN(this.edit_userName.getText().toString().trim(), this.edit_sn.getText().toString().trim()))
      {
      Toast.makeText(this, 2131034123, 0).show();
      return;
      }
      Toast.makeText(this, 2131034124, 0).show();
      this.btn_register.setEnabled(false);
      setTitle(2131034122);
      return;
    case 2131230723:
    }
    checkSNfalse(this.edit_userName.getText().toString().trim(), this.edit_sn.getText().toString().trim());
    this.btn_answer.setVisibility(8);
}
```
校验在checkSN
```

private boolean checkSN(String paramString1, String paramString2)
{
    if (paramString1 != null)
      try
      {
      if (paramString1.length() == 0)
          return false;
      if ((paramString2 != null) && (paramString2.length() == 16))
      {
          Object localObject = MessageDigest.getInstance("MD5");
          ((MessageDigest)localObject).reset();
          ((MessageDigest)localObject).update(paramString1.getBytes());
          paramString1 = toHexString(((MessageDigest)localObject).digest(), "");
          localObject = new StringBuilder();
          int i = 0;
          while (true)
          {
            if (i >= paramString1.length())
            {
            paramString1 = ((StringBuilder)localObject).toString();
            Log.e("TAG", paramString1);
            if (!paramString1.equalsIgnoreCase(paramString2))
                break;
            return true;
            }
            ((StringBuilder)localObject).append(paramString1.charAt(i));
            i += 2;
          }
      }
      }
      catch (NoSuchAlgorithmException paramString1)
      {
      paramString1.printStackTrace();
      }
    return false;
}
```
可以看到这个算法就是将你的输入的字符串做MD5后取偶数位

## 解决脚本
```
import hashlib
str1 = '123'
str2 = ''
a =hashlib.md5()
a.update(str1)
str1 = a.hexdigest()
m = 0
while True:
        if m >= len(str1):
                print str2
                break
        str2 += str1
        m += 2
```

YsGer 发表于 2015-5-21 14:29

沙发 板凳{:1_912:}

利赦 发表于 2015-5-21 15:50

好吧,楼上有大神解了。

wokl168 发表于 2015-5-21 17:20

干什么用的?不懂。

苏紫方璇 发表于 2015-5-21 19:13

被你发现了,忘记截一张不按作弊按钮的图了

hnicf 发表于 2015-5-22 22:21

syrmb 发表于 2015-6-13 21:33

对用户名进行md5之后 取0 2 4 6 8....

B6B6B6 发表于 2015-6-14 10:00

本帖最后由 B6B6B6 于 2015-6-19 19:14 编辑

感谢分享crackme!

非法菜鸟 发表于 2015-12-29 21:30

.line 116
    invoke-direct {p0, v0, v1}, Lcom/droider/crackme0201/MainActivity;->checkSN(Ljava/lang/String;Ljava/lang/String;)Z

    move-result v0

    .line 117
if-nez v0, :cond_0   ->if-eqz v0, :cond_0       更改跳转方式

    .line 119
    const v0, 0x7f05000b

    .line 118
    invoke-static {p0, v0, v2}, Landroid/widget/Toast;->makeText(Landroid/content/Context;II)Landroid/widget/Toast;

    move-result-object v0

    .line 119
    invoke-virtual {v0}, Landroid/widget/Toast;->show()V

    goto :goto_0

    .line 122
    :cond_0
    const v0, 0x7f05000c
页: [1] 2 3 4
查看完整版本: 一个安卓小crack,欢迎尝试