Jack1024 发表于 2016-12-2 19:21

.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

图片好像没有上传成功?

Jack1024 发表于 2016-12-5 20:40

Hmily 发表于 2016-12-5 10:39
图片好像没有上传成功?

怎么修改这个帖子啊,难道需要重新发新帖吗?求助{:1_906:}

Hmily 发表于 2016-12-6 10:01

Jack1024 发表于 2016-12-5 20:40
怎么修改这个帖子啊,难道需要重新发新帖吗?求助

帖子左下角就有编辑按钮。

billysir 发表于 2016-12-8 23:31

很详细。期待继续。期待看看在.net方面,高手们的一加一解过招。
页: [1]
查看完整版本: .Net程序(一)