能力值:
( LV2,RANK:10 )
|
-
-
2 楼
呼~~~接着说;前面写得比较乱,不过在这里主要写方法跟代码说不说了,看到别人把跟的汇编也贴出来,好像没什么用,看完了后还是只能在中文上受益,呵呵...(可能是我太愚笨了 :) )
言归正转,哦!讲到哪了?昏S,
恩,前面讲的比较乱不过关健是要找到那个大循环啦,小女子眼力不好最恨别人用多嵌套循环来防cracker了 :) ,我们来看现在已经知道坐标的值是在循环里加的密,从循环的开头接着跟,下断bpx xxxx(坐标值),和bpx Sendto do"d esi(buffer)"按F10,凡遇到call就希望sendto会跳出来,跟了20分钟终于跳出来了,呵呵...难怪人家讲国产软件好跟,记下此Call的地址,清除所有断点,下断此Call并bd它先,回到游戏找个没人的地方,be *,点鼠标让人物走两步,一点就跳出来了,按F8跟进发现有1个call用的参数是坐标的地址,不管它按F10,奇怪坐标地址里的数据没有改变,再看看这个call的另一个指针参数,内容变化了,估记是把坐标加密后存在这个地址里了,这个call看起来是这个样子:fuc(char*,char*,char*),另一个char*是密钥(每次加完密会变化下次再用),按F5再对比加密后的数据和发送的包一看,根本不一样,说明这串数据还会再加密,用同样的方法来到这里,发现下个call也需要这串数据,又是一个加密工厂,密钥是刚才密钥的后6位,这样一路跟下去看到数据被加密了3次还扩大了8个字节,8+6=14,后面又加入了8个字节,一着这8个字节正是人物移动的封包的前8个,至此所有的数据已经和封包的一致了,相同的动作封包是不一样的,因为密钥在每次加密后都不同,至于服务端是不是也用同样的方法解包不想深究因为这时我们可以模拟客户端发包了,剩下的只是研究放原始坐标的buffer在人物打怪或干别的时在干什么了,这里不想公布这些代码,呵呵.
好象写完了,哦还有怎么模拟发包留在第2点写吧,不然就不知道该写什么了.
总结一下怎么防我这等菜鸟破自己的软件吧.
首先,至少要加个壳,加壳程序自已写,不用太复杂因为市面上的壳已经被干得差不多了,加壳的重点放到隐入口点上,进入入口点不要在程序的末端,用个jnz跳到前面再运行些垃圾Call左跳右跳...都用条件跳转!
其次,用点自检查校验和技术动态SMC,最重要的是要检测调试器了,不要用int 1和int 3这些众所周知的方法检查,我不讲了,可以用多种检查甚至可以用注册表检查,还可以用SHE,关健是多路多线程检查,检查出来干万不要出提示框!只要把结果加密后发往服务端,再由服务端断开连接(在一定的时间后,断开的时间由服务瑞控制)!
最后就是API的调用要在壳解压后由解压的代码用SHE获得API地址(病毒呵呵...)存下API的地址,用异常中断来掉调用或用call xxxx(eax+xx)和jmp 存放有此地址的call来调用!
下班了,我用PDA写的这篇,累...下次再说吧,不过要看跟贴的人数来定了...呵呵
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
支持搂主继续发!
大概很多人没太仔细看贴,偶发2个潜力点:
小女子眼力不好
像UPX这样的垃圾壳现在居然还有人用还是大公司,岂不让老外笑掉牙了?
|