危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2289 浏览18790827

教你怎样源码免杀

源码免杀也离不开手动定位特征码,但是修改比较容易,灵活性也比较大,接下来就听危险漫步给各位慢慢的来分享分析。

一、如何查找特征码

查找特征码与代码的对应位置,是这篇文章首先需要了解的基础。为了方便我们查找,在编译的时候生成map文件,选择vc工程选项(project),在下拉菜单中选择设置(settings),或者你也可以按快捷键alt+f7;弹出工程设置对话框(project settings)。

点击c/c++选项卡,在工程选项(projectoption)中输入/Zd,或者你可以在调试信息(debug info)下拉列表中选择line numbers only。

在连接(link)选项卡讲产生map文件(generate mapfile)打上勾。再在工程选项卡中写入/mapinfo:lines,最后确定。

用od打开文件点击插件弹出下拉菜单选择godup plugins,在其二级菜单中选择load abel。一般我们用myccl定位特征码,定位出特征码,然后导入od。myccl定位出的是文件特征码,而od中是内存地址。一般大家都会用一些地质转换工具把文件地址转换为内存地址再在od中查找,其实od已经给我们准备了这样的插件。在插件中选择olly advanced-option,在addtional options中将启用改进的ctrl+g功能勾上。

ctrl+g运行选中偏移量,在下拉列表中就可以选择要用的文件。例如在xxx出定位出的特征码载入汇编代码为call c在上面有call a,下面有call b,又或者有一些字串。根据这些信息,可以在vc中找相应信息比对,下面的实战中会详细说明。

二、如何定位特征码

我们一般手动定位出来的特征码有一些几种:定位到代码上,定位到字符串上,定位到输入表上(高启发的最爱,例如nod32和小红伞)。

(1)定位到代码

对于代码可以交换代码位置,等价代码替换,合并分离代码,添加花指令。

代码交换:例如int a;int b;定位的位置为int a,你可以换一下位置改成intb:int a:等价替换:例如char a[5]=”hello”;你可以改为char *p=”hello”;

合并分离代码:例如char a[5]=hello;print(a);可以改为print(hello);分离就是其反过程。

添加花指令:例如直接在代码前后加nop。_asm{nop},nop数量随意。

如果不想定位的话,大家可以直接在代码中多出直接加花指令,是代码位置发生变化。即可达到免杀但是对字符串和输入表无效。所以大家在定为特征码之前在代码处先加一些花指令。

(2)定位到字符串

修改字串:现将其中几个字符修改,然后再将其修改过来。例如char *p=hell;你可以改为char*p=mello;p[0]=;

连接字串:将字串分离为两部分,然后再连接一下。例如char *p=hello;可以改为char *p=he;

strcat(p,llo);

字串加密:将字串加密一下,然后在解密。例如char *p=hello;可以将其改为char *p=gdkkn;

for(int i=0;i5;i+=)p[i]++;

翻转字串:例如有字符串为“hello”,你可以现将字串改为“olleh”,再用strrev将其翻转回来,strrev(“olleh”)最后输入结果就为hello。

字串修改应该还有别的方法,大家可以自由发挥。

(3)定位到输入表

定位到输入表可以用动态调用或者延迟加载。例如定位到输入表的MessageBox,你可以将其改为typedef int(WINAPI *pMessageBoxA),pMessageBoxA pMessageBoxA=(pMessageBoxA)GetProcAddress(LoadLibrary(“user32.dll”),”MessageBoxA”);

对于高启发杀的代码,可以用try{}catch{}结构。对于杀入口的可以用#pragma comment(linker,”/ENTRY:xxx”)。对于定位出来的特征码载入c32,看起属于代码部分还是字符串,输入表部分,决定其属于哪一种。

三、实战应用

说了这么多理论,下面开始实战。首先安装编译器,将sdk文件解压覆盖编译器目下的vc98。vc98下的是一些文件。

ghost文件为了保护版权,里面有硬盘锁,必须先将硬盘锁去掉,否则修改版权就会导中硬盘锁,所有盘符不能打开,只能重装系统,大家切记。修改两处就可以去掉硬盘锁。运行源代码,打开搜索框搜unsigned char scode[] =,一会下面的框框就会提示发现一处,我们双击它。

代码就不贴出了,想要的可以来找我要的。

在搜索CBuildView::OnActivateView。

再搜索killmbr将// int KillMBR();注释掉。

现在可以随便修改版权信息了。

