UC安卓逆向面试第二题——ARM逆向练手

原程分析链接:https://blog.csdn.net/qq1084283172/article/details/52133172 

样本下载地址:https://pan.baidu.com/s/10DuffiXUWCrCNoeH9pWw-Q      提取码: f4b9

为了更加熟练的掌握ARM逆向,找了几个程序来练手,这个就是其中一个。

 

1. 拿到apk就直接用 jdx 加载看吧,首先看 AndroidManifest.xml 

很清楚可以看到,程序没有加壳处理

包名叫: com.ucweb.crackme140522 

入口Activity为: com.ucweb.crackme140522.MainActivity

 

2. 既然没有加壳,直接去 com.ucweb.crackme140522.MainActivity 看java代码吧

这里的 java 代码比较简单,取了手机imei,用户输入的userName,注册码sn 就通过 JNI 调用 so 函数 clacSnFuntion

3. 既然如此,那么开始用 IDA 打开 UCcrackme2/lib/armeabi/libclacSn.so ,然后进行分析 Java_com_ucweb_crackme140522_MainActivity_clacSnFuntion 函数

函数大概意思如下:

bool Java_com_ucweb_crackme140522_MainActivity_clacSnFuntion(
    JNIEnv *env, 
    jobject clazz, 
    jobject imei, 
    jobject userName, 
    jobject sn)
{
    bool check_result = false;
    if (imei == NULL || userName == NULL || sn == NULL)
    {
        return check_result;
    }
    char* szimei = (char*)jstringTostring(env, imei);
    char* szuserName = (char*)jstringTostring(env, userName);
    char* szsn = (char*)jstringTostring(env, sn);
    check_result = check_sn(szimei, szuserName, szsn);
    free(szimei);
    free(szuserName);
    free(szsn);
    return check_result;
}

4. 发现校验函数在 check_sn 函数里面,但是双击进去,嗯哼?这是什么鬼

5. 这么多红红的,这个函数肯定是不对的。so 在加载的时候还会调用初始化函数。(Linux so加载流程: https://www.cnblogs.com/vendanner/p/4979177.html

所以按 Shift+F7 打开程序段

双击进入 .init_array 段

发现 init 段 直接就 -1,没有其他函数,所以修改函数不是在 init 里面处理的 

6.  除了so加载的机制外,在Android中加载so,加载以后会主动调用 JNI_OnLoad 函数(Android加载so流程: https://shuwoom.com/?p=351

函数比较复杂,粗略的看了下,就是在 JNI_OnLoad 函数里面做的手脚

7. 这个可以慢慢跟踪看看,为了方便大家跟踪,我把整个 JNI_OnLoad 函数逆向回C语言表述,流程跟汇编流程是一样的(F5插件出来流程上下关系会乱一点)

直接贴代码吧,还原各位对着C代码都跟踪下 JNI_OnLoad。特别是解密字符串部分,跟踪完一定会有收获的,加油

// so中加密的函数数组存储 
unsigned char __data_start[0x414] = {
    0xA5, 0x1A, 0x78, 0xBC, 0x4D, 0xD1, 0xCA, 0xB0, 0x4D, 0x61, 0xCA, 0xB0, 0x2C, 0x8A, 0x18, 0xB7, 
    0x5D, 0xD5, 0xDA, 0xB5, 0x55, 0x65, 0xD8, 0xB0, 0x56, 0x65, 0xCD, 0xB2, 0x4D, 0x35, 0xD8, 0xB7, 
    0x55, 0x15, 0xF5, 0xB6, 0x55, 0xB5, 0xC6, 0xB0, 0x59, 0x65, 0xD3, 0xB7, 0x51, 0x15, 0xD6, 0xB1, 
    0x65, 0x05, 0xD8, 0xB7, 0x59, 0x95, 0xD0, 0xB7, 0x51, 0x15, 0xD6, 0xB1, 0x51, 0x15, 0xD9, 0xB1, 
    0x55, 0x15, 0xD6, 0xB0, 0xB5, 0x66, 0xCA, 0xB0, 0x51, 0x15, 0xD9, 0xB1, 0x55, 0x15, 0xD9, 0xB0, 
    0x8D, 0x96, 0xCA, 0xB0, 0x49, 0x65, 0xD8, 0xB0, 0x54, 0x61, 0xD6, 0xB7, 0x56, 0x63, 0x16, 0xB7, 
    0x61, 0x95, 0xD8, 0xB0, 0x74, 0x6B, 0x16, 0xB7, 0x91, 0x96, 0xCA, 0xB0, 0x75, 0x65, 0xD8, 0xB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值