Android Crackme分析

本文详细介绍了Android平台下的两个Crackme挑战,通过反编译APK为smali代码进行分析。作者首先解析了Crackme01的关键算法,通过分析callYailPrimitive函数确定了比大小的逻辑。接着,分析了Crackme02,发现验证条件包括name的长度至少为1,并揭示了序列号的计算方法。整个过程提升了作者对smali代码的理解和技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Crackme01

APKtools反编译成smali代码 定位到关键部位如下:

invoke-static {v1}, Lcom/google/youngandroid/runtime;->sanitizeComponentData(Ljava/lang/Object;)Ljava/lang/Object;
    move-result-object v1
    sget-object v2, Lappinventor/ai_garikoitzmartinez/crackme01/Screen1;->Lit35:Lgnu/math/IntNum; #V2=0x2E812
    invoke-static {v1, v2}, Lgnu/lists/LList;->list2(Ljava/lang/Object;Ljava/lang/Object;)Lgnu/lists/Pair;
    move-result-object v1
sget-object v2, Lappinventor/ai_garikoitzmartinez/crackme01/Screen1;->Lit36:Lgnu/lists/PairWithPosition;
    const-string v3, ">"
    invoke-static {v0, v1, v2, v3}, Lcom/google/youngandroid/runtime;->callYailPrimitive(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    move-result-object v0
    sget-object v1, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean; #v1=false
    if-eq v0, v1, :cond_0   #v0=v1  Ôòʧ°Ü  Sv0ÒªÎªÕæ
    sget-object v0, Lappinventor/ai_garikoitzmartinez/crackme01/Screen1;->Lit0:Lgnu/mapping/SimpleSymbol;
    invoke-static {v0}, Lcom/google/youngandroid/runtime;->lookupInCurrentFormEnvironment(Lgnu/mapping/Symbol;)Ljava/lang/Object;
    move-result-object v0
    sget-object v1, Lappinventor/ai_garikoitzmartinez/crackme01/Screen1;->Lit13:Lgnu/mapping/SimpleSymbol;
 
    const-string v2, "Crackme01!  << by deurus >> - Good boy!"    


如果是爆破的话,把False改成true即可。而我想的是分析下这个cm的算法,于是开始向上走起了。因为v1False,所以v0要为True

V0-->callYailPrimitive(,,,)返回过来的,找到这函数:

.method public static callYailPrimitive(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    .locals 3
    .parameter "prim"      对应V0 为函数返回值
    .parameter "arglist" 对应V1
    .parameter "typelist" 对应V2 Lit36
.parameter "codeblocks$Mnname" 对应V3 = “>”


因此另外几个参数也要知晓才好分析,于是继续往上看 v3= ‘>’,然后又继续往上看,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值