好友
阅读权限 10
听众
最后登录 1970-1-1
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子! 病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途! 禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 Jack1024 于 2016-12-6 18:43 编辑
Sha1: aa10bba53f80b1c94e08f1441e82e0241b7c8e21
MD5: 1e8b8a1c9c20c5906fbcb45c04193fb2
OriginalFilename: hajak.exe
File Size: 159744
File Type: .NET
使用工具:ILSpy和DnSpy
该样本首先会读取一个TestFile.txt文件,可是该文件不存在,然后抛出一个异常,连续两次这样操作,然后又是一个异常,我不知道它要干什么,看code。
try
{
using (StreamReader streamReader = new StreamReader("TestFile.txt"))
{
string text = streamReader.ReadToEnd();
}
}
catch (Exception expr_24)
{
ProjectData.SetProjectError(expr_24);
Exception ex = expr_24;
str = "The file could not be read:";
str += ex.Message;
ProjectData.ClearProjectError();
}
不过反正也不影响,进行调试跟踪分析该程序。它会调用_Qf()方法。
while (!_gca._Qf())
{
num++;
if (num > 5)
{
return;
}
}
开始进入正题了。
try
{
_dRs._ZWk zWk = new _dRs._ZWk();
zWk._iRp();
result = true;
}
catch (Exception expr_11)
{
ProjectData.SetProjectError(expr_11);
result = false;
ProjectData.ClearProjectError();
}
首先会调用_ZWk()函数,在该函数中会通过解密函数会解密出一些函数名。_nzJ()函数是解密函数。
this ._rtb = new string [9 ];
this ._kX = new string [7 ];
this ._iw = new string [6 ];
this ._bNs = new object [6 ];
this ._nzo = new object []
{
typeof (object ),
typeof (byte []),
typeof (string ),
typeof (object []),
typeof (Type)
};
this ._rtb[0 ] = this ._ZYd (this ._nzJ (new byte []
{
66 ,
116 ,
10 ,
20 ,
77 ,
28 ,
35 ,
28
}));
private byte [] _nzJ (byte [] _Zf)
{
byte [] bytes = Encoding.UTF8.GetBytes ("n7qz0ds63EXPKAGkQ8Lwm4gZaSTciHWCfNpDJryMe9tY" );
checked
{
byte [] array = new byte [_Zf.Length - 1 + 1 ];
byte b = _Zf[_Zf.Length - 1 ];
Array.Resize<byte >(ref array, array.Length - 1 );
int arg_39_0 = 0 ;
int num = array.Length - 1 ;
for (int i = arg_39_0; i <= num; i++)
{
array[array.Length - 1 - i] = (_Zf ^ b ^ bytes[i % bytes.Length]);
}
return array;
}
}
它会调用_LK()函数从资源中获取Png资源,这个资源可不是什么好图片,这是个被加密的图片资源,它也需要通过解密函数进行解密,所以我们在解密完之后运行之前,把该解密完的数据Dump出来。
private UnmanagedMemoryStream _LK()
{
Assembly executingAssembly = Assembly.GetExecutingAssembly();
string[] manifestResourceNames = executingAssembly.GetManifestResourceNames();
checked
{
for (int i = 0; i < manifestResourceNames.Length; i++)
{
string text = manifestResourceNames;
if (Operators.CompareString(text, "ow.Png", false) == 0)
{
return (UnmanagedMemoryStream)executingAssembly.GetManifestResourceStream(text);
}
}
UnmanagedMemoryStream result;
return result;
}
}
在下面地方下断点,然后把解密完的资源dump出来。你就会知道,原来里面是一个dll资源,可是不要高兴的太早了,还得继续脱啊。
return NewLateBinding.LateGet(null, typeof(Versioned), this._kX[4], new object[]
{
RuntimeHelpers.GetObjectValue(objectValue),
this._kX[5],
CallType.Method,
new object[]
{
RuntimeHelpers.GetObjectValue(objectValue),
new object[]
{
this._nzJ(this._pgc()),
"K.K",
"p",
new object[0]
}
}
}, null, null, null);
解密出来的资源,如图片所示。
待续》》》》
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。