对抗不同的破解手段
软件破解一般采用2种方式进行,一种是通过静态反汇编工具反汇编程序然后分析相关代码,一种是通过动态的反汇编工具对程序的关键代码进行动态调试。
1. 对抗DeDe
在静态反汇编过程中对付Delphi程序的最好的工具就是DeDe,他能够反编译出Delphi程序和C++Builder程序的类信息、窗体信息、对象对应的代码等信息,能够比通过静态反汇编工具获取更多的有用信息。
对抗反汇编就必须先对付DeDe这个程序,对抗程序的具体代码信息如下:
Procedure Anti_DeDe(); //
检测
工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训
DeDe反编译器
Var
DeDeHandle:THandle;
i: integer;
begin
DeDeHandle:=FindWindow(nil,chr($64)+chr($65)+chr($64)+ chr($65));
If DeDeHandle<>0 then
Begin
For i:=1 to 4500 do
SendMessage(DeDeHandle,WM_CLOSE,0,0);
End;
DeDeHandle:=FindWindow(nil,chr($64)+chr($61)+chr($72)+chr($6b));
If DeDeHandle<>0 then
Begin
For i:=1 to 4500 do
SendMessage(DeDeHandle,WM_CLOSE,0,0);
End;
End;
本程序将自动寻找窗体名字为DeDe和dark窗体,发现后将自动关闭DeDe和dark修改版的DeDe。
2. 对抗SoftICE
由windows 9x系统的使用越来越少,所以,这里主要考虑windows nt核心平台。
Funciton anti_softice:Boolean; //检测win2000/xp下的SoftICE
Var
Mark:integer;
YesInt,NOInt:integer;
Begin
YesInt:=0;NOInt:=0;
Mark:=0;
Asm
Push offset @handler
Push dword ptr fs:[0]
Mov dword ptr fs[0],esp
Xor eax,eax
Int 1
Inc eax
Inc eax
Pop dword ptr fs:[0]
Add esp,4
Or eax,eax
Jz @found
Cmp mark,0
Jnz @found
Jmp @Nofound
@handler:
Mov ebx,[esp+0ch]
Add dword ptr [ebx+0bx],02h
Mov ebx,[esp+4]
Cmp [ebx],80000004h
Jz @Table
Inc mark
@Table:
Xor eax,eax
Ret
@found:
Mov YesInt,1
@Nofound:
Mov NoInt,1
End;
If YesInt=1 then
Result:=True;
If NoInt=1 then
Result:=False;
End;
上述代码是通过INT 1中断来检测SoftICE是否加载,适合于Windows NT核心的操作系统。
3.对抗动态调试
动态调试工具主要有ring3的Ollydbg、ring0的SoftICE、TRW2000等。当解密者用ring3的Ollydbg等工具调试程序时,用户编写的程序将会被调试器当作自己的一个子程序来进行跟踪,这时,改程序所对应的进程环境块结构的偏移2H处BebingDebugged标志的值是1,吐过没有被调试器加载调试,则其值为0。在了解ring3级调试工具的工作原理后,针对这种情况,需要编写一些通过获取线程环境块的信息,进而获取对应进程环境块中BebingDebugged标志值的代码信息。
判断ring3级的调试器存在与否,具体的代码信息如下:
//Anti-loader
Function Anti-loader():Boolean //检测调试器
Var
YInt,NInt:integer;
Begin
Asm
Mov eax,fs:[30h] //获取线程环境块中对应的进程环境块的地址
Movzx eax,byte ptr[eax+2h] //获取BebingDebugged标志的值
Or al,al //测试BebingDebugged标志的值
Jz @No
Jnz @Yes
@No:
mov NInt,1
@Yes:
Mov YInt,1
End;
If YInt=1 then
Result:=True;
If NInt=1 then
Result:=False;
End;
这种方式只关心用户程序是否被调用,不会对系统中一家在的调试器进行误操作,能有效提高其操作的可行性和安全性,祈祷对抗动态调试的作用。
4.对抗静态调试
由于静态分析的作用实际上主要是通过获取有用的提示信息和关键的跳转地址来对程序进行分析。因此,对抗静态调试主要可采用两种措施。一种是将软件中的关键代码信息采用可加密算法进行加处理,在程序中动态解密使用;另一种是采用花指令产生大量垃圾指令,从而干扰反汇编软件的正常分析,从而反汇编处不正确的信息。
利用花指令十余户改变关键代码内存地址的例子,改程序最初源代码如下:
Start_:
Xor eax,1
Add eax,2
Jmp label1
Label1:
Xor eax,3
Add eax,4
Xor eax,5
End start_
此时如果将远程须进行编译后用W32Dasm进行反汇编,得到的返回编辑过与源代码相同,但如果对源程序做出如下修改:
Start_:
Xor eax,1
Add eax,2
Jnz label1 \\该处用两句条件跳转代替了:jmp label1
Jz label1
Db 0e8h
Label1:xor eax,3
Add eax,4
Xor eax,5
End start_
对程序代码修改完毕后,再使用W32Dasm进行反汇编,则得到的结果将会与事先编写的汇编指令有所不同,这样,从反汇编的结果中已经无法理解程序的真实功能了。
5.实现磁盘文件自校验
自校验原理:将程序整个文件的某些信息,如文件大小、创建时间或CRC校验值等用某种算法计算出一个只,并将这个值保存在某个地方,如:注册
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
或某个隐藏文件中或者程序自身某个地方,在程序启动时或运行中不定时检查运行中的文件的相应消息,并用同样算法计算出新的值,最后把新值同事先保存的原始文件值进行比较,这个过程就是自校验。