一个小CM给大家玩玩
本帖最后由 世事繁华皆成空 于 2016-1-2 23:18 编辑本来这个CM是暂时不准备放出来的,结果代码被我弄丢了,只找到一个早期版本,就给大家玩玩把,基本都没有做加密,应该对大家不难
此帖不允许发布答案哦,有答案的欢迎在移动区发帖简述一下思路和手法,有大大的加分的哦
KeyGenMe理当是不能爆破的哦,欢迎算出答案
本帖最后由 熊大猫来了 于 2016-1-2 21:16 编辑
apktool反编译出来有MainActivity、check、a、b四个类,分析了一下smali,b实现的是按钮的listener,a做了初步变换,check用于LoadLibrary调用libcheck.so这个库
大致流程是这样的,onButton获取注册码以后,逐字节转换为十进制ascii,然后和数字4异或,结果保存成十进制字符串的形式,传入so文件,以上步骤可以先静态分析smali文件,然后用Eclipse动态调试smali文件验证分析的正确性。
传送门:使用Eclipse调试反编译的smali http://www.blogfshare.com/eclipse-debug-smali.html
进入so以后难度也不大,调用了库里的Java_com_wuaipojie_crack01_check_mcheck函数(库里说:谁调我?),里面的逻辑也比较简单,主要就是一个Base64,用于比较的死码是这个“MzY0MTMyMzIzNTEyNjEyNDEyNTEyMg==”
结果先不说了,上面的流程说的也比较笼统,因为我也是刚入Android坑一个多月的菜鸟,通过看帖子和调一些程序发现其实有的帖子像写实验说明书一样一步步手把手教你并不见得就是最好的,对我们新手来说最好还是能通过自己查找各种资料摸索着走一下这一套流程,发现问题,分析问题,通过自己的途径解决问题,其实比知道结果收获大得多。(好吧其实还是因为我懒)
有个小问题,lib文件夹下有两个目录,一个arm的一个x86的,我分析的时候用的x86的,想来两个逻辑应该一样,x86的分析起来顺手。然后分析完了想IDA远程调试一下,发现必须用arm的打开才能选Android的远程调试器,结果打开以后是这样的
求大神来解答 0x6ed0a348 com/wuaipojie/crack01/a a (Ljava/lang/String;I)Ljava/lang/String; (null) -1
0x6ed0a380 com/wuaipojie/crack01/a a ([I)Ljava/lang/String; (null) -1
0x6ecfd9c0 com/wuaipojie/crack01/b onClick (Landroid/view/View;)V (null) -1
0x6ecdb1b0 com/wuaipojie/crack01/MainActivity a (Lcom/wuaipojie/crack01/MainActivity;)Landroid/widget/EditText; (null) -1
0x6ecdb1e8 com/wuaipojie/crack01/MainActivity b (Lcom/wuaipojie/crack01/MainActivity;)Landroid/widget/TextView; (null) -1
0x6ed0a3f0 com/wuaipojie/crack01/check <clinit> ()V (null) -1
0x6ed0a428 com/wuaipojie/crack01/check mcheck (Ljava/lang/String;)Z (null) -2
.class Lcom/wuaipojie/crack01/b;
.super Ljava/lang/Object;
# interfaces
.implements Landroid/view/View$OnClickListener;
# instance fields
.field final synthetic a:I
.field final synthetic b:Lcom/wuaipojie/crack01/MainActivity;
# direct methods
.method constructor <init>(Lcom/wuaipojie/crack01/MainActivity;I)V
.locals 0
iput-object p1, p0, Lcom/wuaipojie/crack01/b;->b:Lcom/wuaipojie/crack01/MainActivity;
iput p2, p0, Lcom/wuaipojie/crack01/b;->a:I
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public onClick(Landroid/view/View;)V
.locals 3
iget-object v0, p0, Lcom/wuaipojie/crack01/b;->b:Lcom/wuaipojie/crack01/MainActivity;
invoke-static {v0}, Lcom/wuaipojie/crack01/MainActivity;->a(Lcom/wuaipojie/crack01/MainActivity;)Landroid/widget/EditText;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/String;->isEmpty()Z
move-result v1
if-eqz v1, :cond_0
iget-object v0, p0, Lcom/wuaipojie/crack01/b;->b:Lcom/wuaipojie/crack01/MainActivity;
const-string v1, "\u4e0d\u80fd\u4e3a\u7a7a\u7684\u54e6"
const/4 v2, 0x0
invoke-static {v0, v1, v2}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V
:goto_0
return-void
:cond_0
iget v1, p0, Lcom/wuaipojie/crack01/b;->a:I
invoke-static {v0, v1}, Lcom/wuaipojie/crack01/a;->a(Ljava/lang/String;I)Ljava/lang/String;
move-result-object v0
invoke-static {v0}, Lcom/wuaipojie/crack01/check;->mcheck(Ljava/lang/String;)Z
move-result v0
iget-object v0, p0, Lcom/wuaipojie/crack01/b;->b:Lcom/wuaipojie/crack01/MainActivity;
invoke-static {v0}, Lcom/wuaipojie/crack01/MainActivity;->b(Lcom/wuaipojie/crack01/MainActivity;)Landroid/widget/TextView;
move-result-object v0
const-string v1, "\u606d\u559c\uff0c\u4f60\u7adf\u7136\u731c\u4e2d\u7684\u5c0f\u660e\u7684\u5fc3\u601d"
invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
iget-object v0, p0, Lcom/wuaipojie/crack01/b;->b:Lcom/wuaipojie/crack01/MainActivity;
invoke-static {v0}, Lcom/wuaipojie/crack01/MainActivity;->b(Lcom/wuaipojie/crack01/MainActivity;)Landroid/widget/TextView;
move-result-object v0
const v1, -0xff0100
invoke-virtual {v0, v1}, Landroid/widget/TextView;->setTextColor(I)V
goto :goto_0
:cond_1
iget-object v0, p0, Lcom/wuaipojie/crack01/b;->b:Lcom/wuaipojie/crack01/MainActivity;
invoke-static {v0}, Lcom/wuaipojie/crack01/MainActivity;->b(Lcom/wuaipojie/crack01/MainActivity;)Landroid/widget/TextView;
move-result-object v0
const-string v1, "\u6ca1\u6709\u8fd9\u4e48\u7b80\u5355\u5427"
invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
iget-object v0, p0, Lcom/wuaipojie/crack01/b;->b:Lcom/wuaipojie/crack01/MainActivity;
invoke-static {v0}, Lcom/wuaipojie/crack01/MainActivity;->b(Lcom/wuaipojie/crack01/MainActivity;)Landroid/widget/TextView;
move-result-object v0
const/high16 v1, -0x10000
invoke-virtual {v0, v1}, Landroid/widget/TextView;->setTextColor(I)V
goto :goto_0
.end method
CM shi啥么 楼主大大换头像了、、、 CM是啥么 http://www.52pojie.cn/thread-55905-1-1.html
CM是什么?crackme是什么?这是什么东西?LZ发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 cracker,想挑战一下其它 cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破。
KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳
善用搜索。随手就回复问CM是啥看着都心累 晕,安卓的啊。我还意思是exe呢!术业有专攻,我不会安卓的,哈哈 感谢大大,一会下载了试试。 支持下新版块了。 感谢大大, 还不许爆破!!!