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/

  • 相关阅读:
    HDU1720 A+B Coming
    HDU1390 ZOJ1383 Binary Numbers
    HDU1390 ZOJ1383 Binary Numbers
    HDU2504 又见GCD
    HDU2504 又见GCD
    HDU1335 POJ1546 UVA389 UVALive5306 ZOJ1334 Basically Speaking
    HDU1335 POJ1546 UVA389 UVALive5306 ZOJ1334 Basically Speaking
    HDU1020 ZOJ2478 Encoding
    HDU1020 ZOJ2478 Encoding
    HDU2097 Sky数
  • 原文地址:https://www.cnblogs.com/gm-201705/p/9864052.html
Copyright © 2011-2022 走看看