吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12296|回复: 24
收起左侧

[原创] 收集一些目前可用的反破解技巧!!!

  [复制链接]
xlhwxyh 发表于 2015-3-8 01:03
以前写过一个程序,结果被人家破解了,心里很不舒服,现在我给大家总结下反破解的一些技巧,提供给大家参考。

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:[EDX]
                MUL DWORD PTR DS:[EDX+4]
                SHRD EAX,EDX,0x18
                MOV nValue,EAX
        }

        return nValue;
}
这下破解者会很苦逼的。

3:既然GetTickCount 检测如此牛逼,我们可以在检测代码处进行下进行多重校验。
大多数验证代码都是这样的
call  xxxxxx
cmp eax,1
je 验证通过
//执行验证失败代码

很多人通过修改汇编代码,je 改写成 jmp来实现他们邪恶的目的。
7C809377   /0F85 7A080300   JNZ kernel32.7C839BF7
7C80937D   |3977 34         CMP DWORD PTR DS:[EDI+34],ESI
7C809380   |0F85 3D040000   JNZ kernel32.7C8097C3

7C809377   /0F85 7A080300   JNZ kernel32.7C839BF7
7C80937D   |3977 34         CMP DWORD PTR DS:[EDI+34],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搜索插件搜不到。

以上就是我知道的反破解方法了,希望能帮助到大家。


免费评分

参与人数 3威望 +2 热心值 +2 收起 理由
ollydebug + 1 的确很不错
Hmily + 2 感谢发布原创作品,吾爱破解论坛因你更精彩.
小淫仙 + 1 已答复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2015-3-8 15:30
这些猥琐的小技巧来做防破解挺好的,大家可以多总结一些如何防破解提高程序的安全性方法!
82080976 发表于 2015-3-8 07:09 来自手机
呵呵,我初学,看不懂,也没本事破解,还是来支持楼主,让楼主心甘情愿分享好软件
无樂MWS 发表于 2015-3-8 05:24
qiuer0508 发表于 2015-3-8 03:07
你用这个方法写个软件放上吾爱来,如果不被破解那才真的有用呀
marioaaa 发表于 2015-3-8 07:25
小白看天书,不懂。
luo858 发表于 2015-3-8 08:01
办法总比困难多!呵呵~~~~
 楼主| xlhwxyh 发表于 2015-3-8 10:57
qiuer0508 发表于 2015-3-8 03:07
你用这个方法写个软件放上吾爱来,如果不被破解那才真的有用呀

你觉得写个软件放吾爱,大牛们就会去破解吗?大牛们都闲着蛋疼啊。
头像被屏蔽
中国特井 发表于 2015-3-8 15:37 来自手机
提示: 作者被禁止或删除 内容自动屏蔽
fanmc92 发表于 2015-3-8 16:08
我是抱着学习的态度来看看哒~!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表