防破解之Ring3反调试器附加
这应该是最后一期防逆向的讲解了,后面也没啥好讲的了,说不定心血来潮来思路了可能会在出!{:6_217:}下面总结一下这几期的思路以及一点建议{:6_209:}附上一些API函数 老规矩 回复可见!
' IsDebuggerPresent' CheckRemoteDebuggerPresent' NtQueryInformationProcess' CsrGetProcessId+OpenProcess' CloseHandle' OutputDebugString' UnhandledExceptionFilter' OutputDebugStringA' ZwSetInformationThread' GetTickCount' timeGetTime' LdrGetProcedureAddress' GetStartupInfoA' RegisterShellHookWindow
市面上大部分的验证例子都是没有检测的,有些作者直接硬搬开源验证直接就用了.
没有服务器数据,没有检测,结果很明显一个push可能就没了,先前的教程就是因为这个所以心血来潮就做了这几期。
所有开源的验证都是不安全的,下载个样板编译出来放进OD验证流程关键特征码都一目了然。
如果你用的是开源验证,除了必要功能函数,请自行将验证流程和功能改得最好连它妈都不认识然后配合VM
这就是为什么个人验证很少有人会去破的原因,鬼知道用了什么,太费精力。
易语言验证关键函数不建议只使用VM标记,因为易语言不能正确的VM头部,建议手动VM,然后调用VMP的内存效验以及授权锁,强度会提升一个档次!
这里我想强调的是“检测”,明枪易躲,暗箭难防,这里的“明枪”是指反调试这些防破功能的实施,这里的“暗箭”就是暗桩之类的,也就是检测。
这就是为什么这几期的帖子里面都逃不开“检测”两字,MD5效验,CRC32效验,CC断点检测啥的。
参考某DXF如果没有检测,会怎样我就不说了吧?
当然了,这里也不能够相提并论!
检测流程不要全部放在一个子程序里一起检测,这样只会一锅熟,分开以及随机检测,动态调用,例如功能1随机调用第一个检测,功能2随机又调用另一个检测。
关键检测能不用API的写法就尽量不用,尽可能的使用汇编,千万不要单在一处检测就亮完你的底牌!
还是那句话,攻防无绝对,思路很重要,防破要做的就是尽可能的让想逆向你程序的人难受就对了!
温馨提示:实现防破的同时,也要考虑兼容性,不要影响了正版用户的体验哦,自行取舍。
温馨提示:例子里面所有的写法并不是唯一的,也参考了网上的开源例子,部分功能因为某些原因所以是删除简化过的,因此可能会有BUG,请自行测试,自行补强!
**** Hidden Message *****
感谢大佬分享!!! 感谢分析 ! 看下。。看下。。 感谢分析 !
感谢大佬分享{:5_116:} 感谢大佬分享!!! {:5_189:}{:5_189:} 感谢分享,回复学习 调试器附加{:5_117:}