2023年12月24日发(作者:)

gh0st远控软件采用驱动级RESSDT过主动

gh0st远控软件采用驱动级RESSDT过主动2010-05-30 16:45,svchost参数启动,替换系统服务的方式工作的,工作方式较为先进,美中不足的部分是没有进行驱动级或用户级隐藏,当然这部分可以添加进去。编码利用了VC的编程环境。一、环境配置编译环境一定要配置好:DDK+SDK+VC6,DDK用来编译sys文件的,SDK+VC6是用来编译工程的,配置部分比较简单,网上有很多资料,这里不再详述,有兴趣的朋友也可以查看DDK和SDK的相关帮助。二、特征码定位简述杀毒软件查杀木马的原理基本是根据特征查杀的,被查杀的部分我们称之为特征码,所以我们可以利用特征码定位工具MyCLL定位出病毒的特征码位置,定位工具原理是将被扫描木马分块,利用分段填充的方式,匹配杀软的特征值,找到杀软查杀病毒的位置。定位出特征码,如何反向找到源码中的对应位置呢?请看下面分析,三、二进制文件与源码定位之map文件利用map文件是二进制和源码之间对应的一个映射文件。我们假设根据第三步我们定位出了病毒的特征码:病毒名称特征码位置内存地址 000038 AA_

00000002 100044 AA 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文件(比如)。第三步打开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 CODE 0001:00010a50 00000485

$x CODE 0002:00000000 000004 DATA.0003:00000010

00000004 $XIZ DATA 0003:00000020 DATA 0003:00001a70 00000688 DATA 0004:00000000 000000 DATA 0004:

000000 b0 DATA--2---(为方便说明,wrw添加)Address

Publics by Value Rva+Base Lib:Object 0001:00000000?0CAudio@QAE@XZ

10001000 0001:000000 d0?_GCAudio@UAEPAXI@Z 100010 d0 fi

0001:000000 d0?_ECAudio@UAEPAXI@Z 100010 d0 fi

0001:000000 f0?1CAudio@UAE@XZ 100010 f0 0001:000001

e0?getRecordBuffer@CAudio@QAEPAEPAK@Z 100011 e0 0001:00000240?playBuffer@CAudio@QAE_NPAEK@Z 10001240 0001:000002 c0?InitializeWaveIn@CAudio@AAE_NXZ 100012 c0 .0001:00003310?SendToken@CFileManager@AAEHE@Z 10004310

0001:00003320?UploadToRemote@CFileManager@AAE_NPAE@Z 10004320

0001:00003440?FixedUploadList@CFileManager@AAE_NPBD@Z 10004440

0001:00003670?StopTransfer@CFileManager@AAEXXZ

10004670 0001:00003730?CreateLocalRecvFile@CFileManager@AAEXPAE@Z 10004730

.--3---(为方便说明,wrw添加)Line numbers

(E:) 17

0001:00002630 20 0001:0000267 f21 0001:00002698 24 0001:000026 d0

25 0001:000026 f8 26 0001:0000273 c29 0001:000027 d0 33 0001:000027 ee 77 0001:000027 f8 36 0001:000027 fb 37 0001:00002803 77

0001:0000280 d.532 0001:0000340 f534 0001:00003414 537 0001:00003428 540 0001:00003440 546 0001:0000345 d547 0001:00003487 548

0001:00003490 549 0001:00003492 551 0001:0000349 e552 0001:000034

b8 553 0001:000034 cb 554 0001:000034 d4 558 0001:000034 de 560

0001:000034 e9 563 0001:000034 ee 564 0001:00003506.(end)我们看下,定位的第一个特征码内存地址为:100044 AA,在第2块中,我们可以找到RVA+BASE与之很接近的是0001:00003440?FixedUploadList@CFileManager@AAE_NPBD@Z 10004440

这样我们可以定位到中的FixedUploadList函数,是不是范围缩小了?下面我们再缩小代码行利用这个公式:特征码行偏移=特征码地址(Crash Address)-基地址(ImageBase Address)-

