zoukankan      html  css  js  c++  java
  • Android SO UPX壳问题小记

    网上有篇 Android SO(动态链接库)UPX加固指南,详细介绍了如何使用UPX给Android SO加壳,尝试做了一下结果ok,这里只记录遇到的几个小问题。

    1、40k以下so不能加壳

    kiiim@ubuntu:~/src$ upx.out a.out 
                           Ultimate Packer for eXecutables
                              Copyright (C) 1996 - 2011
    UPX 3.08        Markus Oberhumer, Laszlo Molnar & John Reiser   Dec 12th 2011
    
            File size         Ratio      Format      Name
       --------------------   ------   -----------   -----------
    upx.out: a.out: NotCompressibleException                                       
    
    Packed 1 file: 0 ok, 1 error.
    

    解决,添加下面代码


    int const dummy_to_make_this_compressible[10000] = {1,2,3};

    2、无INIT节区的so不能加壳

    kiiim@ubuntu:~/src$ readelf -d a.out 
    
    Dynamic section at offset 0xe28 contains 24 entries:
      Tag        Type                         Name/Value
    0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
    0x000000000000000c (INIT)               0x400460
    0x000000000000000d (FINI)               0x400694
    0x0000000000000019 (INIT_ARRAY)         0x600e10
    
    kiiim@ubuntu:~/src$ upx_diy.out libcmxsecd.so 
                           Ultimate Packer for eXecutables
                              Copyright (C) 1996 - 2016
    UPX 1.02        Markus Oberhumer, Laszlo Molnar & John Reiser   Mar 30th 2016
    
            File size         Ratio      Format      Name
       --------------------   ------   -----------   -----------
    upx_diy.out: libcmxsecd.so: UnknownExecutableFormatException
    
    Packed 0 files.
    

    以上,没有(INIT)的so不能进行加壳,解决办法,通过编译选项加入:

    首先定义一个函数,


    void my_init(){}


    编译时在Android.mk添加编译选项, 


    LOCAL_LDFLAGS += -Wl,-init=my_init

    3、Android N版本更新

    Android N-Preview 即 API24中,为了SO的完整性,加入了对ELF Section Header的校验,而UPX会抹去这块信息,导致SO在dlopen加载时失败

    ChangeLog位置:http://android-developers.blogspot.hk/2016/06/android-changes-for-ndk-developers.html

    想了两个办法,1.手工修复Section Header信息

    http://bbs.pediy.com/showthread.php?t=192874

    但一个必要条件,***直接移动到末尾读取到shstrtab section***无法满足。

    2.查看Google的校验逻辑,针对性绕过;也完成不了,它的逻辑就是解析动态节区信息,与运行时的Segment做比对验证其完整性。而Dynamic节通过Section Header定位的,也就是Section Header信息必修复。

    目前未解决此问题。

    4、关注changelog

    https://www.pysol.org:4443/hg/upx.hg/log

    https://sourceforge.net/p/upx/bugs/

    特别关注下这个讨论:https://sourceforge.net/p/upx/bugs/223/

  • 相关阅读:
    Python自制小时钟,并转换为exe可执行程序详解
    Linux下搭建jmeter
    adb server is out of date. killing完美解决
    Python通过百度Ai识别图片中的文字
    robotframework在3.7下的搭建
    VIVO 手机重力传感器踩坑记录
    GPU 实现 RGB -- YUV 转换 (OpenGL)
    iOS UImage 与 RGB 裸数据的相互转换
    CVPixelBuffer的创建 数据填充 以及数据读取
    glReadPixel 读取数据错误问题
  • 原文地址:https://www.cnblogs.com/gm-201705/p/9864052.html
Copyright © 2011-2022 走看看