吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14577|回复: 14
收起左侧

[Android KeyGenMe] 一个Crackme

[复制链接]
qtfreet00 发表于 2016-2-26 14:05
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

纯java编写,无混淆,无壳,什么阻碍都没有,不可以爆破,欢迎练手

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 3吾爱币 +1 热心值 +3 收起 理由
52lxw + 1 + 1 我很赞同!
2864095098 + 1 热心回复!
windwing1883 + 1 59194+10个随机数字

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lakshmi 发表于 2016-2-29 16:54
本帖最后由 lakshmi 于 2016-2-29 17:36 编辑

长度为15位数字,但是只取了前五位,后十位为任意数字均可,前五位采用爆破的方式:
[Java] 纯文本查看 复制代码
        public static void main(String[] args) {
                long i=10000;
                for(;i<99999; i++){
                        if(crack(i)){
                                System.out.println("Res: " + i);
                        
                        }
                }
                
        }
        public static boolean crack(long reg)
        {
                long  v8 = 0;
                int v3=0;
                char[] v0 = new char[6];
        String v1 = String.valueOf(((65362 ^ reg) + 1555) / 3 - 1555).trim();
        v8 = ((long)v1.length());
        v1.getChars(0, ((int)v8), v0, 0);
        if(v8 < 4) {
            long v6 = 4 - v8;
            for(v3 = ((int)(v8 - 1)); v3 >= 0; --v3) {
                v0[((int)((((long)v3)) + v6))] = v0[v3];
            }

            for(v3 = 0; v3 < (((int)v6)); ++v3) {
                v0[v3] = '0';
            }
        }
        String v2 = "104672819202";
        
        for(v3 = 1; v3 <= 4; ++v3) {
                
            if(v0[v3 - 1] != v2.charAt(v3 - 1)) {
                return false;
            }
        }
        return true;

        }


结果(在这些结果后边任意添加10位数字都能注册成功):
Res: 31104
Res: 31105
Res: 31106
Res: 31107
Res: 31108
Res: 31109
Res: 31110
Res: 31111
Res: 31120
Res: 31121
Res: 31122
Res: 31123
Res: 31124
Res: 31125
Res: 31126
Res: 31127
Res: 31128
Res: 31129
Res: 31130
Res: 31131
Res: 31132
Res: 31133
Res: 31134
Res: 31135
Res: 31208
Res: 31209
Res: 31212
Res: 31213
Res: 31214
Res: 31215
Res: 59192
Res: 59194
Res: 59195

