UPX编译及so加固

来源 https://www.cnblogs.com/Reverser/p/5778042.html

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

1.download upx和所依赖的组件

upx3.92:https://www.pysol.org:4443/hg/upx.hg/archive/tip.tar.gzLZMA4.43:http://nchc.dl.sourceforge.net/project/sevenzip/LZMA%20SDK/4.43/lzma443.tar.bz2UCL1.03:http://www.oberhumer.com/opensource/ucl/download/ucl-1.03.tar.gzZLIB1.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下

root@study:/home/local/upxmake# ll总用量 24drwxr-xr-x  6 root root  4096  8月 16 10:08 ./drwxr-xr-x  3 root root  4096  8月 16 09:55 ../drwxr-xr-x  5 root root  4096  8月 16 09:55 lzma443/drwxrwxrwx 10 jack users 4096  7月 20  2004 ucl-1.03/drwxr-xr-x  4 root root  4096  8月 16 10:28 upx-hg-22a77e02b61f/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=0x443export 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的文件

root@study:/home/local/upxmake# ./upx-hg-22a77e02b61f/src/upx.outUltimate Packer for eXecutablesCopyright (C) 1996 - 2015UPX 3.92        Markus Oberhumer, Laszlo Molnar & John Reiser  Mar 30th 2015Usage: 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函数

 

反编译看下:

============== End

转载于:https://www.cnblogs.com/lsgxeva/p/11187453.html

UPX编译及so加固相关推荐

  1. android安全检测工具,梆梆安全 - 防止反编译|APP安全加固|应用加固|盗版监测

    android安全检测工具,梆梆安全 - 防止反编译|APP安全加固|应用加固|盗版监测 https://dev.bangcle.com/ 业内专业的应用加固服务供应商 帮助数十万APP抵御破解风险, ...

  2. 压缩加壳工具UPX编译及使用实例

    压缩加壳工具UPX编译及使用实例 压缩加壳工具UPX编译及使用实例 UPX介绍 UPX在debian下编译 UPX使用 压缩加壳工具UPX编译及使用实例 UPX介绍 UPX是一个著名的压缩壳,主要功能 ...

  3. android apk 反编译及第三方加固脱壳

    最近想参考一个第三方APP的功能实现,于是进行一些逆向分析.过程有不少坑,记录一下: step1.通过apktool.jar 工具解压apk文件,得到res资源文件和class.dex安卓可执行文件 ...

  4. ApkTool 反编译Android apk (加固逆向)

    GitHub 源码地址(其实刚开始不必关注源码的实现,我们只需知道如何完成apk的反编译) https://github.com/iBotPeaches/Apktool 我们主要需要一个jar包和 . ...

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

    的参考文章: http://www.cnblogs.com/fishou/p/4202061.html 1.download upx和所依赖的组件 upx3.92:https://www.pysol. ...

  6. UPX对Android上ELF加壳使用过程中的若干问题总结

    1. UPX中使用的压缩算法有三种,最早是UCL,然后加入了NRV,3.91版本又加入了LZMA.按照UPX源码中的文档来说,UCL压缩效率是相对较低的,但是好处是OpenSource的,NRV效率较 ...

  7. jadx-gui-1.4.4 反编译工具使用教程

    文章前言 JDAX-GUI 反编译工具下载使用以及相关技术介绍 现在反编译一个未加固的APP,一般来说有两种方式. 一种是用Jadx-gui,优点是一个软件就帮你将所有活给干了,缺点是如果遇到较大的A ...

  8. 腾讯应用加固的脱壳分析和修复

    新手先收几篇相关文章 本文转自:http://mp.weixin.qq.com/s?__biz=MjM5NzAxMzk4NA==&mid=209300399&idx=1&sn= ...

  9. ApkToolkit安卓反编译工具(超级简单)

    一.下载地址 网盘下载地址 https://pan.baidu.com/s/1Plw0-qyPcqyXn9lOc6Mr5g 官网下载地址 https://ibotpeaches.github.io/A ...

最新文章

  1. highcharts一天时间 与一周时间_如何规划自己一天的时间
  2. 第 16 章 反射(Reflection)
  3. Apache Flink 零基础入门(四)Flink开发批处理应用程序
  4. 数据库的语言——SQL
  5. gridView删除提示框
  6. 回溯求解排列组合(求源码评论区留言)
  7. 实战:Redis 哨兵模式(下)
  8. pip install win32api报错解决方法
  9. python所有软件-一款Python黑客打造的勒索软件,让所有国产杀毒软件升起无力感!...
  10. android 7 audio架构,7.2.1 Audio系统的各个层次
  11. iOS底层探索之多线程(十一)—GCD源码分析(调度组)
  12. JVM 图形化监控工具
  13. 赫兹的单位换算_频率 时间 单位转换
  14. ASP.NET压力测试
  15. c语言 switch case 字符串,C++ switch case详解
  16. Excel字符函数(3):字符查找函数Find、Search
  17. UE4 制作一款动画播放器
  18. 只有蓝色www.zcool.com.cn
  19. 大数据Hadoop、Hive、Kafka、Hbase、Spark等框架面经
  20. 实验吧——WEB-认真一点!

热门文章

  1. 抓包工具Fiddle使用
  2. 计算机保研复习专业课篇(408+数学+部分专业课)
  3. 联想7206打印机清零
  4. 树莓派3B+ WiFi 和 VNC 摄像头 设置 (简单快捷少命令)
  5. 计算机一级电脑在线模拟,2017全国计算机一级考试模拟试题
  6. 五分钟学会ios反编译
  7. 基础DAY16-飞机大战-精灵
  8. 鸿蒙相关的词语,鸿蒙的意思_鸿蒙是什么意思_鸿蒙的近义词_反义词_读音-沪江在线词典...
  9. 人参考基因组不同版本区别 CRCH37 vs b37 vs hg19 vs hsd537 vs GRCH38
  10. GRCh38参考数据分析流程(转)