Safengine是一款非常实用的移动安全应用软件,通过该软件,用户对编程的代码进行加密,将所有的二进制代码全部加密,有效的防止黑客的恶意反调试,大大的提高了你想逆向分析的难度,支持ARM、ARM64、MIPS等多处理器平台,用户可以随时随地的对程序的源代码进行加密,非常实用;在这个互联网技术十分发达的时代,各种黑客技术任意横行,所以许多软件的源代码都会面临泄露、遗失的情况,给程序师带来巨大的损失,针对这种情况Safengine提出了从源代码开始加密的技术,从最原始的代码开始进行保护,让企业客户避免被破解、修改等造成利益受损,真正保障了企业用户的自身利益,非常实用,需要的朋友赶快下载试试吧!
软件功能
反调试
反跟踪
反模拟执行
反附加调试
反内存转储
反API挂钩
文件自效验
加密代码和数据
多态代码生成
打乱原程序流程
代码乱序变形混淆
代码虚拟化
高级代码替换
清除输入表
API重定位
合并原程序区段
添加水印
授权功能以及相关SDK
插件支持
软件特色
代码虚拟化
Safengine提供强大的代码虚拟机保护您的程序免受逆向工程和非法修改。将您的关键代码(x86汇编形式)转换成一个新的随机指令集,只有在嵌入您程序中的虚拟机解释器才能运行。这些虚拟机代码是随机生成的,并且经过高度混淆,确保唯一性。
在虚拟化过程中,您原始代码的执行流程将被重定向,并加入逻辑混淆。虚拟后的代码将用与非(NAND)实现所有的逻辑操作,大部分数学运算也将用加法实现,使得逆向者很难分辨原始指令的功能。此外,最容易被修改并绕过的条件跳转也将被转换成虚拟机的运算代码,从而使破解者无法改变程序走向。
代码虚拟化分三步:
首先,您的代码将被完整分析,以处理器执行的方式分析分支、外部数据参考、空余寄存器、栈桢以及对EFLAGS寄存器的修改。
然后,根据分析的结果,生成一个只包含必要指令的随机指令集表,通过多态代码生成引擎生成与之对应的x86实现代码。
最后,将根据随机指令集表,结合虚拟机内部混淆、常数加密、自效验等功能,生成最终的虚拟机字节码,模拟原始代码的功能。
Safengine的虚拟机的体积可控,兼容各种运行环境,支持保护包括内核驱动在内的应用程序。
运行时保护
传统的软件保护工具将应用程序加密存放并在执行时解密,但在原程序解密后,保护代码与程序没有关联。这类保护可以通过抓取解密后的程序内存轻松的绕过。
Safengine提供了运行时保护,并与您的程序链接在一起,使得您的程序无法离开保护代码正常运行。保护代码将动态检查您的程序内存是否被修改,如果发现修改将立即中止程序运行。同时还会实时监视系统环境,及时检测调试破解工具。
软件授权
Safengine提供内置的授权系统,您无需修改任何代码,即可通过它控制您的软件授权。您可以通过限制运行时间、使用次数、过期日期、机器码绑定等等授权限制来控制软件试用。 Safengine使用强加密算法保证授权模块的安全,如果没有您提供的合法授权,破解这需要数年时间穷举您的软件的解密密钥。
Safengine NetLicensor
在Safengine Licensor的基础上,我们推出了基于网络的授权验证平台:
Safengine NetLicensor
它由三部分组成:
Safengine Code Protection 软件代码保护(代码变形、虚拟化)
Safengine Licensor本地授权认证系统
Safengine NetLicensor网络授权验证
网络授权验证
受Safengine NetLicensor保护的应用程序,在启动时会连接NetLicensor服务器,验证授权的有效性,授权限制将以服务器时间为准,确保软件试用时间的准确可控。
Safengine NetLicensor解决了几个软件授权中的难题:
合法授权被恶意泄露
客户刻意修改系统时间
多人共享同一个授权
需要即时即刻吊销授权
Safengine NetLicensor采用了广泛使用的MySQL作为数据库后台,可以轻松整合到现有的服务器系统中,NetLicensor服务端采用了高效稳定的IOCP网络层架构,并在Safengine系列产品的网络验证系统中得到了充分的测试。
软件特点
多处理器支持
ARM / ARM64 / MIPS / MIPS64 / x86 / x86-64
多系统支持
Android / IOS 所有版本
动态字符串加密
稳定、高效、可定制
与开发环境完美集成
高强度代码变形与混淆
主要特性
Safengine是一个具有反调试、反附加、动态自效验等功能,同时提供了对代码的变形、乱序和虚拟化等功能的应用程序保护壳,是一款简单易用的软件保护工具,它改变您的软件执行流程,以达到阻碍自动分析,消耗破解时间、精力的目的。
Safengine的代码分析引擎将在保护应用程序时提供完整的分析,从而对应用程序进行系统化的保护,将您的原始代码移动和变形,并且加入无数垃圾代码和反调试、跟踪代码。
Safengine处理的范围是整个程序,而不是程序里的某一个过程。所以,即使您的关键代码在保护后未经变形,也需要耗费破解者很长的时间才能找到,而往往只是一行两行代码,穿插在数以万计的垃圾代码中,是极其隐蔽和猥琐的。
Safengine的代码虚拟机在同类产品中最稳定、最完善,整体运行架构线程安全,不会改变系统对受保护代码的线程的调度。虚拟处理器采用了逻辑门级的指令拆分,使用与非和加法两个基础运算指令实现了大部分复杂的x86指令,并且使用了随机的虚拟寄存器参与运算,极大程度提高了代码保护的安全性。
在同类的软件保护壳中,Safengine提供了最完整的解决方案,集代码加密、虚拟化、授权于一体,并且每一项功能都可圈可点。
新版特点
近期,经过大量研发、测试工作之后,Safengine系列所有产品正式支持64位软件保护!
其中最为重要的是,Safengine经过多年积累的32位软件保护技术已完美迁移至64位,没有任何的阉割、缩水。这些技术包括:壳体运行时保护、全程序分析引擎、函数级代码分析引擎、代码乱序变形引擎、代码虚拟机(VM)等等。也就意味着,经过Safengine保护的64位软件拥有与32位软件一致的高强度保护。
在此基础上,Safengine Licensor授权系统也可对64位软件进行授权管理,并实现无缝对接,授权互通。
此外,新版本的Safengine Licensor提供了新的插件接口,在软件启动时,可以通过插件实现的第三方渠道(如:嵌入式网页)获取授权文件数据,从而可灵活适用于各种在线用户管理系统。
由于大量的服务端变化,我们将不再提供老版本的加壳服务,如在使用时出现错误提示,请更新至最新版本。
Safengine Shielden作为Safengine系列产品的演示版,也将同步更新以上内容
使用方法
项目管理
新建
打开一个可执行文件,创建相应的加密项目文件。
导入授权信息
从另一个加密项目文件中导入授权私钥信息。
保存
保存当前加密项目文件。
关闭
关闭打开的加密项目文件。
退出
退出Safengine。
加密选项
可以分别选择对程序的代码段、数据段、Safengine壳段进行加密和压缩,并指定新区段的名称。
检测选项
可以根据需要,选择需要检测的调试、监控工具。Safengine将在您的程序运行过程中持续检测这些工具,一经发现将采取措施保护您的程序。
保护选项
1、输入表保护
清除IAT
该选项将最大程度增加恢复原程序导入表的难度。
填充原始IAT表
如果原程序的部分代码(如已经保护过部分函数)必须使用IAT表,则Safengine可以在程序运行后动态填写这些数据,以保证这些代码正常运行。
使用散列API函数名称
使用散列算法将原程序的API函数调用加密,只能通过Safengine在调用时动态解析。
注:散列算法,也称为单向散列函数、杂凑函数、哈希算法、HASH算法或消息摘要算法。它通过把一个单向数学函数应用于数据,将任意长度的一块数据转换为一个定长的、不可逆转的数据。
复杂度
处理IAT相关代码的混淆复杂度。
2、资源保护
加密资源
加密程序内的资源目录,保护后除必须的版本信息等以外的资源将被隐藏。
反内存转储
动态解密以及重定位资源,防止转储
3、其它选项
代码替换选项
函数及SDK保护
如需添加函数,可以通过函数名称、地址2种方法添加,例如:
单击添加函数,搜索WinMain,增加WinMain函数
或者单击添加地址,输入401000,根据反汇编选择函数开始位置。
授权系统
Safengine Licensor系列产品提供完善的授权功能,可以实现上图中的授权试用限制功能。
使用说明
SDK
在效率要求高的情况下,可以使用SDK标记屏蔽特定代码的乱序和混淆:
SE_UNPROTECT_START
SE_UNPROTECT_END
使用如下代码标记,可以保护指定代码
默认保护: SE_PROTECT_START
乱序变形: SE_PROTECT_START_MUTATION
虚拟: SE_PROTECT_START_VIRTUALIZATION
乱序+虚拟:SE_PROTECT_START_ULTRA
结束标记: SE_PROTECT_END
SECheckProtection
自效验检查
返回值
TRUE 自效验正常
FALSE 自效验异常
SEDecodeString
字符串加密
返回值
解密后的字符串
SEFreeString
释放解密字符串
授权SDK
1. 常用的函数:
SEGetNumExecUsed
获取已使用次数
SEGetNumExecLeft
获取剩余使用次数
SESetNumExecUsed
设置使用计数
SEGetExecTimeUsed
获取已使用时间
SEGetExecTimeLeft
获取剩余使用时间
SESetExecTime
设置使用时间
SEGetTotalExecTimeUsed
获取已使用总时间
SEGetTotalExecTimeLeft
获取剩余使用总时间
SESetTotalExecTime
设置使用总时间
2. 当授权文件生成时填写了信息,而没有选择锁定,则可以根据需要调用这些函数
SECheckHardwareID
检查机器码
SECheckExpDate
检查授权文件过期
SECheckExecTime
检查使用时间
SECheckCountryID
检查系统语言
SEGetLicenseUserInfo
获取授权文件的用户信息
SEGetLicenseTrialInfo
获取授权文件的试用信息
SEGetHardwareID
获取当前机器码
3. 如果需要在程序里效验授权文件,可以调用:
SECheckLicenseFileA
SECheckLicenseFileW
SECheckLicenseFileEx
4. 其他函数:
SEGetLicenseHash
获取当前授权文件的唯一标识
SENotifyLicenseBanned
提示授权文件被吊销
SEResetTrial
清除本软件在本机的试用记录
Safengine插件
Safengine在加壳时将尝试搜索Plugins目录下的所有子目录,加载所有Plugin.dll和其指定的Bin文件。
加壳时,Safengine分别调用Plugin.dll初始化插件,并将其指定的Bin文件捆绑入目标程序,在目标程序启动时,调用其PluginMain函数。
Safengine提供了插件Hook代码的接口,可以由插件指定抽取程序内的一个范围,其中的代码将被移动到壳段内,从而使您对程序的自修改不受Safengine全代码处理的影响。
加壳处理部分为Plugin.dll,它导出5个函数:
void WINAPI Initialize(BYTE* pImageBuf,
pfnAddPluginHook fnAddPluginHook,
pfnGetPluginFuncRVA fnGetPluginFuncRVA,
SHELL_CONTEXT* Context);
pImageBuf为目标程序内容,fnAddPluginHook为抽取指定代码的回调函数,fnGetPluginFuncRVA 为获取插件导出函数地址的函数,Context为当前加壳引擎的上下文。
DWORD WINAPI GetPluginContextSize();
返回需要分配给PluginContext的大小。
void WINAPI GetPluginContext(void* pContext);
填充PluginContext到由壳分配的内存中,其中pContext指向一块由壳分配的内存。
void WINAPI GetPluginBinName(char* pNameBuf, DWORD Size);
指定该插件捆绑部分的文件名。
PLUGIN_TYPE WINAPI GetPluginType();
获取该插件的类型。
void WINAPI PluginMain(HMODULE ImageBase, PLUGIN_CONTEXT* PluginContext);
ImageBase为加载后的目标程序基址,PluginContext指向由GetPluginContext()填充的数据。
捆绑到目标程序的部分:
注意事项
- 由于捆绑后的DLL将成为目标程序的一部分,不保留任何DLL信息,所以GetModuleHandle、资源访问将返回目标程序本身。
- DLL的导出函数将被视为SDK函数,在原程序的导出表内搜索,例如:
若PluginBin.dll导出了sendto函数,则目标程序的sendto调用将被指向插件
官方介绍
Safengine提供强大的代码虚拟机保护您的程序免受逆向工程和非法修改。将您的关键代码(x86汇编形式)转换成一个新的随机指令集,只有在嵌入您程序中的虚拟机解释器才能运行。这些虚拟机代码是随机生成的,并且经过高度混淆,确保唯一性。
在虚拟化过程中,您原始代码的执行流程将被重定向,并加入逻辑混淆。虚拟后的代码将用与非(NAND)实现所有的逻辑操作,大部分数学运算也将用加法实现,使得逆向者很难分辨原始指令的功能。此外,最容易被修改并绕过的条件跳转也将被转换成虚拟机的运算代码,从而使破解者无法改变程序走向。
支持的格式
Safengine支持多种类型的文件格式:
所有Win32/64 PE文件,包括:可执行文件 (*.exe)
屏幕保护程序 (*.scr)
动态链接库 (*.dll)
ActiveX 控件 (*.ocx)
驱动程序 (*.sys)
∨ 展开