取出输入的前五位进行次方运算
((65362 ^ reg) + 1555) / 3 - 1555)
在把运算结果变成六位数,
       v8 = ((long)v1.length());
        v1.getChars(0, ((int)v8), v0, 0);
        if(v8 < 4) {
            long v6 = 4 - v8;
            for(v3 = ((int)(v8 - 1)); v3 >= 0; --v3) {
                v0[((int)((((long)v3)) + v6))] = v0[v3];
            }

            for(v3 = 0; v3 < (((int)v6)); ++v3) {
                v0[v3] = '0';
            }
然后扔掉后两位,只是比较前4位。
如果不爆破,用逆推的方式, 丢掉的两位就有100种可能,除法取整(余数有0,1,2)有三种可能,目前就有了300中可能(大概运算哈), 然后剔除掉不满足次方运算的数,就是运算结果。


免费评分

参与人数 1热心值 +1 收起 理由
qtfreet00 + 1 已答复!

查看全部评分

冥界3大法王 发表于 2018-2-11 19:42
.class Lcom/example/crackme/MainActivity$1;
.super Ljava/lang/Object;
.source "MainActivity.java"

# interfaces
.implements Landroid/view/View$OnClickListener;


# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
    value = Lcom/example/crackme/MainActivity;->onCreate(Landroid/os/Bundle;)V
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x0
    name = null
.end annotation


# instance fields
.field final synthetic this$0:Lcom/example/crackme/MainActivity;

.field private final synthetic val$edt:Landroid/widget/EditText;


# direct methods
.method constructor <init>(Lcom/example/crackme/MainActivity;Landroid/widget/EditText;)V
    .locals 0

    .prologue
    .line 1
    iput-object p1, p0, Lcom/example/crackme/MainActivity$1;->this$0:Lcom/example/crackme/MainActivity;

    iput-object p2, p0, Lcom/example/crackme/MainActivity$1;->val$edt:Landroid/widget/EditText;

    .line 19
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method


# virtual methods
.method public onClick(Landroid/view/View;)V
    .locals 6
    .param p1, "v"    # Landroid/view/View;

    .prologue
    const/16 v5, 0xf

    const/16 v4, 0x3e8

    .line 24
    iget-object v2, p0, Lcom/example/crackme/MainActivity$1;->val$edt:Landroid/widget/EditText;

    invoke-virtual {v2}, Landroid/widget/EditText;->getText()Landroid/text/Editable;

    move-result-object v2

    invoke-interface {v2}, Landroid/text/Editable;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v2}, Ljava/lang/String;->trim()Ljava/lang/String;

    move-result-object v1

    .line 25
    .local v1, "regcode":Ljava/lang/String;
    invoke-virtual {v1}, Ljava/lang/String;->length()I

    move-result v2



    .line 26
    const/4 v0, 0x0

    .line 27
    .local v0, "i":I
    :goto_0
   

    .line 39
    invoke-static {v1}, Lcom/example/crackme/MainActivity;->check(Ljava/lang/String;)Z

    move-result v2



    .line 40
    iget-object v2, p0, Lcom/example/crackme/MainActivity$1;->this$0:Lcom/example/crackme/MainActivity;

    const-string v3, "注册成功"

    invoke-static {v2, v3, v4}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    move-result-object v2

    invoke-virtual {v2}, Landroid/widget/Toast;->show()V

    .line 45
    .end local v0    # "i":I
    :cond_0
    :goto_1
    return-void

    .line 28
    .restart local v0    # "i":I
    :cond_1
    invoke-virtual {v1, v0}, Ljava/lang/String;->charAt(I)C

    move-result v2

    const/16 v3, 0x30

    if-lt v2, v3, :cond_0

    invoke-virtual {v1, v0}, Ljava/lang/String;->charAt(I)C

    move-result v2

    const/16 v3, 0x39

    if-gt v2, v3, :cond_0

    .line 32
    add-int/lit8 v0, v0, 0x1

    goto :goto_0

    .line 36
    .end local v0    # "i":I
    :cond_2
    iget-object v2, p0, Lcom/example/crackme/MainActivity$1;->this$0:Lcom/example/crackme/MainActivity;

    const-string v3, "请输入正确的注册码"

    invoke-static {v2, v3, v4}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    move-result-object v2

    invoke-virtual {v2}, Landroid/widget/Toast;->show()V

    goto :goto_1

    .line 42
    .restart local v0    # "i":I
    :cond_3
    iget-object v2, p0, Lcom/example/crackme/MainActivity$1;->this$0:Lcom/example/crackme/MainActivity;

    const-string v3, "注册失败"

    invoke-static {v2, v3, v4}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    move-result-object v2

    invoke-virtual {v2}, Landroid/widget/Toast;->show()V

    goto :goto_1
.end method
shuimaaa 发表于 2016-2-26 14:12
amscracker 发表于 2016-2-26 14:15
大大们又开始玩java的了
头像被屏蔽
LCG丶Ran 发表于 2016-2-26 14:42
提示: 作者被禁止或删除 内容自动屏蔽
windwing1883 发表于 2016-2-26 14:46
59194+任意10位数字@世事繁华皆成空
lindian 发表于 2016-2-26 15:03
windwing1883 发表于 2016-2-26 14:46
59194+任意10位数字@世事繁华皆成空

有这么快?
求魔 发表于 2016-2-26 15:12
好专业的样子哦
 楼主| qtfreet00 发表于 2016-2-26 15:54
windwing1883 发表于 2016-2-26 14:46
59194+任意10位数字@世事繁华皆成空

欢迎写出分析思路哦
fxb960704 发表于 2016-2-28 09:06 来自手机
算法确实够乱的,不让暴力破解就不会了
2864095098 发表于 2016-2-28 12:43
弄了半天还是搞不清思路
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 18:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表