美文网首页Android安全-逆向信息安全网络安全实验室
Android 逆向工程 —— Android 原生程序逆向 1

Android 逆向工程 —— Android 原生程序逆向 1

作者: 半人前 | 来源:发表于2017-02-26 17:18 被阅读858次

    APK 下载
    破解后的 APK

    在对基于 Android NDK 的 APP 进行逆向之前,我们首先要熟悉 ARM 汇编
    一个还不错的 ARM 汇编博客

    这次的 APP 是《Android 软件安全与逆向分析》中的教学 APP

    我们的目标是破解这个 APP,在没有注册码的情况下也能使用程序的完整功能

    首先我们用 jadx-gui 查看程序的结构

    看到程序有 5 个类,其中我们感兴趣的是 MainActivity、MyApp 和 RegActivity,先来分析这三个

    1. MainActivity

    这个启动程序后看到的第一个 Activity,这个 Activity 通过判断 Application 里的 m 值来确定显示的字符串是什么版本的,如果是未注册版则会调用 doRegister 函数,要求用户注册。
    一个自然的想法是在 Smali 文件中修改 m 值,尝试后发现只能修改显示的字符串,但并不能用到完整的功能

    2. MyApp

    这个类继承于 Application 类,所以这个类会在应用开始时首先加载。一般来说,继承于 Application 类的类会对程序做一些初始化的操作。例如这里加载了共享库 "juan" 并调用了原生函数 initSN

    3. RegAcitivity


    这是用于注册的 Activity,由于我们是要破解这个 APP,所以并不关心这个 Activity

    分析完这三个类之后,发现破解的重点在于 initSN 函数,从函数名上看,这是用于初始化序列号的,我们只要修改这个函数,使所有的字符串都能用于注册就应该能够达到破解的目的

    用 IDA 载入共享库

    1. 现在函数列表里找找有没有看起来像 initSN 的函数,通常来说如果这些函数是静态注册的,那么在函数列表中就会有函数名类似于 “包名_函数名” 的函数,仔细查找后并没有发现
    2. 如果这些函数不是静态注册的,那么只能是在 JNI_OnLoad 函数中注册了其他函数与原 JAVA 层中的函数相关联
    3. 查看 JNI_OnLoad 函数,导入 jni.h 并在结构体中导入 JNINativeMethod 和 JNINativeInterface 结构体
    4. F5


    5. 看到第 13 行调用了 RegisterNatives 函数,在 jni.h 文件中查找 RegisterNatives 函数


    6. 从 RegisterNatives 函数的原型可以看到,函数接受三个参数,其中第三个参数是 JNINativeMethod 结构体数组,对应于程序中的实参就是 _data_start
    7. 双击 _data_start



      可以看到在 JNI_OnLoad 函数中将 initSN 函数映射成了 n1 函数,将 saveSN 函数映射成了 n2 函数,将 work 函数映射成了 n3 函数

    8. 查看 n1 函数



    9. 根据刚开始的分析,这里的 result 很大可能就是 Application 里的 m 值。而且,这段代码的判断逻辑有点特别,它读取 /sdcard/reg.dat 文件中的内容,将内容先与 “25d55ad283aa400af464c76d713c07ad” 相比较,如果相等则将 result 赋为 1,不相等则继续下面的比较,直到判断是否与 “18e56d777d194c4d589046d62801501c” 相等,是则将 result 赋为 4,否则将 result 赋为 0,即试用版
    10. 分析出判断逻辑之后,我们其实只要把最后一次判断的结果改为恒为相等就行了,找到对应的汇编代码

      CMP R0, #0 修改为 CMP R0, R0,这样判断结果就恒为真了
    11. 记下这条语句的地址 0x000015FC,用 WinHex 打开该 so 文件,定位到该地址,将 00 00 50 E3CMP R0, #0 对应的机器码)修改为 00 00 50 E1CMP R0, R0 对应的机器码),并保存
    12. 重新打包 APK 并签名,破解成功

    相关文章

      网友评论

      本文标题:Android 逆向工程 —— Android 原生程序逆向 1

      本文链接:https://www.haomeiwen.com/subject/qtmgwttx.html