一种新的软件保护方法(Objantihack)






2.61/5 (19投票s)
2006年11月29日
4分钟阅读

33424

443
本文介绍一种新的软件加密方法。
引言
ObjAntiHack 简介
1. 设计目标
为了防止软件被破解或被逆向工程,作者在软件加密方面做了很多工作。
但到目前为止,软件加密方法非常有限。通用方法是打包软件,
其限制在于原始代码必须在运行时恢复,因此破解者可以编写内存补丁工具来修改
代码或转储整个代码,甚至完全解包。为了解决这个问题,我们开发了 Obj 文件
加密软件 ObjAntiHack,它可以加密 .obj 文件。您可以将加密的 obj 文件链接到您的项目,
指令代码被完全扭曲,指令代码无法区分,也无法
分析。它具有反静态分析能力,并且很难通过动态分析轻易获得程序原理。
面对这种代码,大多数破解者会彻底放弃。
2. 应用范围
支持 X86 平台,32 位 coff 格式的 obj 文件。我们计划将来支持 Delphi、JAVA 和 .Net。
3. 工作原理
A. 用栈变量替换寄存器
用栈变量替换一个或多个寄存器,这种转换是不可逆的。
B. 用随机化过程替换通用指令代码
C. 在栈中运行真实代码
将加密的指令代码推入栈,解密,然后调用它!
D. 删除 JMP 指令
JMP 指令对破解者非常重要,因此 ObjAntiHack 将 JMP 代码转换为其他格式。
E. 删除 ret 指令
通常 ret 指令表示函数结束。如果 ret 被转换,反汇编器将无法
正确识别函数。
F. 添加 JMP 指令
将函数分成小块,将这些代码重新放置到随机位置,并用 JMP 指令链接它们。
高级功能这些方法可以重复使用!
示例
1、
call sub1
更改为
mov eax, offset sub1 + 3
push offset @1
sub eax, 3
jmp eax
@1:
2.
ret
更改为
push ecx
mov ecx, [esp+4]
add esp,8
jmp ecx
3.
cmp reg1, reg2
jge L_DST
L_NEXT
更改为
push eax
mov eax, reg1
sub eax, reg2
shr eax, 1fh
neg eax
and eax, L2 - L1
add eax, L1
jmp eax
L1
pop eax
jmp L_DST
L2
pop eax
L_NEXT
4.
MOV EAX, DWORD PTR [ECX+0AD8h]
PUSH EAX
MOV ECX, DWORD PTR [EAX]
更改为
PUSH EAX
PUSH ECX
MOV EAX, DWORD PTR [ESP]
ADD EAX, 0AD8h
MOV EAX, DWORD PTR [EAX]
MOV DWORD PTR [ESP+04h], EAX
PUSH DWORD PTR [ESP+04h]
MOV EAX, DWORD PTR [ESP]
MOV DWORD PTR [ESP+08h], EAX
MOV EAX, DWORD PTR [ESP]
MOV EAX, DWORD PTR [EAX]
MOV DWORD PTR [ESP+04h], EAX
MOV EAX, DWORD PTR [ESP]
MOV ECX, DWORD PTR [ESP+04h]
ADD ESP, 08h
4. 使用宏
A. 在您的 C++ 源代码中使用下面的宏来标识关键加密部分
#pragma code_seg(".code$curve_Max")
/* 您的关键加密部分 C++ 代码 */
#pragma code_seg()
示例
#pragma code_seg(".code$curve_Max")
Void func1()
{
…
}
DWORD func2(DWORD dw1,DWORD dw2)
{
…
}
#pragma code_seg()
B. 在您的 C++ 源代码中使用下面的宏来标识非加密部分
#pragma code_seg(".code$curve_NoChange")
#pragma code_seg()
5. 其他
A. 性能
性能损失是不可避免的。加密强度越高,性能损失越大。
如果您的某些函数要求尽可能高速运行,则不要加密这些函数,
或者进行轻度加密。那些不经常使用、速度要求不苛刻的地方都可以
进行高强度加密。加密强度和加密方法可以根据用户的请求进行
设置。
B. 文件大小
由于膨胀扭曲算法,加密会增加目标文件的大小。文件大小
的增加量因加密强度而异,可以根据具体要求进行
调整。此外,您可以在源程序中插入标记,告诉 ObjAntiHack 关键加密区域。
关键加密区域可以设置为高强度加密,对于非关键
加密区域,可以使用轻度加密。您将同时获得安全保障和更小的文件。