zoukankan      html  css  js  c++  java
  • 【移动安全基础篇】——21、Android脱壳思路

    1. Apk dex  加固
    目前存在对 apk 中的 class.dex 进行加密的技术,即加壳。通过对 dex 文件的加壳,可以达到减小文件大小,隐藏真实代码的效果。
    2.  运行时解密
    与 windows 上的 shell 一样,Android 加壳程序在程序运行时,先到达壳的入口点,运行解壳代码,然后再到达程序入口点,运行代码。而要脱壳则要在程序解码完毕后,到达程序真实入口点中间某个位置,把原始的 dex 代码给 dump 出来,还原到 apk 文件中。
    3.  一个简单 demo
    入口点改变:
    壳入口:

    程序入口:

    壳代码中 Java 层转 jni 层

    jni 层中解密 dex 数据,还原并替换为原始 Application 数据,内存中获取到原始数据后,即可直接放到原始的 apk 文件中。所关注的加密文件是 cls.jar 和 juice.data

    JNI_OnLoad 函数(注册 native 函数)还原:

    parse_dex 函数完成对 dex 文件的解密和还原

    对 parse_dex 进行调试

    程序在断点处中断

    动态调试得到原始 dex 文件被解密出来的存放地址

    cls.jar 文件在解密后是原始的 class.dex 文件
    Dump 脚本:IDC

    dex 文件在内存中的大小为

    但是 dump 出来的 dex 文件打开后没有函数的真实代码

    原理是程序执行之后再会对函数的真实代码进行还原openDexFile:将内存中的 dex 文件转换为 DexOrJar 结构体Dex 文件的新地址:

    然后重新 dump 出文件

    不过新 dump 出来的文件存在解析错误

    错误原因是 dump 出的 dex 文件不包括完整数据,需要将遗漏的数据补充进来

    然后计算出完整文件的大小重新 dump

    最后看到 dump 出的 dex 文件能够正常打开,脱壳步骤已经完成了重新分析下对内存数据进行修正的函数

    该循环中对 dex 数据进行修正 将 dump  出来的数据反编译为 smali  代码,然后将该 smali  代码替换掉程序中的原有代该码,然后删掉壳的入口点,重新编译之后该 app  成功脱壳。

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    【转载】SAP_ECC6.0_EHP4或SAP_ECC6.0_EHP5_基于Windows_Server_2008R2_和SQL_server_2008下的安装
    使用delphi 开发多层应用(二十四)KbmMW 的消息方式和创建WIB节点
    使用delphi 开发多层应用(二十三)KbmMW 的WIB
    实现KbmMw web server 支持https
    KbmMW 服务器架构简介
    Devexpress VCL Build v2014 vol 14.1.1 beta发布
    使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器
    KbmMW 4.50.00 测试版发布
    Basic4android v3.80 beta 发布
    KbmMW 认证管理器说明(转载)
  • 原文地址:https://www.cnblogs.com/devi1/p/13486441.html
Copyright © 2011-2022 走看看