ubuntu14.04 x86编译upx 3.92 及so加固

的参考文章:

http://www.cnblogs.com/fishou/p/4202061.html

1.download upx和所依赖的组件

upx3.92:https://www.pysol.org:4443/hg/upx.hg/archive/tip.tar.gz

LZMA4.43:http://nchc.dl.sourceforge.net/project/sevenzip/LZMA%20SDK/4.43/lzma443.tar.bz2

UCL1.03:http://www.oberhumer.com/opensource/ucl/download/ucl-1.03.tar.gz

ZLIB1.2.3http://pkgs.fedoraproject.org/repo/pkgs/zlib/zlib-1.2.3.tar.gz/debc62758716a169df9f62e6ab2bc634/zlib-1.2.3.tar.gz

2.解压到/home/local/upx下

 1 [email protected]:/home/local/upxmake# ll
 2
 3 总用量 24
 4
 5 drwxr-xr-x  6 root root  4096  8月 16 10:08 ./
 6
 7 drwxr-xr-x  3 root root  4096  8月 16 09:55 ../
 8
 9 drwxr-xr-x  5 root root  4096  8月 16 09:55 lzma443/
10
11 drwxrwxrwx 10 jack users 4096  7月 20  2004 ucl-1.03/
12
13 drwxr-xr-x  4 root root  4096  8月 16 10:28 upx-hg-22a77e02b61f/
14
15 drwxr-xr-x 11  501    80 4096  7月 18  2005 zlib-1.2.3/

3.设置环境变量

export UPX_ZLIBDIR=/home/local/upxmake/zlib-1.2.3/

export UPX_DIR=/home/local/upxmake/upx-hg-22a77e02b61f/

export UPX_LZMA_VERSION=0x443

export UPX_UCLDIR=/home/local/upxmake/ucl-1.03/

export UPX_LZMADIR=/home/local/upxmake/lzma443/

注:这种方式设置的环境变量只在当前shell环境下有效 当我们在另外一个shell环境下输入:env |grep UPX是没有显示结果的

4.进入到/home/local/upxmake/upx-hg-22a77e02b61f/的根目录下make all进行编译

  如果在编译的过程中提示:找不到zlib.h 这个错误是因为zlib包没有安装,安装后问题即可解决。但有一点请注意安装命令是:

  sudo apt-get install zlib1g-dev,而非sudo apt-get install zlib

  如果提示 usr/bin/ld: cannot find -lucl 参考:http://www.jb51.net/LINUXjishu/211594.html

  usr/bin/ld: cannot find -lxxx错误的通用解决方法

执行:apt-get install libucl-dev即可

5.编译成功的话 在$(UPX_ROOT)|src下生成一个upx.out的文件

[email protected]:/home/local/upxmake# ./upx-hg-22a77e02b61f/src/upx.out

Ultimate Packer for eXecutables

Copyright (C) 1996 - 2015

UPX 3.92        Markus Oberhumer, Laszlo Molnar & John Reiser  Mar 30th 2015

Usage: upx.out [-123456789dlthVL] [-qvfk] [-o file] file..

Commands:

-1    compress faster                  -9    compress better

-d    decompress                        -l    list compressed file
.....................

UPX comes with ABSOLUTELY NO WARRANTY; for details visit http://upx.sf.net

使用UPX进行android so加固

在native代码中:

1.在native代码中定义全局变量用于增加生成的二进制的体积,否则会提示错误:

   编译UPX出现“NotCompressibleException”错误。

分析:UPX对被加壳的二进制文件有最小限制,太小的文件将无法被加壳。

解决方案:在native代码中定义足够大的数据变量,使得编译出来的二进制文件容易达          到UPX的要求

         C:int const dummy_to_make_this_compressible[100000] = {1,2,3};

         C++:extern "C" int const dummy_to_make_this_compressible[100000] = {1,2,3};

2.要加壳的so需要有_init段

    编译UPX出现“UnknownExecutableFormatException”错误。

分析:被加壳的二进制文件必须存在init段,否则UPX将无法脱壳还原原始代码。

解决方案:在native代码中定义_init()方法,需要注意C和C++的区别

 //在native代码添加_init段
void _init(void)
{
}

注:_init并非区段,只是一个导出函数.NDK会生成对应的区段并融合在某个大区段中,所以你从区段表看不到它

我们以一个简单的例子libhello.so为例子hello.c代码如下

#include <jni.h>
 void _init(void)
 {

 }

/** jni规定 本地方法名 Java_调用本地方法类所在的包名_类名_方法名
 *    JNIEnv * env    java环境,提供函数供调用
 *    jobject obj     调用本地方法的对象
 *
 *    typedef const struct JNINativeInterface* JNIEnv;
 *    JNIEnv <=> struct JNINativeInterface*
 *    env : JNIEnv * <=> struct JNINativeInterface**
 *    (*env)->NewStringUTF();
 */
jstring Java_com_itheima_helloworld_MainActivity_helloFromC(JNIEnv *env, jobject obj){

    // 把C字符串转化为java中字符串
    return (*env)->NewStringUTF(env,"hello world");
}

用readelf工具查看libhello.so是否有_init段