0x1000看起来好像很难,其实很简单,我们将100044 AA去掉内存基址10000000,再减1000,因为PE很多从1000开始,可以得到代码偏移地址为34AA。到第3块中找对应的代码行。偏移地址34AA在(551 0001:0000349

e552 0001:000034 b8)中间,也就是551行和552行中间,我们到源程序中查找第551行:wsprintf(lpszFilter,"%s%s*.*",lpPathName,lpszSlash);这样就定位出源代码了,要怎么修改就怎么修改它就可以了。四、实战免杀A、卡巴免杀首次编译后,nod32免费激活码,先做卡巴的免杀。卡巴杀sys文件和dll,当然也就杀包装它们的,最后卡巴还杀生成的sever,我这里说杀生成好的server不是和前面的特征码重叠的地方,而是杀配置信息。第一步、sys免杀sys重新编译后,增加了输入表的函数,同时系统不同,造成很多地方不同于原特征,顺利通过卡巴、金山、小红伞等杀软。第二步、免杀特征码定位MultiByteToWideChar和"gh0st update"两个位置。这里是通过第3步map文件得出的。卡巴怕加花指令,这个函数MultiByteToWideChar的调用上,可以在这个函数前面随便加几句无效语句就可以通过卡巴杀软。字符串调用"gh0st update",这个是用于更新用的,如果不要在线更新,直接把这个语句所在代码块删除;嘿嘿,其实搜索工程替换这个字符串为其他的字符串就可以了^_^,这个方法同时可以过金山杀软。第三步、server免杀卡巴定位在最后的配置信息,采取跳转显然是不行的,采用加花的办法,在写入AAAAAA配置信息之前,随便写些东西,就可以做server免杀。卡巴免杀完成!B、Avast免杀最新的avast杀软再查杀1下,杀和(也就是杀生成的文件和其中的资源文件),接着做它的源码免杀。定位在特征字符串%02d/%02d/%02d和"SYSTEMCurrentControlSetServices%s"两个地方。解决方案:1、的特征码定位在键盘记录文件中的SaveInfo(char*lpBuffer)函数。特征字符串%02d/%02d/%02d,也就是我们看到键盘记录的日期,修改之,修改的方法很多,将其改为[%d/%d/%d%d:%d:%d],编译即可通过avast杀软,nod32许可证。2、install的特征码定位在"SYSTEMCurrentControlSetServices%s",对应文件是里的InstallService函数,修改大小写,编译即可通过免杀。五、添加垃圾代码的小方法垃圾代码要移动特征码所在的位置,不要跑到堆栈中了,这样的代码没有用。可以采取添加for循环,做计数,简单统计,采用局部变量,不改变后面的逻辑为宜。添加输出表的方法:有杀输出表的,可以在生成的

上添加空函数,但是每次编译都要修改1次资源,其实我们在源码上添加如下语句:extern"C"__declspec(dllexport)bool JustTempFun();//声明…extern"C"__declspec(dllexport)bool JustTempFun()//实现{return

false;}编译后,输出表就被改变了,有的杀软就可做到代码免杀。六、gh0st自动生成的修改看到好多站友提问自动生成的问题,有热心站友也提出了自己的见解,我感觉有些人提出的解决方案不完全正确,有可能造成刚入手人误解,我根据自己的理解说明1下。gh0st服务端是通svchost-netsvcs启动的,所以程序要利用netsvcs服务,服务端也就是根据netsvcs生成的,故不能说服务端生成是随机的,相对于大多数系统来讲,基本是固定的,下面看分析。查看里面的InstallService()方法,首先遍历HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows

