吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14721|回复: 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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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, 2025-4-19 12:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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