- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
楼主 |
发表于 2013-4-22 10:01:23
|
显示全部楼层
OK。这里才是正文~~
首先简单科普HASH的话题.
游戏保护要ANTI一个驱动.要获得hash无论是转换成CRC还是MD5什么的。
hash就是一个 "字节集" 到hash码的过程。
那么TP要获得hash 就有2种来源.
1. 从驱动文件得到
2.从内存得到
第1种可能性基本没有.
原因很简单. 其一是某保护驱动 没有挂钩NtLoadDriver。
其二如果你的驱动比保护先加载.并且删掉了驱动文件.某保护就获得不了HASH了
所以正常情况.Anti pass驱动都是第2种方法
围绕第2种方法我们就有2种比较靠谱的通用PASS方法。
=======
非法HASH
是不是 直接
字节集= 内核读内存 (模块base, 模块size)
然后getcrc(字节集) 就能得到?
答案是 NO!
=================
原因很简单..
一个Moudle中..不仅有.text代码段
还有.data数据段
数据段里的内存是会变的。
如果直接连带数据段一起拿去获得crc md5什么的,
结果就不会固定。那就什么模块都不非法了。
所以拿去获得hash的代码必须是静态代码。不能把.data等段混进去.
这里有两种方法获得
1. 获取PE信息里的区段信息-->查看区段标志.在根据voffset vsize得到改扫描的内容
2.遍历模块内内存属性获得.
SO...我们要做的就是.
在驱动入口函数里.
1 把 pe信息乱涂乱画掉..最直接有效的就是
base+60的e_lfanew。这个一乱改.整个PE信息全部错乱
2 把整个驱动模块内的内存全部设置成可读写的
=========================
基于让扫HASH失效。
还有如下方法:
1.让你每次释放的驱动不一样.结尾加东西是没用的.要随机在代码段里加.这还设计到校验和等问题。
2.破坏hash码表.. 别以为逆向某保护驱动有多难..有些东西可以用特征搜的。。eyybc2010年就有人发过那个特征了
随便改1字节..就使CRC结果全部出错.进而啥都不会非法了。自己反老帖
3.1楼帖子里谈到黑名单包的话题..
那就是文件->r3内存->驱动通信->进入r0的话题. 这里相信你们办法也很多.
============================
此外..在骆驼童鞋和妖言童鞋的工具里..还发现了某枚线程..
破坏线程就不是这里能说的清楚的了.
不过这类的方法一向是我不兴趣..
太针对性..纯粹靠花时间去试..没有通用技术性。
======================= |
|