搜索m pMainWnd-SetMenu(NULL);注释掉这句可以去掉菜单栏。

搜索CMainFrame::PreCreateWindow,  cs.cx= 646;可以修改软件的宽度,cs.cy=310;修改高度的,cs.lpszName=Ghost RAT Beta;修改标题栏的。搜索COLUMNSTRUCT g_Cohumn_Data[]=可以修改列表控件上方的文字。搜索CMainFrame::OnCreate,在里面加上this -CenterWindow(CWnd::GetDesktop Window());可以使软件打开时居中,默认是左上角的,我最终修改完的样子。

下面来将dll以及install放到bin文件夹中(为了便于我们免杀),工程中的svchost文件就是dll源码文件,ghost就是控制端源码文件,install就是loader文件。alt+f7打开工程设置对话框,切换到连接选项卡,选中右边的svchost将输出文件名(output file name)../install/res/svcbost.dll改为../../bin/g486se.dll,至于dll文件名可以随意更改(一定要修改,有些杀软查杀的)。同理将../../ghost/res/install.exe改为../../bin/install.dat,改为后缀防止不小心点击了它。搜索IDR_DLL,将”res\\svchost.dll”改为..\\..\\bin\\g486se.dll,搜IDR_BSS,将res\\install.exe改为..\\bin\\install.dat。下面删除驱动文件,因为驱动文件现在用不着了。删除工程中svchost下的IDR_SYS资源。再搜索resetssdt,依次将其注释或删除掉。删ghost资源下的IDR_BSS。

来到ghost buildview.cpp

注释掉FreeResource(hResData);接着修改一些字符串(一般杀软都杀的),搜索AAAAAA,搜到三处,将6个替换为任意六个字符的字串,我这里改为XFILES。再搜索CCCCCC,搜到两处,也是改为任意6个字符,我将其改为了SEILFX。搜索Ghost Update,搜到两处,将其改为任意字串,我改为g49esg4e。在server文件下搜索Ghost,搜到一处,将其改为任意字串,我改为了xfi%dles。准备工作的最后一步就是把svchost文件版本信息给改一下,这里我改成卡巴斯基的。

下面先拿一款特征码少的杀软讲解,让大家都感性的认识。今天就拿金山开刀吧。首先打开myccl载入dll文件定位特征码。将特征码开始的位置填为400,大小填为(就是代码段开始的地方和大小)。这里分块,刚开始不易分得太多,分多了费时,我这里分成了10块。点生成,杀软查杀默认生成的output文件,定位出107000_2500,右键复合定位此特征区间,但是无论改成100块还是200块都全部查杀,我们把这个文件载入c32利用折半法手工定位,

从10700开始选取1250个字节,填充为00(对于瑞星,要填充为90)。在用杀软进行查杀,如果杀软不报毒,那说明特征码在从10700开始的1250个字节中,反之则在剩下的1250个字节中。一直重复折半直到找到特征码。我这里找到的位置为107190位置的八个字节。

用od载入dll文件,ctrl+g,输入10719,在下拉列表中选择该dll,跳到一片jump代码处。而该特征码位置代码为jumpGetModuleFileNameExA,操作系统为了区分系统函数调用和用户函数调用,对于用调用采用call xxx形式,对于系统调用采用call xxx,xxx:jump函数。我们在源码svchost中搜索GetModuleFileNameEx(对于函数有两种版本ascll和unicode版本,为了兼容两种版本,定义了一个宏,),搜索到一处,我们在它前面加几句花指令_asm{nop}。

好了,使用金山查杀一下,已经不杀了。

接下来定位dat文件,定位特征码。od打开后什么特征函数也没有。这是应该考虑可能不是代码问题,install代码也不多。从头文件开始慢慢注释掉一些语句,接着查杀。定位为#pragma comment(linker,/defaultlib:msvcrt,lib/opt:nowin98/IGNORE:4078/MERGE:.rdata=.text/MERGE:.data=.text/section:.text,ERW),看这句里面有区段合并(/MERGE:.rdata=.text/MERGE:.data=.text),杀软有时也对区段合并查杀,将区段合并去掉改为

#pragma comment(linker,¨/defaultlib:msvcrt.lib/opt:nowin98/IGNORE:4078”用金山查杀,已经不杀了。现在生成一个服务端,运行,已经上线了。

台下大家们已经听得有点晕了吧?时间也不早了,今天先说这些,只是个热身,大家回去慢慢消化一下吧,下节课我将会带大家免杀卡巴等高启发杀软。

相关推荐