吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4724|回复: 4
收起左侧

[PC样本分析] .Net程序(一)

[复制链接]
Jack1024 发表于 2016-12-2 19:21
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码: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);

解密出来的资源,如图片所示。


待续》》》》
Capture.PNG

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2016-12-5 10:39
图片好像没有上传成功?
 楼主| Jack1024 发表于 2016-12-5 20:40
Hmily 发表于 2016-12-5 10:39
图片好像没有上传成功?

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

点评

帖子左下角就有编辑按钮。  详情 回复 发表于 2016-12-6 10:01
Hmily 发表于 2016-12-6 10:01
Jack1024 发表于 2016-12-5 20:40
怎么修改这个帖子啊,难道需要重新发新帖吗?求助

帖子左下角就有编辑按钮。
billysir 发表于 2016-12-8 23:31
很详细。期待继续。期待看看在.net方面,高手们的一加一解过招。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表