精华内容
参与话题
问答
  • 加壳

    2013-11-26 13:51:24
    加壳的全称应该是可执行程序资源压缩,是保护文件的常用手段.  加壳过的程序可以直接运行,但是不能查看源代码.要经过脱壳才可以查看源代码.  加壳:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩、加密。...
    加壳的全称应该是可执行程序资源压缩,是保护文件的常用手段.
      加壳过的程序可以直接运行,但是不能查看源代码.要经过脱壳才可以查看源代码.
      加壳:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩、加密。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。它们附加在原程序上通过Windows加载器载入内存后,先于原始程序执行,得到控制权,执行过程中对原始程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。加上外壳后,原始程序代码在磁盘文件中一般是以加密后的形式存在的,只在执行时在内存中还原,这样就可以比较有效地防止破解者对程序文件的非法修改,同时也可以防止程序被静态反编译。
      解压原理,是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。现在的CPU都很快,所以这个解压过程你看不出什么东西。软件一下子就打开了,只有你机器配置非常差,才会感觉到不加壳和加壳后的软件运行速度的差别。当你加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当你执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。所以,这些的工作只是在内存中运行的,是不可以了解具体是怎么样在内存中运行的。通常说的对外壳加密,都是指很多网上免费或者非免费的软件,被一些专门的加壳程序加壳,基本上是对程序的压缩或者不压缩。因为有的时候程序会过大,需要压缩。但是大部分的程序是因为防止反跟踪,防止程序被人跟踪调试,防止算法程序不想被别人静态分析。加密代码和数据,保护你的程序数据的完整性。不被修改或者窥视你程序的内幕。
      加“壳”虽然增加了CPU负担但是减少了硬盘读写时间,实际应用时加“壳”以后程序运行速度更快(当然有的加“壳”以后会变慢,那是选择的加“壳”工具问题)。
      一般软件都加“壳”这样不但可以保护自己的软件不被破解、修改还可以增加运行时启动速度。
      加“壳”不等于木马,我们平时的绝大多数软件都加了自己的专用“壳”。
      RAR和ZIP都是压缩软件不是加“壳”工具,他们解压时是需要进行磁盘读写,“壳”的解压缩是直接在内存中进行的,用RAR或者ZIP压缩一个病毒你试试解压缩时杀毒软件肯定会发现,而用加“壳”手段封装老木马,能发现的杀毒软件就剩不下几个。
      木马加壳的原理很简单,在黑客营中提供的多数木马中,很多都是经过处理的,而这些处理就是所谓的加壳。当一个EXE的程序生成好后,很轻松的就可以利用诸如资源工具和反汇编工具对它进行修改,但如果程序员给EXE程序加一个壳的话,那么至少这个加了壳的EXE程序就不是那么好修改了,如果想修改就必须先脱壳。
      加壳工具通常分为压缩壳和加密壳两类。
      压缩壳的特点是减小软件体积大小,加密保护不是重点。目前兼容性和稳定性比较好的压缩壳有
      UPX(官方主页:http://upx.sourceforge.net/),
      ASPack(官方主页:http://www.aspack.com/),
      PECompact(官方主页:http://www.bitsum.com/)等。
      加密壳种类比较多,不同的壳侧重点不同,一些壳单纯保护程序,另一些壳提供额外的功能,如提供注册机制、使用次数、时间限制等。
      目前比较流行的壳有:
      ASProtect(官方主页:http://www.aspack.com/),
      EXECrptor(官方主页:http://www.strongbit.com/),
      Themida(官方主页:http://www.oreans.com/),
      EncryptPE(官方主页:http://www.encryptpe.com/),
      TTProtect(官方主页:http://www.ttprotect.com/),
      Armadillo(官方主页:http://www.siliconrealms.com/)。
    展开全文
  • java加壳的问题

    2011-11-17 17:10:31
    在C世界,对代码进行加密,主要通过加壳的方式。所谓加壳,就是先将程序代码加密,然后用特定的程序加载器,将代码解密后加载进内存,这样可以在防止代码的反编译,当然,有加壳工具,也有解壳工具,虽然不能100%...
  • Nov 01 22:54:09.125: vmx| CPUID[0] level 00000003, 0: 0x00000000 0x00000000 0x00000000 0x00000000 Nov 01 22:54:09.125: vmx| CPUID[0] level 00000004, 0: 0x00000000 0x00000000 0x00000000 0x00000000 ...
  • UPX加壳

    2020-08-21 12:52:45
    UPX加壳器系统结构:UPX加壳器======窗口程序集1||||------_按钮1_被单击||||------__启动窗口_创建完毕||||------_拖放对象1_得到文件||||------__启动窗口_将被销毁||||------_按钮2_被单击||||------_选择
  • Virbox Protector Standalone 加壳工具 此版本为试用版,需申请使用许可,免费申请使用,试用申请地址:shell.virbox.com 防止代码反编译,更安全,更方便 产品简介 Virbox Protector Standalone提供了强大的代码...
  • 给winfrom做的项目 进行加壳 项目加壳,保证了软件的代码的安全,有漏洞无风险
  • 这个加壳软件功能强大,拥有全面的功能和技术,保护程序不被逆向分析、修改或重建代码。虚拟机技术的应用,可以保护程序重要代码在虚拟的CPU环境中执行,这样使得重要代码不可能被分析破J。授权系统可以给软件添加...
  • 该技术可以有效的防止逆向分析、被破解、被加壳等问题。 第五种 apk加壳解壳 加壳的程序可以有效阻止对程序的反汇编分析,以达到它不可告人的目的。这种技术也常用来保护软件版权,防止被软件破解。
  • 专门针对Exe与dll的加壳与脱壳工具 EXE程序万能自动脱壳机 C32Asm linxeUnpaker Krykiller 北斗星压缩加壳V4.1 PeP 是强大的 Win32 应用程序保护工具,支持所有流行开发工具:Asm, C++, VC++, Delphi 和其它。本程序...
  • 原创软件加壳方案,可C/C++实现,无需写汇编代码。 软件加壳方案 1 1. 方案概况 2 1.1. 方案概况图 2 1.2. 执行过程 2 2. 预备知识 3 2.1. 从EntryPoint到main() 3 2.2. 镜像基地址 3 2.3. 地址重定位 3 2.3.1. 全局...
  • 折腾一天,终于搞定了(收1分,折腾一天不容易哈),之前一直对包含资源文件的apk加壳运行不通过,这个demo实现了对包含资源文件的apk进行加壳,demo里面包含了所有的工程和最后完整加壳的apk,参考博客:...
  • 并执行它,把当前EXE文件内嵌的被加壳程序拷贝到临时文件中,临时文件是在原文件名之前加上,最后SizeOf(LockedFile)字节是密码等信息,不需要读取到临时文件中,此时,临时文件实际上就是被加壳的原程序,设置文件为...
  • 软件、程序加壳: 可以保护自己的程序!避免别人盗用!
  • 木马加壳软件——Aspack木马加壳工具,操作简便,无需注册
  • apk加壳demo

    千次下载 热门讨论 2014-12-26 11:10:12
    参照Jack_Jia加壳代码写的一个demo。过程说明可以查看我写的博客。
  • 石器时代加壳工具石器时代加壳工具石器时石器时代加壳工具代加壳工具
  • C#加壳方案

    2018-07-21 16:16:43
    C#加壳方案 混淆加密C#加壳方案 混淆加密C#加壳方案 混淆加密C#加壳方案 混淆加密C#加壳方案 混淆加密C#加壳方案 混淆加密
  • Android SO 加壳

    千次阅读 2016-07-11 19:17:06
    android so加壳

    Android SO(动态链接库)UPX加固指南

    前言

             随着移动互联网的爆发性增长,人们对移动应用的需求变得越来越复杂,企业在带给用户众多便利和享受的同时,却容易忽视应用自身的安全性问题,一旦遭受攻击,就会给企业和用户的经济或声誉带来影响。本文主要是站在企业的角度,阐述如何通过给android SO(动态链接库)加壳来提升移动APP的安全性,减少SO被逆向反汇编分析的风险。

    注:本文只做单方面的总结,如果对整体提升移动应用安全性有需求的人员,可参考作者另外一份文档:《移动应用安全开发指南v1.0(Android)》。

    撰写本文的目的

    1、  为移动应用开发人员提供安全加固技术指导,作为发布时加固的实际依据。

    2、  对实施过程做详细的记录和总结,为需要单独创建加固环境的人员提供具体细节,避免或少走弯路。

    建议使用方法:

             对于需要创建加固环境的人员,请阅读“创建加固环境”章节,对于只需要在加固环境下对SO加固的人员(比如开发人员),只需了解“加固步骤”章节即可。

    创建加固环境(X64 Linux)

    1、下载UPX和依赖组件的源码

    UPX -3.92-src:https://www.pysol.org:4443/hg/upx.hg/archive/tip.tar.gz

    注:v3.92为写本文档时的最新官方非正式发布版本(正式发布版本为v3.91)

    下载入口如下:

    clip_image002

    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.3:http://pkgs.fedoraproject.org/repo/pkgs/zlib/zlib-1.2.3.tar.gz/debc62758716a169df9f62e6ab2bc634/zlib-1.2.3.tar.gz

    2、删除UPX壳描述信息

    编辑$(UPX_SRC_ROOT)/src/packer.cpp,删除该文件中定义的关于UPX壳的相关描述信息(详情请参考附录à相关问题总结5.5)。

    clip_image004

    3、编译

    3.1、编译zlib:

    tar zxvf zlib-1.2.3.tar.gz

    cd zlib-1.2.3

    make //编译生成libz.a

    cp libz.a /usr/lib64/libz.a //拷贝到系统默认的动态链接库路径下。

    clip_image006

    clip_image008

    3.2、编译UPX并执行

    cd $(UPX_SRC_ROOT)  //进入UPX源码根目录

    CXX=g++ UPX_UCLDIR=/home/soft/ucl-1.03 UPX_LZMADIR=/home/soft/lzma-4.43 UPX_LZMA_VERSION=0x443  make all  //编译UPX

    说明:UPX_UCLDIR和UPX_LZMADIR的值分别为UCL和LZMA解压后的根路径,UPX_LZMA_VERSION环境变量则指定了LZMA的版本。

    编译成功后可在$(UPX_SRC_ROOT)/src下查看到可执行文件upx.out,如下图所示:

    clip_image010

    执行效果如下:

    clip_image012

    加固步骤

    1、配置NDK集成开发环境

             参考附录《配置和使用NDK集成开发环境》的《配置步骤》章节。

    2、修改native代码

    2.1、在native代码中定义全局变量用于增加生成的二进制的体积,例如:

             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.2、在native代码中声明_init()函数,用于在编译时生成_init段,例如:

             C:void _init(void){}

             C++:extern "C" {void _init(void){}}

             注意:C和C++代码定义或声明的方式是有所区别的,在C++中必须使用extern “C”关键          字进行修饰,被extern "C"修饰的变量和函数是按照C语言方式编译和连接的

    2.3、在native代码中使用宏定义混淆函数名,用于增加静态反汇编分析难度,例如:

             #define startSimpleWifi sSW

             #define sendData sD

             ……

    3、对SO库文件加壳

    3.1、打开cygwin,进入Android工程目录,在NDK环境中编译native代码(详情可参考         附录《配置和使用NDK集成开发环境》的《编译native代码》章节),也可以通过CDT        自动编译(参考《配置和使用CDT编译环境》),编译通过后将在libs目录下生成SO    动态链接库文件。

    3.2、将编译生成的SO库文件上传到加固服务器(本文将其和UPX执行文件放同一目录),   如下图所示:

    clip_image014

    3.3、对SO库进行加壳,常用命令:upx.out –o libhello-jniupx.so libhello-jni.so

    clip_image016

    4、验证

    4.1、在eclipse的Android工程中使用加壳SO替换原有的SO,如图所示:

    clip_image018

    clip_image020

    clip_image022

    4.2、将使用加壳SO的Android程序安装到设备或模拟器中执行功能验证,若各项功能均正   常则表示加固成功。

    clip_image024

    加固前后效果对比

    1、加固前反汇编:

    clip_image026

    clip_image028

    2、加固后反汇编:

    clip_image030

    clip_image032

    附录

    1、术语表

    术语

    定义

    UPX

    UPX是一个著名的压缩壳,主要功能是压缩可执行文件(比如exe,dll和elf等文件),有时候也可能被病毒用于免杀。

    加壳

    加壳的全称应该是可执行程序资源压缩,是保护文件的常用手段。加壳的程序经常想尽办法阻止外部程序或软件对加壳程序的反汇编分析或者动态分析,以达到它不可告人的目的,这种技术也常用来保护软件版权,防止被软件破解。

    交叉编译

    就是在一个平台上生成另一个平台上的可执行代码,比如在X86 Linux上编译出可在ARM Linux上执行的程序。

    JNI

    JNI是Java Native Interface的缩写,中文为JAVA本地调用,它允许Java代码和其他语言(比如C/C++)写的代码进行交互。

    反汇编

    把目标代码转为汇编代码的过程,也可以说是把机器语言转换为汇编语言代码、低级转高级的意思,常用于软件破解、外挂技术、病毒分析、逆向工程、软件汉化等领域。

     

    2、配置和使用NDK集成开发环境

    2.1、配置步骤:

    2.1.1、http://www.cygwin.com/下载cygwin并双击安装。

    2.1.2、选择从internet安装。

             clip_image034

    2.1.3、选择一种能连上网络的方式

             clip_image036

    2.1.4、建议选国内的镜像站点(速度快)

             clip_image038

    2.1.5、在search中输入”make”,选择Devel列表中的所有package进行安装,选择方法是点击package名,由keep变成install字样即可。注:本机已安装,故显示为reinstall。

             clip_image040

    2.1.6、继续下一步直至安装完毕。

    2.1.7、运行cgywin bash,输入cygcheck -c cygwin命令,若显示Cygwin 的package信息则表  示运行正常。

             clip_image042

    2.1.8、分别运行gcc –version、g++ --version make –version和gdb –version来检查相关组件是   否运行正常。

             clip_image044

             clip_image046

             clip_image048

             clip_image050

    2.2、编译native代码:

    2.2.1、使用NDK编译一个程序,首先我们要找到我们cygwin的程序安装目录,找到一个       home\<你的用户名>\.bash_profile文件,如下图所示

             clip_image052

    2.2.2、在该文件末尾添加ndk=/cygdrive/<你的盘符>/<android ndk 目录> 例如:         ndk=/cygdrive/f/android/adt-bundle-windows-x86-20131030/android-ndk-r9d

             export ndk

             注:"ndk"这个名字随便起,因为后面要经常使用,建议不要太长。如下图所示

    clip_image054

    2.2.3、之后重新打开cygwin,输入 cd $ndk,如果进入了android ndk 目录,证明环境变量    设置成功了

    clip_image056

    2.2.4、尝试使用NDK编译android NDK的样例程序hello-jni,路径为:

    <android ndk 目      录>/samples/hello-jni,比如:

    F:\android\adt-bundle-windows-x86-20131030\android-ndk-r9d\samples\hello-jni

    2.2.5、进入工程根目录

    clip_image058

    2.2.6、执行$ndk/ndk-build命令,执行成功后它会自动生成一个libs目录,把编译生成的.so文件放里边,使用file命令可查看到文件为经过交叉编译的ARM Linux 动态链接库。

    clip_image060

    注:执行$ndk/ndk-build实际等于执行NDK目录下的ndk-build命令,如下图所示:

    clip_image062

    3、配置和使用CDT编译环境(非必须)

    3.1、为eclipse安装CDT插件,也可以直接下载带CDT插件的eclipse(略)。

    3.2、在eclipse中选择右键选中项目,选择Properties,在弹出的对话框中选择Builders。

             clip_image064

    3.3、点击对话框中的New新建一个编译器,在新弹出对话框中选择ProgramàOK。

             clip_image066

    3.4、对新建编译器进行配置,如下图:

    clip_image068

    参数解析如下:

    Name:编译器的名字,可随便取。

    Location: <你cygwin安装路径>\bin\bash.exe程序,即cygwin的bash程序的路径。

    Working Directory: 你cygwin安装路径>\bin目录。

    Arguments:给cygwin bash传递的参数,里面主要包含进入工程目录并使用NDK执行编译的命令。

    3.5、接着切换到Refresh选项卡,给Refresh resources upon completion打上钩,如图:

             clip_image070

    3.6、最后切换到Build Options选项卡,勾选上最后三项,如下图所示:

             clip_image072

    3.7、点击Specify Resources按钮,选择资源目录,勾选你的项目目录即可,如下图所示:

             clip_image074

    3.8、保存配置后将回到Properties对话框,点右边的Up按钮,把它排到第一位,否则C代码的编译晚于Java代码的编译,会造成你的C代码要编译两次才能看到最新的修改,如图:

             clip_image076

    3.9、在eclipse中build Android工程,可以看到同时编译native代码并生成了SO库。

    clip_image078

    4、APK重打包流程

    4.1、下载并安装APK改之理,下载地址:http://www.xiaomiren.net/

    4.2、启动APK改之理,选择项目à打开APK 打开要重打包的APK程序。

             clip_image080

    4.3、打开成功后可看到原有的工程目录结构,打开libs目录可以看到APK需要载入的SO库。

             clip_image082

    4.4、删除要替换的SO,并把修改过的SO(比如经过加壳的SO)添加进来。

             clip_image084

    4.5、重新编译APK,即可安装到设备中运行并观察替换SO后的效果。

             clip_image086

    clip_image088

    5、相关问题总结

    5.1、编译UPX出现“cannot find -lz”错误。

             分析:原因是链接器LD没有找到编译出来的zlib库libz.so或libz.a。

             解决方法:将libz.so或libz.a拷贝到系统默认的动态链接库路径下,比如/usr/lib,/usr/lib64      等。

    5.2、编译UPX出现“CantPackException: DT_TEXTREL found; re-compile with -fPIC”错误。

             分析:这是早期NDK版本的BUG。

             解决方案:使用NDK9或以上的版本

    5.3、编译UPX出现“NotCompressibleException”错误。

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

             解决方案:在native代码中定义足够大的数据变量,使得编译出来的二进制文件容易达          到UPX的要求(参考《加固步骤》之《修改native代码》章节)。

    5.4、编译UPX出现“UnknownExecutableFormatException”错误。

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

             解决方案:在native代码中定义_init()方法,需要注意C和C++的区别(参考《加固步    骤》之《修改native代码》章节)。

             备注:查看二进制文件是否存在init段的命令:readelf –dynamic xxx.so,如下图:

             clip_image090

    5.5、使用UPX加壳的SO,在eclipse中启动Android程序时出现”Fatal signal…”错误,如图:

             clip_image092

             分析:此错误是因为UPX解析某些特殊字符处理不当导致的,该BUG已经有人提交UPX        官方解决,但是当前官方正式发布的正式版本(V3.91)并没有fix该问题,而是在未正      式发布的V3.92才解决了该问题,因此本文档使用源代码版本为V3.92而非V3.91。

             解决方案:下载使用V3.92源码,下载入口请参考《创建加固环境》章节。

    5.6、为何删除UPX源码中的软件信息,以及如何定位查找这些信息。

             分析:UPX对文件进行加壳时会把这些信息写入壳内,通过静态反汇编可查看到这些壳信息,进而寻找对应的脱壳机进行脱壳,使得攻击难度降低。

             解决方案:在UPX源码中删除这些信息,并重新编译,步骤如下:

             5.6.1、使用原始版本对文件进行加壳。

             5.5.2、使用IDA反汇编加壳文件,在反汇编文件的上下文中查找UPX壳特征字符串,    如下图所示:

             clip_image094

             5.5.3、在UPX源码中查找这些特征字符串(建议使用Search and Replace),并一一删除,      如下图:

             clip_image004

             5.5.4、重新编译UPX(参考“创建加固环境”章节)。

    5.7、在没有eclipse源码工程的情况下如何直接替换APK的SO并观察结果?

             解决方案:参考《附录》之《APK重打包流程》,值得注意的是,如果Android程序中     内置了检查签名合法性的安全机制,使用该方法的前提是先破解该签名验证机制。


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

    展开全文
  • Vprotect加壳软件

    2018-08-12 14:42:30
    该程序为加壳软件,Vprotect为强壳,该软件能加强软件的安全性,支持exe,dll,是国内一款强壳,兼容性好。
  • UPX 加壳压缩工具绿色版本,无需安装,Free UPX1.4,在编程开发过程中我们可以利用其对EXE, DLL, OCX, BPL, CPL 等格式文件加壳,使用方便快速、而且是免费的! UPX(the Ultimate Packer for eXecutables)是一个...
  • 不知道各位大大有没有接触过加壳软件,Themida、WinLicense、各种xxProtect。这类软件主要是保护程序防止破解。既然是保护软件,那么程序的结构当然是越混乱越恶心越好。 那么开发这类软件的话...
  • VMP加壳工具

    2018-02-19 14:49:02
    VMP加壳加壳加密软件,保护你的软件不被破解 加壳加密软件,保护你的软件不被破解
  • ZProtect加壳工具

    2019-02-11 23:37:00
    极好的加壳工具,不用写任何代码即可给自己的软件加上保护。并且可以设置到期时间等。
  • apk加壳工具

    2015-09-22 19:13:24
    apk测试过的 可以加壳防止被外人轻松的破解apk , 让人无法获取你的接口
  • EXE加壳教程

    2013-02-05 16:19:33
    EXE加壳教程,什么作用你懂得,杀毒软件可能会过不了,不懂得别下
  • android apk加壳

    2018-01-08 14:29:03
    给apk加壳,运行时动态把壳去掉,让apk更加安全,适合研究android安全
  • net加壳工具

    2018-12-18 08:27:54
    net加壳工具,很好使用,直接将程序加壳,防止他人反编等
  • 穿山甲 加壳工具

    2012-09-11 20:23:41
    穿山甲加壳,保护你的程序,常见的壳中比较难破解的一种

空空如也

1 2 3 4 5 ... 20
收藏数 3,493
精华内容 1,397
关键字:

加壳