收集一些目前可用的反破解技巧!!!
以前写过一个程序,结果被人家破解了,心里很不舒服,现在我给大家总结下反破解的一些技巧,提供给大家参考。1:ZwSetInformationThread,
该函数可以移除调试线程,遗憾的是StrongOD.dll 在r0下已经HOOK 了此函数,所以该函数无论如何调用,总是返回成功。但实际并没有移除。
好了,我们可以根据这个函数来判定 StrongOD.dll 是否存在,如何判定,这里不说了,说了以后,该插件估计就要升级啦!
2:GetTickCount 和 GetLocalTime
获取运行时间
比如,我一个定时器,1秒一次,不断的获取时间,
static int Old_Time = GetTickCount();
if(GetTickCount() - Old_Time <=3000)
Old_Time = GetTickCount();
else
{
MessageBox(Null,"程序被调试了","",0);
Old_Time = GetTickCount();
}
定时器1秒一次,高于3秒钟,说明我们当前线程被暂停运行过。只有调试的时候才会暂停线程,程序肯定被调试了。
因为是程序正常调用,所以呵呵,目前任何OD都无法绕过该检测.....
有人说,我在你GetTickCount 处下断点,不就能找到你检测代码了吗?
别急,咱们自己构建这个函数,不用系统的。
DWORD __stdcall MyGetTickCount()
{
DWORD nValue = 0;
__asm
{
MOV EDX,0x7FFE0000
MOV EAX,DWORD PTR DS:
MUL DWORD PTR DS:
SHRD EAX,EDX,0x18
MOV nValue,EAX
}
return nValue;
}
这下破解者会很苦逼的。
3:既然GetTickCount 检测如此牛逼,我们可以在检测代码处进行下进行多重校验。
大多数验证代码都是这样的
callxxxxxx
cmp eax,1
je 验证通过
//执行验证失败代码
很多人通过修改汇编代码,je 改写成 jmp来实现他们邪恶的目的。
7C809377 /0F85 7A080300 JNZ kernel32.7C839BF7
7C80937D |3977 34 CMP DWORD PTR DS:,ESI
7C809380 |0F85 3D040000 JNZ kernel32.7C8097C3
7C809377 /0F85 7A080300 JNZ kernel32.7C839BF7
7C80937D |3977 34 CMP DWORD PTR DS:,ESI
7C809380 |E9 3E040000 JMP kernel32.7C8097C3
7C809385 |90 NOP
我们可以看到7C809380处jnz 修改成 jmp 后,它对应的HEX 数据也从 0F85 改写成E9,如何检测,让他只要修改任意一条指令就能被我们发现。
其实方法很简单,只要在地址7C809377开始,读取指定字节,然后把数据累加下。它是一个固定的值。
方法:开几个线程互相对对方监控,
线程1监控线程2,线程2监控线程1,线程3监控线程1,只要一处代码被修改,都能检测到。也可以对一些敏感的API进行监控,
比如recv,send 因为WPE之类的抓包工具都会对函数进行HOOK.
4:检测到这些可恶的家伙在弄我们的程序,要ExitProcess退出吗?
当然不,他会在 TerminateProcess 和 ExitProcess 下断点等着你呢。我们可以直接破坏自己的程序,让程序异常退出。
比如,在程序里弄个死循环,无限申请内存,导致内存泄露,
比如,把数组里的数据给清空,导致访问异常。总之,搞死自己就可以了,别用API退出。
5:关键数据放服务器上,进行时间加密,确保每次封包都不一样,比如,很多外挂,把基址放服务器上,你爆破后,有界面没功能。
6:采用lua类似的模型。开辟一个独立的线程,所有的功能都集中在一个函数中完成
void Run(int nIndex)
{
//我们可以对nIndex 的不同类型,完成不同的敏感操作,
比如
为1:我们显示窗口
为2:弹出窗口
为3:设置字符串
}
由于Run和我们的验证代码不在一个线程里,所以,他很难通过栈回溯来找到关键call,增加破解难度。
7:字符串加密,在计算机语言里,有个叫异或运算的简单加密方式
字符a 和一个密匙进行异或后 变成另一个数
在异或运算一次,就又变回 a
int a =a ^Password; //让a 和一个密匙加密
a =a ^Password; //所得结果和同一个密匙运算一次,还原
因此,把字符串以int 数组的方式保存,然后用密匙还原。确保OD搜索插件搜不到。
以上就是我知道的反破解方法了,希望能帮助到大家。
这些猥琐的小技巧来做防破解挺好的,大家可以多总结一些如何防破解提高程序的安全性方法! 呵呵,我初学,看不懂,也没本事破解,还是来支持楼主,让楼主心甘情愿分享好软件 支持一下{:301_1009:} 你用这个方法写个软件放上吾爱来,如果不被破解那才真的有用呀 小白看天书,不懂。 办法总比困难多!呵呵~~~~ qiuer0508 发表于 2015-3-8 03:07
你用这个方法写个软件放上吾爱来,如果不被破解那才真的有用呀
{:1_907:} 你觉得写个软件放吾爱,大牛们就会去破解吗?大牛们都闲着蛋疼啊。 我是抱着学习的态度来看看哒~!