一个入门级的Crackerme2之安卓逆向分析

本文记录了一个移动安全工程师对Crackerme2应用的逆向分析过程,通过分析so库调用,理解了注册流程中的加密逻辑,并用Python代码实现了破解。

一个入门级的Crackerme2之安卓逆向分析

0x1:前言

还有半年的时间就要毕业了,目标的职位是移动安全工程师,从今天起开始记录下自己日常的一些工作。今天的这个样本是在吾爱破解论坛(www.52pojie.cn)中看到的一个帖子,该帖子是分析文档。所以在看分析文档前,先自己尝试破解下。
#0x2:任务要求
在2个输入框中输入某些值,然后点击注册,提示注册成功就挑战成功

在这里插入图片描述

0x3:分析过程

  1. 首先打开AndroidKiller找到关键点进行分析:直接找到button的点击事件看看
    事实上,我使用红色细线以及绿色方框标注的地方就是本次程序的第一个分析点了.我们可以看到stringFormJNI是一个native的函数,证明它调用了so库文件.非常明显.它对应的so文件就是 **System.loadLibrary **这段代码里面的东西了.
    在这里插入图片描述
    下面这个就是它的一个so文件.我们用IDA来分析它. (我用的IDA7.0)
    在这里插入图片描述

  2. 我们用IDA打开它.然后找到stringFromJNI函数,双击进去,然后F5看C伪代码
    在这里插入图片描述
    我们看到的C代码如下.
    在这里插入图片描述

这里我自己先修改下它的名称,为了方便我们阅读代码(重命名变量按"N"键)
在这里插入图片描述

简单阅读上面代码.我们可以了解到.我们的一个username是经过一个n函数进行了一次加密. code经过了c函数的一次加密.然后把2个结果进行比较.如果结果相等,就成功,否则失败!
4. 进入n函数和c函数进行查看.这里我直接把他们翻译成了Python代码
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

0x4:代码编写

c函数比较简单,看源码就知道了,后面是字符串转数字后异或0x1256.这里用c把它逆写一下.源码如下
`#include <stdio.h>
#include <string.h>

int __cdecl n(char *a1)
{
    int v2;  // [esp+4h] [ebp-14h]
    char v3; // [esp+Fh] [ebp-9h]
    int v4;  // [esp+10h] [ebp-8h]
    int i;   // [esp+14h] [ebp-4h]
 
    v4 = 0;
    for (i = 0; a1[i]; ++i)
    {
        v3 = a1[i];
        if (v3 < 65)
            break;
        if (v3 <= 90)
            v2 = v3;
        else
            v2 = v3 - 32;
        v4 += v2;
    }
    return v4 ^ 0x9988;
}
 
int __cdecl keygen(char *v4)
{
    int v6 = n(v4);
    int v7 = v6 ^ 0x1256;
    char code[256] = {0};
    int v2 = v7;
    int i;
    for (i = 0; v2 > 10; ++i)
    {
        code[i] = v2 % 10 + 48;
        v2 = v2 / 10;
    }
    code[i] = v2 + 48;
    printf("keygen:%s", code);
    return 0;
}
 
int main()
{
    char user[256] = {0};
    printf("please input name:");
    scanf("%s", user);    
    keygen(user);
    return 0;
}

然后我们就把它干掉啦~
在这里插入图片描述

0x5:总结

  1. 此次遇到了调用so库的APP,难度应该是比简单的java层搞了一点点.但是在强大的工具帮助下.我们依然可以很轻易的分析它.俗话说:工欲善其事,必先利其器
  2. 编程基础要加强.在代码编写这边弄了很久! 基础不牢,地动山摇!(要系统的学习一遍才行)
    具帮助下.我们依然可以很轻易的分析它.俗话说:工欲善其事,必先利其器
  3. 编程基础要加强.在代码编写这边弄了很久! 基础不牢,地动山摇!(要系统的学习一遍才行)
  4. 早点睡觉.晚安哟~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值