要了解什么是CS地图,就必须先知道CS(Counter-Strike,反恐精英)。它是一款深受世界游戏玩家喜爱的第一人称射击游戏MOD。以其独特的形式驳得无数玩家的芳心。CS地图就是玩家在CS中的游戏区域,也可以说是模拟的游戏场景。可以由CS地图设计者的自己的想法来设计。BSP文件就是这种场景文件。HL(即Half-Life,半条命)的大多数MOD之间,BSP文件是可以通用的,只要符合读取的条件,能够调用到地图里用到的资源,就一定能读取。比如CS1.6就能读取大多数CS1.5的地图。
CS地图制作工具
首先必须提到的是WC,既WorldCraft。它是一个比较常用的CS地图制作工具。但是随着时代的发展,WC也出现许多不足的地方。所以它的作者Valve公司又对它进行改新,直到现在的最新版本——VHE4.1(WorldCraft 3.33版本以后都叫做VHE),既Valve Hammer Editor 4.1。它修正了WC的不足,新增了许多WC不能做到的地方,如将实体显示成模型或图标而非一个小方块,并且支持制作Source引擎地图.fgd文件是CS地图实体列表,它决定了你在地图编辑器里能直接制作哪些实体。现有的fgd文件有x-man汉化的CS1.6FGD,Valve官方出的HLFGD(用于制作HL的地图)
它适合对于英文不是很了解的朋友使用,也修正了Valve官方提供的fgd的许多bug(但没有在编辑器显示中模型的功能)。使用此软件可以制作出*.rmf或*.map文件,即CS地图源文件,可编译为.bsp格式文件,即上面所说的能被游戏引擎读取的地图文件,未经编译的地图源文件是无法被游戏读取的。您还可以添加自定义纹理(.wad)、声音(.wav)、模型(.mdl)、图标(.spr)等等,这样可以个性化CS地图,而不局限于官方仅有的那些枯燥素材。
[编辑本段]【CS地图的构成】
CS地图中包括以下部分:
固体(Solid):在游戏中没有特殊功能,仅仅构成游戏可见部分(如地面、山体等等),玩家看得见摸得着的那些物体。
实体(Entity):指游戏中用来实现某种功能(如在地面上放置的武器等等)的元素,分为:
固体实体——由固体转换而来的实体,可以用来规定一些特殊区域,如购买区,也可以做出如水、按钮、可开动的汽车等等使其有一般固体做不出的特殊能力;
点实体——绝大多数游戏中不可见,仅仅用来实现一些功能,如播放声音、规定玩家出生点等等。
纹理知识
纹理(Texture):本质为图片,覆盖在固体或固体实体表面,使游戏更加逼真。比如在作为地面的地方贴上地砖,在作为草地的地方贴上草地,等等。
纹理文件保存在扩展名为wad的文件中,这些文件可以在VHE中被直接调用。
注:不透明的水、天空、轴心与贴附固体,均为各表面覆盖有特殊纹理的固体,在游戏中有一定特殊作用,但并不属于实体余升。
纹理必须要有名称,这样可以迅速区分普通的固体纹理与特殊纹理。关于这些,下面给出具体的分类方式:
固体纹理:只起到视觉效果,如沙地、草地、墙壁等等,名称没有什么特别之处,如sand01、steeldoor1等等。
标记纹理:名称为AAATRIGGER,常用于不可见的固体实体之上,在制作地图的时候可以提醒制图者哪些实体在游戏中不可见,可以方便地图制作。(但是覆盖在固体之上可能会引发游戏错误!)
天空纹理:名称为sky,贴有该纹理的固体是作为天空的,在游戏中可以显示出逼真的蓝天白云或者月夜星空。
轴心纹理:名称为origin,作为一些实体的轴心,例如转门、风扇、汽车、火车、飞机、钟摆、有架子的机q等等,它们在转动或运动时,都要围绕一定的轴心运动。覆盖有这个纹理的固体,就用来代表轴心。凡是要制作上述效并誉果的实体,都必须要集成一个贴有origin纹理的固体,以作为轴心(放在你认为或需要是轴心的地方)。否则的话,无论上述实体身在地图何处,他们都将只围绕地图原点(0,0,0)转动或运动。你不能给一个实体集成2个或2个以上的轴心,否则将会导致出错。你不能把贴有该纹理的固体单独转化为固体实体,否则同样会引起游戏错误。
贴附纹理:名称为clip,游戏中不可见,可以阻挡玩家(如无形的墙壁一般)绝毁段,但不会阻挡玩家的子d或手雷,例如de_Aztec的吊桥,人可以走在上面,但是子d和手雷可以穿过去。该纹理不能和别的纹理用于同一固体之上,也不能把贴有该纹理的固体单独转化为固体实体。
水纹理:名称前带有!,如!water01、!lava_x等等。游戏中作为液体,可以自己动来动去,如水、岩浆,但是这种液体是不透明的,如果需要透明,就必须转化为func_water固体实体。
透明纹理:名称前带有{,如{ladder_red。通过一定的设置,在游戏中纯蓝部分会完全透明,只留下不是蓝色的部分,可以用来做梯子等等。
动画纹理:首帧前为+0的纹理,如+0movie。这类纹理在地图中可以自动按+1、+2、+3……的顺序播放,比如覆盖有+0movie的固体,在游戏中就会自动按照+1movie、+2movie……自动变化下去,而且是循环的。(只有覆盖开头为+0纹理才能变化,贴上+1、+2……就不行了!)
切换纹理:首帧前为+0,末帧前为+A的纹理,如+0button、+Abutton。必须经过引发才会播放的纹理,引发后+0变为+A,然后如果需要还可以变回来,可以用来制作按钮。
印花纹理:存在于decals.wad,VHE中“印花工具”使用的纹理,在游戏中作为墙壁上的喷涂、血迹等等。
[编辑本段]【实体列表】
════◇◆▇○ func实体 ○▇◆ ◇═══
func,是英文“Function”的缩写,中文为功能的意思。顾名思义,这类实体是让我们模仿现实生活中的某种物体的功能或实现某种游戏设计意图的实体。该类实体全部是固体实体。
这些就是CS中可能使用到的实体名称及其作用的简述。
func_bomb_target
C4爆炸时引发的实体
func_breakable
「描述」:
可以打碎的实体,我们可以用他来做可以打烂的东西。这是一个每回合都会回复的实体。
▉相关实体▇: func_pushable
func_button 开关
「描述」: 制作可移动的开关的实体。
▇相关实体▇: func_rot_button
momentary_rot_button
button_target
func_buyzone 设置购买装备的区域
「描述」:设置玩家购买区域的实体。游戏里不可见。
func_conveyor 传送带或自动扶梯
「描述」:制作传送带、自动扶梯等东西的实体。玩家站在上面可以被搬运到其他地方。实体角度决定了他的传送方向。
func_door 移动的门
「描述」:移动的门。该实体的实体角度决定了门的移动方向。 注意:门是一个每回合会自动回复的实体,就是说每回合开始时,他的状态是和你的地图设定一样的,而与上个回合时所处的状态是无关的,这个特性是非常有用的,大家可以慢慢体会。另外注意,每回合开始时,“目标”和“关闭时引发的实体”中被指定的实体将被自动被引发一次。这应该是一个bug,导致的后果非常糟糕,我建议大家不要用门来引发其他实体,因为门的这个bug将会导致每回合开始时地图状态和你的想象大不相同。(不过国外有很多文章,大体是说利用这个bug来使每回合不会自动复位的实体复位)
▇相关实体▇: func_door_rotating
momentary_door
func_water
func_door_rotating 转动的门
(配合origin纹理使用)
「描述」:转动的门。和移门非常相似。区别在于一个是移动,一个是转动。转门是需要轴心的。 注意:门是一个每回合会自动回复的实体,就是说每回合开始时,他的状态是和你的地图设定一样的,而与上个回合时所处的状态是无关的,这个特性是非常有用的,大家可以慢慢体会。另外注意,每回合开始时,“目标”和“关闭时引发的实体”中被指定的实体将被自动被引发一次。这应该是一个bug,导致的后果非常糟糕,我建议大家不要用门来引发其他实体,因为门的这个bug将会导致每回合开始时地图状态和你的想象大不相同。(不过国外有很多文章,大体是说利用这个bug来使每回合不会自动复位的实体复位)
▇相关实体▇: func_door
momentary_door
func_escapezone 设置土匪的逃跑区域
「描述」:在地图里不可见,只是规定了一个区域,当土匪玩家接触到这个区域时,土匪胜利。可以用做“土匪逃逸地图”的制作。这种类型的地图很少见,原因有2,首先是了解这个实体的人不是很多,其次是这个实体在LINUX系统的服务器使用时往往会有问题。
func_friction 设置摩擦系数的实体
「描述」:用以改变玩家和地面的摩擦系数的实体。当玩家穿越或接触这个实体的时候,这个玩家对地面的摩擦系数将会改变。往往用于制作冰面或打滑的路面的效果。当下一回合开始时,玩家的摩擦系数将会自动恢复正常。
func_grencatch 使用投掷类武器的触发区域
「描述」:该实体在游戏里不可见,他规定了一个区域,当玩家把指定类型的手雷仍到这个区域时,该实体将引发他所指定的实体。这个实体在地图载入后只能使用一次,不是每个回合都能用的。除非你重新开局加载地图。
func_guntarget q靶
「描述」:制作移动q靶的实体。该实体会沿着path_corner指定的路径移动,在移动过程中你可以向他射击,受到q击后将会停止。该实体必须要配合path_corner实体才能工作。
▇相关实体▇: path_corner
func_healthcharger 加血的实体
(按E才能使用)
「描述」:游戏里给玩家补血的实体。不是满血的玩家对他使用“e”键将可以补到血。这个实体可以补给的血量是50。
func_hostage_rescue人质获救的区域
「描述」:在地图里不可见,只是规定了一个区域,当所有人质接触到这个区域时,警察胜利。用做“人质拯救地图”的制作。
func_illusionary 看得见但摸不到的实体
可以穿过
「描述」:制作“空”的物体的实体。在游戏里,看上去是存在的,但是玩家可以穿过的。还记得cs1.3版的de_aztec么?土匪老家有一块石头,玩家可以躲进石头里面。这块石头就是用这个实体制作的。
▇相关实体▇: func_wall_toggle
func_ladder 梯子
(游戏中不可见)
「描述」:梯子。在地图里不可见,只是规定了一个区域,玩家在这个区域可以爬上爬下。 一般是配合func_illusionary实体一起使用的。使用func_illusionary实体制作梯子的外观使我们可以在游戏里看见他,使用func_ladder实体使我们可以在游戏使用他。这2个实体一个提供外表样子,一个提供功能,共同组成一个既看得到又能使用的梯子。
▇相关实体▇: func_illusionary
func_mortar_field 空中支援实体
(CS中无效)
func_pendulum 单摆
「描述」:制作象钟摆、秋千等来回摆动的实体。该实体是需要轴心的。实体角度决定了他的摆动的方向。
func_plat 会上升的实体
「描述」:制造一个平台:当玩家站在上面时,他会栽着玩家上升到指定高度。可以作为制作电梯实体之一。 做地图时,我们在安置这个实体的时候,必须把他放在最高点的位置。一旦进入游戏,他会自动出现在最低点的位置。
▇相关实体▇: func_platrot
func_platrot 会旋转上升的实体
「描述」:制造一个平台:当玩家站在上面时,他会载着玩家旋转着上升到指定高度。可以作为制作电梯实体之一。和func_plat实体唯一的区别是他是边旋转边上升的。这是一个需要轴心的实体。
做地图时,我们在安置这个实体的时候,必须把他放在最高点的位置。一旦进入游戏,他会自动出现在最低点的位置。
▇相关实体▇: func_plat
func_pushable 可以推动的实体
(BUG:每局不能自动恢复)
「描述」:
游戏里可以被玩家推动的实体。
▇相关实体▇: func_breakable
func_recharge 加盔甲防护值的实体
(加盔甲防护值的实体按E才能触发)
「描述」:
游戏里给玩家补充盔甲的实体。不是满盔甲的玩家对他使用“e”键将可以补到盔甲。这个实体可以补给的盔甲量是50。
func_rot_button 转动的开关
「描述」:
制作可转动的开关的实体。该实体是需要轴心的。
▇相关实体▇:func_button
func_rotating 不停转动的实体
「描述」:
制作转动的物体的固体,如:风扇等。该实体需要轴心。
func_tank 机q
「描述」:
制造机q的实体。这是一个需要轴心的实体。
▇相关实体▇: func_tankcontrols
func_tankcontrols 设置机q、大炮、激光炮的控制区域
「描述」:
游戏里他是隐形的。是玩家控制使用func_tank、func_tankmortar、func_tanklaser实体的地方。放在你想放的地方。当玩家进入这个实体所定义的区域时,使用“e”键便可以控制上述实体了。
▇相关实体▇: func_tank
func_tankmortar
func_tanklaser
func_tanklaser 激光炮
「描述」:
制造镭射机q的实体。这是一个需要轴心的实体。该实体必须配合一个env_laser实体才能工作。
▇相关实体▇: func_tankcontrols
env_laser
func_tankmortar 大炮
「描述」:
制造大炮的实体。这是一个需要轴心的实体。和func_tank实体很象,唯一的区别是他射出的是炮d而func_tank射出的是子d。
▇相关实体▇: func_tankcontrols
func_tank
func_trackautochange 火车自动立体变轨系统
「描述」:
自动火车的变轨系统。当火车行驶到这个实体上面时,这个实体可以变轨连接另一个轨道,好了以后火车继续行驶。说他自动是因为这个实体适用于玩家不能控制的自动火车。这个实体默认是停留在“第一路径”所处的位置的。 这是一个需要轴心的实体。
▇相关实体▇: func_trackchange
func_trackchange 火车平面变轨系统
「描述」:
火车的变轨系统。一般使用于玩家可以控制的火车的变轨。这个实体默认是停留在“第一路径”所处的位置的。 这是一个需要轴心的实体。
▇相关实体▇: func_trackautochange
func_tracktrain 火车 (与path_track配合使用)
「描述」:
制作火车的实体。该实体必须和path_track实体一起才能工作。如果你需要玩家能够控制他,func_traincontrols实体也是必须的。该实体是需要轴心的实体。★注意★:该实体在制作的时候,在你软件的top视图里面,头的方向必须是向左的。
▇相关实体▇: path_track
func_train 平移的平台 (平移的平台)
「描述」:
首先这个可不是让你制作火车的实体。他是制作一个移动的平台,这个平台将沿着path_corner实体指定的路径移动。很多地图制作者使用这个实体来制作电梯。该实体必须要配合path_corner实体才能工作。
▇相关实体▇: path_corner
func_traincontrols 设置火车的驾驶区域 (设置火车的驾驶区域)
「描述」:
游戏里不可见,规定一个区域,玩家在这个区域使用“e”键里面可以控制指定的func_tracktrain实体。注意:这个实体是随目标实体一起运动的,一般放在你需要控制的func_tracktrain实体的上面(玩家控制的时候可以随着一起运动),不要指望放在实体以外的其他地方,来个遥控指挥,他是不会工作的。
func_vehicle 汽车 (需要origin纹理)
「描述」:
制作汽车的实体。该实体是需要轴心的实体。★注意★:该实体在制作的时候,在你软件的top视图里面,车头的方向必须是向左的。
▇相关实体▇: func_vehiclecontrols
func_vehiclecontrols 设置汽车的驾驶区域
「描述」:
游戏里不可见,规定一个区域,玩家在这个区域使用“e”键里面可以控制指定的func_vehicle实体。★注意★:这个实体是随目标实体一起运动的,一般放在你需要控制的func_vehicle实体的上面(玩家控制的时候可以随着一起运动),不要指望放在实体以外的其他地方,来个遥控指挥,他是不会工作的。
func_vip_safetyzone 设置 vip 的逃逸区域
「描述」:
游戏里不可见,规定一个区域,vip接触或进入这个区域时警察获胜。用于制作“vip”类型的地图。
func_wall 墙 (可以透明)
「描述」:
最普通的实体,和固体没有什么大的区别,唯一的区别是他拥有“渲染属性”,一般用来制作有透明纹理的栏杆、打不烂的玻璃等物体。
▇相关实体▇: func_wall_toggle
func_wall_toggle 可控制出现消失的一般实体
「描述」:
和func_wall非常相似的实体,只不过他是可以让我们控制消失和出现的。
▇相关实体▇:func_wall
func_water 水 (这个水可以透明带波浪)
「描述」:
制作液体的实体。如果需要,还能像 *** 作func_door实体一样 *** 作这个液体。也就是会移动的液体。
═══◇◆▇○game实体○▇◆◇═══
关于游戏所涉及到的实体,一般在CS中运用受到限制
game_counter 记数实体
「描述」:
一个记数引发类实体,当这个实体被引发的次数累加达到实体规定的次数的时候,将引发目标实体。点实体,可放在地图任何位置。
game_counter_set 设置记数实体的实体
「描述」:
一个给game_counter实体设置新的“限制值”的实体,该实体被引发时,将会把目标实体的“限制值”键值更改为新的值。
game_end 游戏结束
「描述」:
当该实体被引发使,将使游戏结束。点实体,可放于任何位置。
game_player_equip
「描述」:
点实体,用于设置每回合开始时双方玩家的默认携带的武器物品。可放于地图任何位置。
game_player_hurt
「描述」:
可对引发他的玩家造成伤害的实体。点实体,可放在地图任何位置。
game_player_team 更改玩家阵营的实体
「描述」:
可让引发他的玩家变更阵营。点实体,可放在地图任何位置。
game_score 记分的实体
「描述」:
被引发时可以给玩家或玩家的队伍加减分数的实体。点实体,可放在地图任何位置。
game_team_master 确认玩家队伍
「描述」:
点实体,可放在地图任何位置。用来作为引擎判断队伍的初始数据或着是过度实体。game类实体都可把他设为“属主”当他的状态和“引发的状态”设定一致时,设他为“属主”的实体才会处于可使用状态。
game_team_set 设置玩家队伍
「描述」:
点实体,可放在地图任何位置。当玩家引发这个实体时,玩家所处的队伍将会被他传递给目标game_team_master实体,作为目标game_team_master的数据。
game_text 屏幕输出文本(无法使用中文)
「描述」:
点实体,可放在地图任何位置。可以在屏幕上显示字定义文本信息的实体。
game_zone_player 根据玩家所在区域判断引发的实体
「描述」:
游戏里不可见,规定一个区域,根据玩家的所处的位置来引发其他实体。唯一一个以game开头的固体实体。
═══◇◆▇○info实体○▇◆◇═══
gh0st远控软件采用驱动级RESSDT过主动,svchost参数启动,替换系统服务的方式工作的,工作方式较为先进,美中不足的部分是没有进行驱动级或用户级隐藏,当然这部分可以添加进去。编码利用了VC的编程环境。一、环境睁晌顷配置
编译环境一定要配置好:DDK+SDK+VC6,DDK用来编译sys文件的,SDK+VC6是用来编译工程的,配置部分比较简单,网上有很多资料,这里不再详述,有兴趣的朋友也可以查看DDK和SDK的相关帮助。
二、特征码定位简述
杀毒软件查杀木马的原理基本是根据特征查杀的,被查杀的部分我们称之为特征码,所以我们可以利用特征码定位工具MyCLL定位出病毒的特征码位置,定位工具原理是将被扫描木马分块,利用分段填充的方式,匹配杀软的特征值,找到杀软查杀病毒的位置。
定位出特征码,如何反向找到源码中的对应位置呢?请看下面分析,
三、二进制文件与源码定位之map文件利用
map文件是二进制和源码之间对应的一个映射文件。
我们假设根据第三步我们定位出谨桥了病毒的特征码:
病毒名称 特征码位置 内存地址
svchost.dll 000038AA_00000002 100044AA
svchost.dll 00005F98_00000002
第一步设置VC编译环境生成Map文件。
在 VC 中,点击菜单“Project ->Settings”选项页(或按下 Alt+F7),选择 C/C++ 选项卡,并在最下面的 Project Options 里面输入:/Zd ,然后要点击 Link 选项卡,选中“Generate mapfile”复选框,并在最下面的 Project Options 里面输入:/mapinfo:lines,表示生成 MAP 文件时,加入行信息。设置完成。
第二步编译VC工程,设置悉陆活动工程编译即可,这个不用说明。这个步骤完成后,在release(或debug)目录,多了一个.map文件(比如svchost.map)。
第三步打开map文件(用UE或文本编辑器打开都行),形式如下:
(begin)
Timestamp is 488fcef2 (Wed Jul 30 10:16:18 2008)
Preferred load address is 10000000
---------------------------------------------------------------------------1----(为方便说明,wrw添加)
Start Length Name Class
0001:00000000 00010a50H .text CODE
0001:00010a50 00000485H .text$x CODE
0002:00000000 000004c8H .idata$5 DATA
......
0003:00000010 00000004H .CRT$XIZ DATA
0003:00000020 00001a50H .data DATA
0003:00001a70 00000688H .bss DATA
0004:00000000 000000a8H .rsrc$01 DATA
0004:000000b0 00000cf0H .rsrc$02 DATA
----------------------------------------------------------------------------2---(为方便说明,wrw添加)
Address Publics by Value Rva+Base Lib:Object
0001:00000000 ??0CAudio@@QAE@XZ 10001000 f Audio.obj
0001:000000d0 ??_GCAudio@@UAEPAXI@Z 100010d0 f i Audio.obj
0001:000000d0 ??_ECAudio@@UAEPAXI@Z 100010d0 f i Audio.obj
0001:000000f0 ??1CAudio@@UAE@XZ 100010f0 f Audio.obj
0001:000001e0 ?getRecordBuffer@CAudio@@QAEPAEPAK@Z 100011e0 f Audio.obj
0001:00000240 ?playBuffer@CAudio@@QAE_NPAEK@Z 10001240 f Audio.obj
0001:000002c0 ?InitializeWaveIn@CAudio@@AAE_NXZ 100012c0 f Audio.obj
......
0001:00003310 ?SendToken@CFileManager@@AAEHE@Z 10004310 f FileManager.obj
0001:00003320 ?UploadToRemote@CFileManager@@AAE_NPAE@Z 10004320 f FileManager.obj
0001:00003440 ?FixedUploadList@CFileManager@@AAE_NPBD@Z 10004440 f FileManager.obj
0001:00003670 ?StopTransfer@CFileManager@@AAEXXZ 10004670 f FileManager.obj
0001:00003730 ?CreateLocalRecvFile@CFileManager@@AAEXPAE@Z 10004730 f FileManager.obj
......
----------------------------------------------------------------------------3---(为方便说明,wrw添加)
Line numbers for .\Release\FileManager.obj(E:\vtmp\gh0st3src\Server\svchost\common\FileManager.cpp) segment .text
17 0001:00002630 20 0001:0000267f 21 0001:00002698 24 0001:000026d0
25 0001:000026f8 26 0001:0000273c 29 0001:000027d0 33 0001:000027ee
77 0001:000027f8 36 0001:000027fb 37 0001:00002803 77 0001:0000280d
......
532 0001:0000340f 534 0001:00003414 537 0001:00003428 540 0001:00003440
546 0001:0000345d 547 0001:00003487 548 0001:00003490 549 0001:00003492
551 0001:0000349e 552 0001:000034b8 553 0001:000034cb 554 0001:000034d4
558 0001:000034de 560 0001:000034e9 563 0001:000034ee 564 0001:00003506
......
(end)
我们看下,定位svchost.dll 的第一个特征码内存地址为:100044AA,在第2块中,我们可以找到RVA+BASE与之很接近的是
0001:00003440 ?FixedUploadList@CFileManager@@AAE_NPBD@Z 10004440 f FileManager.obj
这样我们可以定位到FileManager.cpp中的FixedUploadList函数,是不是范围缩小了?
下面我们再缩小代码行
利用这个公式:特征码行偏移 = 特征码地址(Crash Address)- 基地址(ImageBase Address)- 0x1000
看起来好像很难,其实很简单,我们将100044AA去掉内存基址10000000,再减1000,因为PE很多从1000开始,可以得到代码偏移地址为34AA。到第3块中找对应的代码行。
偏移地址34AA在(551 0001:0000349e 552 0001:000034b8 )中间,也就是551行和552行中间,我们到源程序中查找第551行:
wsprintf(lpszFilter, "%s%s*.*", lpPathName, lpszSlash)
这样就定位出源代码了,要怎么修改就怎么修改它就可以了。
四、实战免杀
A、卡巴免杀
首次编译后,先做卡巴的免杀。卡巴杀sys文件和dll,当然也就杀包装它们的install.exe,最后卡巴还杀生成的sever,我这里说杀生成好的server不是和前面的特征码重叠的地方,而是杀配置信息。
第一步、sys免杀
sys重新编译后,增加了输入表的函数,同时系统不同,造成很多地方不同于原特征,顺利通过卡巴、金山、小红伞等杀软。
第二步、svchost.dll免杀
特征码定位MultiByteToWideChar和"gh0st update"两个位置。这里是通过第3步map文件得出的。
卡巴怕加花指令, 这个函数MultiByteToWideChar的调用上,可以在这个函数前面随便加几句无效语句就可以通过卡巴杀软。
字符串调用"gh0st update" ,这个是用于更新用的 ,如果不要在线更新,直接把这个语句所在代码块删除;嘿嘿,其实搜索工程替换这个字符串为其他的字符串就可以了^_^,这个方法同时可以过金山杀软。
第三步、server免杀
卡巴定位在最后的配置信息,采取跳转显然是不行的,采用加花的办法,在写入AAAAAA配置信息之前,随便写些东西,就可以做server免杀。
卡巴免杀完成!
B、Avast免杀
最新的avast杀软再查杀1下,杀install.exe和svchost.dll(也就是杀生成的文件和其中的资源文件),接着做它的源码免杀。
定位在特征字符串%02d/%02d/%02d和“SYSTEM\CurrentControlSet\Services\%s”两个地方。
解决方案:
1、svchost.dll的特征码定位在键盘记录KeyboardManager.cpp文件中的SaveInfo(char *lpBuffer)函数。特征字符串%02d/%02d/%02d,也就是我们看到键盘记录的日期,修改之,修改的方法很多,将其改为[%d/%d/%d %d:%d:%d] ,编译即可通过avast杀软。
2、install的特征码定位在“SYSTEM\CurrentControlSet\Services\%s”,对应文件是install.cpp里的InstallService函数,修改大小写,编译即可通过免杀。
五、添加垃圾代码的小方法
垃圾代码要移动特征码所在的位置,不要跑到堆栈中了,这样的代码没有用。可以采取添加for循环,做计数,简单统计,采用局部变量,不改变后面的逻辑为宜。
添加输出表的方法:
有杀输出表的,可以在生成的svchost.dll上添加空函数 ,但是每次编译都要修改1次资源 ,其实我们在源码上添加如下语句:
extern "C" __declspec(dllexport) bool JustTempFun()//声明
……
extern "C" __declspec(dllexport) bool JustTempFun() //实现
{
return false
}
编译后,输出表就被改变了,有的杀软就可做到代码免杀。
六、gh0st自动生成6to4ex.dll的修改
看到好多站友提问自动生成6to4ex.dll的问题,有热心站友也提出了自己的见解 ,我感觉有些人提出的解决方案不完全正确,有可能造成刚入手人误解,我根据自己的理解说明1下。
gh0st服务端是通svchost -netsvcs启动的,所以程序要利用netsvcs 服务,服务端也就是根据netsvcs生成的,故不能说服务端生成是随机的,相对于大多数系统来讲,基本是固定的,下面看分析。
查看install.cpp里面的InstallService()方法,首先遍历HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Windows NT\CurrentVersion\Svchost中的服务项,查找到一个服务后,程序采取替换服务的方法,将原服务删除,然后生成对应服务项+ ex.dll的文件替换原服务,6to4服务一般排在第一位,6to4服务是一种自动构造隧道的方式,作用在于只需要一个全球惟一的IPv4地址便可使得整个站点获得IPv6 的连接,这个服务对一般人来讲,基本闲置,所以我们的程序就把6to4服务给替换掉,同时在windows\system32\目录下生成 6to4ex.dll,以后启动就是6to4ex了,如果把这个服务跳过去,就依次向下生成Ias、Iprip等服务啦,如果netsvcs项没有可以替换的服务,则程序将自己添加1个服务,名称就是由 AddsvchostService()方法产生的netsvcs_0x%d。
这样说不知道关心服务名称的明白了不?
这个不能说是技术问题,但是小技巧问题可以从这里产生,我不知道其他人的360是怎么过的,但是我觉得可以提示1下的是,如果是360默认系统安全的服务,它肯定不会报不安全,替换闲置的系统安全的服务则通过360的效果要好的多
本文来自: 华夏黑客同盟论坛 本文详细地址:http://bbs.77169.com/read.php?tid=255676
随便按敏悄壮大一个地方。然后按他的目录一个一个拷进去就OK了。
他只是个类似与桥迟渣旦正RAR的EXE不写进注册表。
没关系。
祝你成功。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)