正如前面所说的 section table没有_init段

readelf -S libhello.so

使用readelf -d libhello.so 可以看到_INIT

将libhello.so放在  ($UPX_ROOT)|src目录下进行加壳 执行

使用upx加壳的so的section table被抹除了

我们用IDA对比下libhello.so加密的效果

未加密效果:代码是赤裸裸的啊

upx加密后:

1.section table信息抹除了

2.看下jni函数

 

反编译看下:

时间: 2024-12-23 12:19:32

ubuntu14.04 x86编译upx 3.92 及so加固的相关文章

【转】Linux(ubuntu14.04)上编译Android4.4源码的环境搭建及编译全过程

原文网址:http://jileniao.net/linux-android-building.html sublime text让我伤心.本来很信任sublime text的自动保存功能,之前使用一直很给力的,但这次让我伤心欲绝啊. 关于Linux(ubuntu14.04)上编译Android源码的环境搭建详细过程都是在sublime text中编辑好的,无奈,这次的数据丢失让我不得不重新来回想手打一次了.可能很多细节问题,这次重新编辑文章时不会记得那么清晰了,还请有问题的朋友在下面留言给我就

Ubuntu14.04 Chromium 编译

1.下载depot_tools: 首先安装 git-core: sudo apt-get install git-core 执行命令: git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 2.更新depot_tools: 直接在当前shell环境输入: export PATH="$PATH:depot_tools_dir/depot_tools"; 或加如系统环境变量: vim ~/.ba

linux Ubuntu14.04 make编译文件报错:No rule to make target `/usr/lib/libpython2.7.so&#39;, needed by `python/_pywraps2.so&#39;. Stop.

错误过程:当“make”编译文件时报错No rule to make target `/usr/lib/libpython2.7.so', needed by `python/_pywraps2.so'.  Stop. 解决过程: 1.首先输入命令以下代码获取其出错原因 make --debug 错误提示如下,很明显是项目工程找不到它,原因有两个,一是系统没有装libpython2.7.os:二是装了,路径错误,或者名字不对 File '/usr/lib/libpython2.7.so' doe

Ubuntu14.04 64bit编译u-boot-2016.07提示 Your dtc is too old, please upgrade to dtc 1.4 or newer

Author:AP0904225版权声明:本文为博主原创文章,转载请标明出处. Ubuntu14.04 64bit环境下编译u-boot-2016.07提示如下错误: CHK include/config/uboot.releaseCHK include/generated/version_autogenerated.hCHK include/generated/timestamp_autogenerated.hUPD include/generated/timestamp_autogenera

在ubuntu14.04上编译android4.2.2系统

原创作品,转载请注明出处,严禁非法转载             copyright:weishusheng   2015.8.1 时下android系统非常流行,下面就来说一下,下载编译一个android系统的过程.此处仅是我个人开发过程的总结和记录,想获取更详细资料,可参考官方文档. 环境: 电脑:Lenovo 32位  2G内存(编译android明显不够,后面会说到如何增加swap存储容量) 主机:VMware10.0.0+ubuntu14.04 android版本:android4.2.

[Ubuntu] Ubuntu14.04 64bit 编译安装nginx1.7+php5.4+mysql5.6

我的操作系统是Ubuntu14.04,其它linux系统的操作流程类似. 主要安装的软件是nginx1.7+php5.4+mysql5.6 1. 创建必要目录 sudo mkdir ~/setup sudo mkdir /opt/software sudo chmod 777 /opt/software 2. 下载必要软件 cd ~/Downloads wget http://am1.php.net/distributions/php-5.4.29.tar.gz tar zxvf ~/Downl

Ubuntu14.04 64bit 编译安装nginx1.7+php5.4+mysql5.6

我的操作系统是Ubuntu14.04,其它linux系统的操作流程类似. 主要安装的软件是nginx1.7+php5.4+mysql5.6 1. 创建必要目录 sudo mkdir ~/setup sudo mkdir /opt/software sudo chmod 777 /opt/software 2. 下载必要软件 cd ~/Downloads wget http://am1.php.net/distributions/php-5.4.29.tar.gz tar zxvf ~/Downl

ubuntu14.04系统编译3.16.1内核

我的完全是新系统(刚装上并且进行了更新20140906) 下载linux-3.16.1系统并解压到/usr/src/下: mkproper 无法执行此命令,表示缺少相关软件,上网安装即可. sudo apt-get install ncurses-dev make menuconfig 采用的方法是直接导入本机已有的.config文件,未做更改. 开始编译: make bzImage 编译成功后会显示相关的成功的信息. make modules 以上完成的内核和模块的编译,以下进行安装: mak

Ubuntu14.04下编译安装Vim74+Vim-gdb

一.准备工作 1.下载Vim74和适合7.4版本的vim-gdb: (1)vim7-4.tar.bz2 (2)vimgdb-for-7.4 2.卸载已存在的vim以及相关组件 如果已经通过软件中心安装了vim,则需要将其卸载 sudo apt-get remove vim vim-runtime gvim 可能还需要移除以下的包: sudo apt-get remove vim-tiny vim-common vim-gui-common 3.安装依赖环境 手动编译安装Vim74,首先先安装编译