1.灰鸽子如何修改特征码?
2.特征码 怎么改才不会错。。。。。
灰鸽子如何修改特征码?疫情数据源码
灰鸽子是一款非常不错的远程控制软件,使用者也很多,因此是各大杀软的必杀对象。较新的鸽子主要功能代码用DLL实现,这增加了程序的隐蔽性,但同时也加大了修改特征码的难度。对于全部功能由一个EXE文件完成的程序,比如鸽子的老版本和WinShell之类,只需要修改EXE本身既可;而对于运行时会释放DLL文件的版本,不但EXE文件本身有特征码(通常在代码段中),而且DLL中也含有大量特征码。因此,修改的大致过程为:导出DLL,修改DLL,DLL导入EXE,修改EXE。下面以灰鸽子1.版未加壳服务端,卡巴斯基的特征码为例,详细地讲解修改过程。喝口水,准备过草地了。
DLL文件的导出
拿到服务端文件,老规矩,先检测,卡巴报警发现Backdoor.Win.Feutel.a。现量线源码下面导出服务端包含的DLL,灰鸽子官方教程里用的是ResHacker,而我更偏向于使用PE Explorer。打开服务端文件,点击工具栏里的“Resource Viewer/Editor”,会显示资源的树状结构,其中RCData?MAINDLL就是我们需要导出的文件.
可以看到PE Explorer已经自动判断出该资源是一个PE文件。在MAINDLL的图标上单击右键,选择“save resources as”,就可以将MAINDLL资源导出。下面做什么?开始修改吗?别急,MAINDLL中还有两个DLL需要导出。再打开刚导出的资源,可以得到另外两个DLL,名字倒是很直接,一个叫HOOK,一个叫GETKEY.
分别导出这两个DLL,用卡巴斯基检测一下,报警发现了Backdoor.Win.Feutel.a和Trojan-PSW.Win.KeyLogger.c。到这里,基本思路就应该确定了,先修改HOOK和GETKEY两个DLL,然后将其导入MAINDLL,再修改MAINDLL的代码段中含有的特征码,完毕后将其导入原服务端EXE文件,最后修改EXE文件的代码段中含有的特征码!可不要打退堂鼓,让我们一步步来。
修改HOOK
这是bilibili网页源码我们第一次修改DLL,但DLL文件的格式和普通的EXE文件其实没有差别,都是标准的PE文件,如果你看了前两期关于特征码定位器使用的文章的话,操作上应该没有什么问题。我们的思路仍旧是:手动定位确定特征码大体范围,自动定位确定精确的位置。
打开CCL,设置成手动,生成个文件,然后打开HOOK,不选择任何段,对整个文件进行替换,等程序提示全部文件生成完毕后,用卡巴斯基对目标文件夹检测,并将报警的文件删除,最终结果如下:
-------------定位结果------------
序号 起始偏移 大小 结束偏移
B8 B8
D0 B8
C C F8
下面将CCL设置为自动检测,间隔时间为7秒,在输入检测段时将和的数据添加到待检测栏里.
如果你细心的话会发现这两个偏移其实都在CODE段中,这正说明大多数特征码的位置都存在于代码段里。单击确定,进行自动检测,过程就不说了,详细的操作动画过去的黑防都已提供,最终得到如下定位结果:
-------------定位结果------------
序号 起始偏移 大小 结束偏移
A8
A9 A D3
D5 A FF
A A
C A
A
C B1
还真不少,共有8处。修改哪里呢?我的经验是:尽量修改代码,避免修改字符串和数据,因为修改后者必须将每一处调用它的指令都做改动,且在不确定具体含义的疯牛源码情况下很容易出错,不推荐。
先看第一处,用IDA对HOOK进行反汇编,然后找到处,也就是内存偏移D(这里可以用我写的小工具:偏移量转换器,输入文件偏移可以自动计算出内存偏移),这里的代码如下:
CODE:D dd offset off_FB0
CODE:D dd D0Bh, Fh, 6B6F6Fh
CODE:DA1 align 4
很显然,这是一些数据,我们甚至不知道它的意义,要修改真是无从下手。于是看第2处,代码如下:
……
CODE:DAD xor edx, edx
CODE:DAF mov [ebp+var_], edx
CODE:DB2 mov [ebp+var_8], edx
CODE:DB5 mov ebx, eax
CODE:DB7 xor eax, eax
CODE:DB9 push ebp
CODE:DBA push offset loc_F
CODE:DBF push dword ptr fs:[eax]
CODE:DC2 mov fs:[eax], esp
CODE:DC5 xor eax, eax
CODE:DC7 push ebp
……
看来第二处全部是汇编指令,就修改它了。用什么方法呢?前两期我介绍过“指令顺序变换”和“万能跳转”两种方法,当然,能用第一种时尽量用,这里我们也采用变换指令顺序的方法。注意加黑的指令,我们就改变这两句的顺序。修改文件我还是习惯用OllyDbg,因为可以直接进行指令级的操作,你也可以用二进制编辑软件。
用OD打开HOOK,OD会提示“打开的是DLL,是否用Loaddll进行加载”,点确定,然后来到E4DA7处。这里又有问题了,为什么刚才用IDA打开时,winform案例源码位置在DA7而现在却变成E4DA7呢?这是因为DLL加载时,加载基址是可变的。给大家讲一个在OD中判断加载基址的方法。单击OD工具栏中的M,会显示出当前进程内存中的所有模块.
根据名称找到加载我们的DLL的位置,图中可以看到已经被LOADDLL给占据了,因此HOOK只能被发配到D了,相应的,在IDA中的地址需要减去一个差值(-D)才能得到OllyDbg中的地址。
将黑体的指令进行顺序调换,修改如下:
E4DB7 push ebp
E4DB8 C0 xor eax,eax
然后保存修改,再用卡巴斯基来检测一下修改后的HOOK文件,果然,HOOK已经免杀了,是不是很神奇,仅仅修改了三个字节就搞定了!
修改GETKEY
下面该第二个DLL了,过程和修改HOOK的一样,就不详述了,简述一下过程:手动定位的结果如下(生成个文件):
-------------定位结果------------
序号 起始偏移 大小 结束偏移
BC BC
B5 E
DE9 AF E
然后对B5和9DE9两个段进行自动定位,最终结果如下:
-------------定位结果------------
序号 起始偏移 大小 结束偏移
A
A E
F A B9
BB A E5
E6 A
E A E6A
共有7处,还挺多的。原理一样,尽量修改汇编指令,避免字符串和数据。这一次运气不错,第段就是汇编指令:
DA . AD push RC_Data_.DA ; ASCII " <"
DA . 8D ECFEFFFF lea edx,dword ptr ss:[ebp-]
DAC . 8B F8 mov eax,dword ptr ss:[ebp-8]
DAF . E8 FEFFFF call RC_Data_.DAC
相信修改这几句指令已经难不倒你了,将前三句的顺序调换一下:
DA AD push RC_Data_.DA ; ASCII " <"
DA &
特征码 怎么改才不会错。。。。。
灰鸽子是一款非常不错的远程控制软件,使用者也很多,因此是各大杀软的必杀对象。较新的鸽子主要功能代码用DLL实现,这增加了程序的隐蔽性,但同时也加大了修改特征码的难度。对于全部功能由一个EXE文件完成的程序,比如鸽子的老版本和WinShell之类,只需要修改EXE本身既可;而对于运行时会释放DLL文件的版本,不但EXE文件本身有特征码(通常在代码段中),而且DLL中也含有大量特征码。因此,修改的大致过程为:导出DLL,修改DLL,DLL导入EXE,修改EXE。下面以灰鸽子1.版未加壳服务端,卡巴斯基的特征码为例,详细地讲解修改过程。喝口水,准备过草地了。
DLL文件的导出
拿到服务端文件,老规矩,先检测,卡巴报警发现Backdoor.Win.Feutel.a。下面导出服务端包含的DLL,灰鸽子官方教程里用的是ResHacker,而我更偏向于使用PE Explorer。打开服务端文件,点击工具栏里的“Resource Viewer/Editor”,会显示资源的树状结构,其中RCData?MAINDLL就是我们需要导出的文件.
可以看到PE Explorer已经自动判断出该资源是一个PE文件。在MAINDLL的图标上单击右键,选择“save resources as”,就可以将MAINDLL资源导出。下面做什么?开始修改吗?别急,MAINDLL中还有两个DLL需要导出。再打开刚导出的资源,可以得到另外两个DLL,名字倒是很直接,一个叫HOOK,一个叫GETKEY.
分别导出这两个DLL,用卡巴斯基检测一下,报警发现了Backdoor.Win.Feutel.a和Trojan-PSW.Win.KeyLogger.c。到这里,基本思路就应该确定了,先修改HOOK和GETKEY两个DLL,然后将其导入MAINDLL,再修改MAINDLL的代码段中含有的特征码,完毕后将其导入原服务端EXE文件,最后修改EXE文件的代码段中含有的特征码!可不要打退堂鼓,让我们一步步来。
修改HOOK
这是我们第一次修改DLL,但DLL文件的格式和普通的EXE文件其实没有差别,都是标准的PE文件,如果你看了前两期关于特征码定位器使用的文章的话,操作上应该没有什么问题。我们的思路仍旧是:手动定位确定特征码大体范围,自动定位确定精确的位置。
打开CCL,设置成手动,生成个文件,然后打开HOOK,不选择任何段,对整个文件进行替换,等程序提示全部文件生成完毕后,用卡巴斯基对目标文件夹检测,并将报警的文件删除,最终结果如下:
-------------定位结果------------
序号 起始偏移 大小 结束偏移
B8 B8
D0 B8
C C F8
下面将CCL设置为自动检测,间隔时间为7秒,在输入检测段时将和的数据添加到待检测栏里.
如果你细心的话会发现这两个偏移其实都在CODE段中,这正说明大多数特征码的位置都存在于代码段里。单击确定,进行自动检测,过程就不说了,详细的操作动画过去的黑防都已提供,最终得到如下定位结果:
-------------定位结果------------
序号 起始偏移 大小 结束偏移
A8
A9 A D3
D5 A FF
A A
C A
A
C B1
还真不少,共有8处。修改哪里呢?我的经验是:尽量修改代码,避免修改字符串和数据,因为修改后者必须将每一处调用它的指令都做改动,且在不确定具体含义的情况下很容易出错,不推荐。
先看第一处,用IDA对HOOK进行反汇编,然后找到处,也就是内存偏移D(这里可以用我写的小工具:偏移量转换器,输入文件偏移可以自动计算出内存偏移),这里的代码如下:
CODE:D dd offset off_FB0
CODE:D dd D0Bh, Fh, 6B6F6Fh
CODE:DA1 align 4
很显然,这是一些数据,我们甚至不知道它的意义,要修改真是无从下手。于是看第2处,代码如下:
……
CODE:DAD xor edx, edx
CODE:DAF mov [ebp+var_], edx
CODE:DB2 mov [ebp+var_8], edx
CODE:DB5 mov ebx, eax
CODE:DB7 xor eax, eax
CODE:DB9 push ebp
CODE:DBA push offset loc_F
CODE:DBF push dword ptr fs:[eax]
CODE:DC2 mov fs:[eax], esp
CODE:DC5 xor eax, eax
CODE:DC7 push ebp
……
看来第二处全部是汇编指令,就修改它了。用什么方法呢?前两期我介绍过“指令顺序变换”和“万能跳转”两种方法,当然,能用第一种时尽量用,这里我们也采用变换指令顺序的方法。注意加黑的指令,我们就改变这两句的顺序。修改文件我还是习惯用OllyDbg,因为可以直接进行指令级的操作,你也可以用二进制编辑软件。
用OD打开HOOK,OD会提示“打开的是DLL,是否用Loaddll进行加载”,点确定,然后来到E4DA7处。这里又有问题了,为什么刚才用IDA打开时,位置在DA7而现在却变成E4DA7呢?这是因为DLL加载时,加载基址是可变的。给大家讲一个在OD中判断加载基址的方法。单击OD工具栏中的M,会显示出当前进程内存中的所有模块.
根据名称找到加载我们的DLL的位置,图中可以看到已经被LOADDLL给占据了,因此HOOK只能被发配到D了,相应的,在IDA中的地址需要减去一个差值(-D)才能得到OllyDbg中的地址。
将黑体的指令进行顺序调换,修改如下:
E4DB7 push ebp
E4DB8 C0 xor eax,eax
然后保存修改,再用卡巴斯基来检测一下修改后的HOOK文件,果然,HOOK已经免杀了,是不是很神奇,仅仅修改了三个字节就搞定了!
修改GETKEY
下面该第二个DLL了,过程和修改HOOK的一样,就不详述了,简述一下过程:手动定位的结果如下(生成个文件):
-------------定位结果------------
序号 起始偏移 大小 结束偏移
BC BC
B5 E
DE9 AF E
然后对B5和9DE9两个段进行自动定位,最终结果如下:
-------------定位结果------------
序号 起始偏移 大小 结束偏移
A
A E
F A B9
BB A E5
E6 A
E A E6A
共有7处,还挺多的。原理一样,尽量修改汇编指令,避免字符串和数据。这一次运气不错,第段就是汇编指令:
DA . AD push RC_Data_.DA ; ASCII " <"
DA . 8D ECFEFFFF lea edx,dword ptr ss:[ebp-]
DAC . 8B F8 mov eax,dword ptr ss:[ebp-8]
DAF . E8 FEFFFF call RC_Data_.DAC
相信修改这几句指令已经难不倒你了,将前三句的顺序调换一下:
DA AD push RC_Data_.DA ; ASCII " <"
DA &
另外,团IDC网上有许多产品团购,便宜有口碑
2024-12-29 00:50
2024-12-29 00:43
2024-12-29 00:36
2024-12-29 00:27
2024-12-28 23:40
2024-12-28 23:36