NTCurrentVersionSvchost中的服务项,查找到一个服务后,程序采取替换服务的方法,将原服务删除,然后生成对应服务项+的文件替换原服务,6to4服务一般排在第一位,6to4服务是一种自动构造隧道的方式,作用在于只需要一个全球惟一的IPv4地址便可使得整个站点获得IPv6的连接,这个服务对一般人来讲,基本闲置,所以我们的程序就把6to4服务给替换掉,同时在windowssystem32目录下生成,以后启动就是6to4ex了,如果把这个服务跳过去,就依次向下生成Ias、Iprip等服务啦,如果netsvcs项没有可以替换的服务,则程序将自己添加1个服务,名称就是由AddsvchostService()方法产生的netsvcs_0x%d。这样说不知道关心服务名称的站友明白了不?这个不能说是技术问题,但是小技巧问题可以从这里产生,我不知道其他人的360是怎么过的,但是我觉得可以提示1下的是,如果是360默认系统安全的服务,它肯定不会报不安全,替换闲置的系统安全的服务则通过360的效果要好的多。gh0st免杀Unixshell作者:admin日期:2009-03-08字体大小:小中大gh0st3.6有源码,所以我们可以在源码的基础上做木马的免杀,个人感觉卡巴的免杀最好做。先抛一砖头,有兴趣的朋友可以接着做,也可以和本人交流。编译环境一定要配置好:DDK+SDK+VC6,DDK用来编译sys文件的,SDK+VC6是用来编译工程的,具体为什么以及如何配置可以查看网上有关资料,也可以查看DDK和SDK帮助。首次编译后,先做卡巴的免杀。卡巴杀sys文件和dll,当然也就杀包装它们的,最后卡巴还杀生成的sever,我这里说杀生成好的server不是和前面的特征码重叠的地方,而是杀配置信息。sys免杀sys重新编译后,增加了输入表的函数(原因未知,有兴趣

的朋友可以比较1下),顺利通过卡巴、金山、小红伞等杀软。免杀1、MultiByteToWideChar这个函数的调用上,卡巴就怕花,可以在这个函数前面随便加几句无效语句就可以。2、字符串调用"gh0st update",这个是用于更新用的,如果不要在线更新,直接把这个语句所在代码块删除;嘿嘿,其实搜索工程替换这个字符串为其他的字符串就可以了^_^,这个方法同样可以过金山,谁让我们有源码呢。server免杀卡巴定位在最后的配置信息,采取跳转显然是不行的,采用加花的办法,在写入AAAAAA配置信息之前,随便写些东西,就可以做server免杀。修改生成的dll在源程序里查找%s%sEx字符串,这个位置就是生成6to4的地方了,可以改成你想生成的任何的东西。纯粹想交流,大家可以在这里跟贴,一起讨论。macfee杀的输出表(ServiceMain)有改过的朋友嘛?为了便于路过者互相提高一下,我把3.6源代码附件上来,网上多的是,懒人就免搜了^_^其实先修改SYS文件.黑防有教程,改完后就过全部杀软了,我指的是SYS文件,DLL和EXE文件把基址改一下,就过N多杀软了.做了这几步,还有瑞星还查杀DLL文件,把DLL文件的大少优化下,加几个输出表.金山杀EXE文件,nod32激活码,把入口点改下就过了.麦咖啡还杀DLL文件的ServiceMain,把ServiceMain移动远点就过了.小红伞`NOD还杀输入表,这2个不会改ServiceMain函数不能注解掉,如果注解掉后,你的木马在重启系统之前还能正常运行,一旦作为服务在后台运行,下次重启你的机器就很脆弱了。ServiceMain是的关键函数,这个函数本身对我们的gh0st是没有什么作用的,但是可以为系统的其他服务提供支持。小红伞变态到杀exe的子系统值,有没有方法?经测试,定位无误,将子系统外的其它数值全部填0,小红伞照杀,移动pe头也不能免杀!添加垃圾代码的小方法:垃圾代码要移动特征码所在的位置,不要跑到堆栈中了,这样的代码没有用。可以采取添加for循环,做计数,简单统计,采用局部变量,不改变后面的逻辑为宜。添加输出表的方法:有杀输出表的,可以在生成的上添加空函数,但是每次编译都要修改1次资源,其实我们在源码上添加如下语句:extern"C"__declspec(dllexport)bool JustTempFun();//声明…extern"C"__declspec(dllexport)bool JustTempFun()//实现{return false;}编译后,输出表就被改变了,有的杀软就可做到代码免杀。gh0st红狼远控自定义过360主要原因还是经过为什么会出现那个什么6xxx的DLL文件.因为红狼的CoolDiyer大大已经说过.服务端的生成是随机的.但看来是不完全随机.是根据系统和什么垃圾来随机的吧.具体我也不清楚哈.嗯.OD载入了.我查个字符

串给大家看看就明白了.这里.[%s%]%s就是所谓的随机.这里我可以准确的告诉大家是 6xx其实就是%s变来的.只要修改%s就可以修改生成出来的是什么DLL了.嘻嘻.我修改成了.(不过大家注意的ex是不要修改的好.因为修改这个会引起不上线.如果想修改后能上线.要连DLL里面的也修改的.这里就不演示了)360看看.发现了.看.对比一下%就是%s变成了6to4而已.gh0st自定义过360改源码的方法:文件里面改wsprintf(strModulePath,"%s%",strSysDir,lpServiceName);这里wsprintf(strModulePath,"%s%",strSysDir,lpServiceName);就行了这个其实是作者的一个失误本意是随机选择服务安装但是这段函数其实并没有真正随机至使每次都从6to4这个服务开始一个简单的解决办法就是for循环里处理下添加一行代码.for(ptr=strSubKey;*ptr;ptr=strchr(ptr,0)+1){if(lstrcmp(ptr,"6to4")==NULL)continue;//添加此行代码//MessageBox(0,ptr,"调试中看看这是什么",0);//////////////////////////////////////////////////////////////////////////char temp[500];.这样就跳过这个服务了:)还有更简单的下面这行代码就是个字符串相加可以随便改wsprintf(strModulePath,"%s%",strSysDir,ptr);例如这样改wsprintf(strModulePath,"%s%",strSysDir,ptr);或者这样改.后缀是什么其实也不重要wsprintf(strModulePath,"%s%",strSysDir,ptr);%s%第一个%s表示路径,第二个%s表示随机文件名,你就把第二个%s直接改为别人字母就行了,改后可以过了360和金山清理的查杀经测试Gh0st的SYS文件,是通用的2.5-3.5都可以用~服务名称写最后描述信息填:360安全卫士实时保护模块。360是行为查杀。GH0ST源码里怎么加花?_asm{你的花指令你的花指令你的花指令你的花指令}ServiceMain函数特敏感.注解掉后,NOD32瑞星麦咖啡都过了.gh0st0免杀过Avast最新修改杀软更新真的好快,前2天还不杀呢,刚刚更新了avast杀软再查杀1下,竟然杀和(也就是杀生成的文件和其中的资源文件),接着做它的源码免杀。解决方案:1、的特征码定位在键盘记录文件中的SaveInfo(char*lpBuffer)函数。特征字符串%02d/%02d/%02d,也就是我们看到键盘记录的日期,修改之,修改的方法很多,将其改为

[%d/%d/%d%d:%d:%d],编译即可通过avast杀软。2、install的特征码定位在"SYSTEMCurrentControlSetServices%s",对应文件是里的InstallService函数,修改大小写,编译即可通过免杀。没有办法上传附件,对应的代码看看吧,这2处特征码修改编译2进制文件也很简单。nod32一般查杀函数导出表(不知道是不是这样称呼的,就是用UE打开,可以看到一堆函数的地方),定位被查杀的函数名称,一般会有两个或多个,用loadlibrary装载函数所在的dll文件,然后将函数改个名称再调用,你会改函数名,剩下的应该不难!最后生成的文件不加壳能过NOD卡巴有个特点,它的特征码都是以代码为主,所以我们在改特征码时不一定要去改原来的特征码,也可以去修改特征以上的的代码,只要稍微调换一下,就可以起如同加花指令的效果。来源:gh0st3.6源码过卡巴2009文件特征码作者:admin日期:2009-03-08字体大小:小中大卡巴2009杀在了我宝贝gh0st 3.6的配置信息上了无奈之余花了一个通宵的时间研究了一下卡巴还是没变啊.对付卡巴只有对他的软肋下手,免杀卡巴用加花是永恒不变的哲理啊用改特征码的方法对付卡巴,无疑是正中卡巴的下怀.难改不说,你改了他还是能找到这里的,卡巴扫描的时候进行了简单的文件分析,卡巴2009更是把这种分析做到了极致.卡巴7.0和卡巴2009还是不一样的.我ghost3.6能过7.0,却过不了2009现在说说我的免杀经历:卡巴2009定位到了配置信息"AAAAAA"上了,特征码在第四个A上.于是,出于简单的修改方法,我把配置信息标识"AAAAAA"换成了"BBBBBB",并且在"BBBBBB"前面加了好多垃圾信息来打乱特征码.但是还是被杀.我无语.于是我在网上搜了一下,都说在前面加几句垃圾信息就没事.但事实不是这样.2009不愧是2009啊.因为这两种方法不行,所以我怀疑卡巴可能是简单的运行了一下木马.分析一下木马的行为.于是,我将木马里面查找配置字符串改成了和配置信息不一样的字符.比如配置信息是"AAAAAA",那我木马查找的字符串是"AA AAAB"这样的话,特征码不变.配置信息还是6个A.但是,奇怪的是,却免杀了.我再用一个方法,用动态变量来表示"AAAAAA",我将两个不同的字符"AAAA"和"AA"用lstrcat函数连接成了一个"AAAAAA".这样的话,静态文件中根本没有6个A,只有运行lstrcat这个API函数的时候,才能得到.卡巴你如果不运行我的木马,是找不到这个"AAAAAA"的.结果文件被杀了.事实证实了我的猜测.卡巴果然是简单的运行了一下木马.于是我尝试关闭卡巴的文件行为分析.在源码里面加了一句while(1){return 0;}这样,木马进入死循环.看你怎么运行跟踪.如我所料.我什么都没有改.只在源码里面加了一句死循环.整个文件就免杀了.原因应该是卡

巴扫描跟踪的时候陷入了死循环.为了不担误时间,只好说.这个文件免杀了.知道卡巴文件杀毒的原理后.我更加自信了.便大胆的进行猜测:一般的文件.你卡巴跟踪扫描的话,一定会延长扫描的时间.一般的用户一定不会忍受扫描一个木马,要10多秒钟.如果有好多个这样的文件,那扫描整个硬盘要多久呢?这是一个杀毒软件的致命问题.所以,我料定卡巴扫描一个文件的时候,只会跟踪一段时间.但时间不长.基于以上的猜测,我开始打造过卡巴的免杀.死循环当然是不行.我加了一个函数Sleep(10000),让程序沉睡10秒.看你卡巴怎么跟踪.我打定你扫一个病毒不敢超过10秒时间.结果很意外.仍然被卡巴杀了.会不会是我的原理错了呢?如果原理没错的话,那卡巴一定是过滤掉了Sleep函数.也就是说,卡巴碰到sleep函数,不执行.直接跳过.想到这里.我就自己写了一个类似Sleep函数功能的c++代码SYSTEMTIME hi;int iCounter;GetLocalTime(&hi);iCounter=d;if(iCounter

49)iCounter=iCounter-50;else iCounter=iCounter+10;while(1){GetLocalTime(&hi);if(d==iCounter)break;}结果是,我成功了.我的以上猜测完全正确.大家鼓掌.我试着将段代码应用到别的被卡巴2009查杀的木马之中.同样能达到免杀效果看到大家还为2009卡巴的文件特征码烦恼.于是将我免杀卡巴2009的日记公布出来.我加的地方是,install工程的,里相关的主题文章:

特别声明:

1:资料来源于互联网,版权归属原作者

2:资料内容属于网络意见,与本账号立场无关

3:如有侵权,请告知,立即删除。