首页
社区
课程
招聘
[已解决]请帮忙把一小段混淆过的.net代码整理成C#代码
发表于: 2010-4-2 23:42 6521

[已解决]请帮忙把一小段混淆过的.net代码整理成C#代码

2010-4-2 23:42
6521
请帮忙把一小段混淆过的.net代码整理成C#代码,谢谢先

Reflector 反编译的代码如下:
public static byte[] funcaa(string sText)
{
    bool flag;
    byte[] buffer;
    int num2;
    byte[] buffer2;
    int num3;
    uint num4;
    uint num5;
    int num = sText.get_Length();
    if ((((uint) flag) & 0) == 0)
    {
        if ((num > 0) && ((((uint) flag) + num4) < 0))
        {
        }
        flag = (((uint) num3) > uint.MaxValue) ? ((bool) false) : ((bool) (0 == (num % 2)));
        goto Label_0186;
    }
    if (0 != 0)
    {
        return buffer;
    }
    goto Label_0073;
Label_0033:
    if (flag)
    {
        num4 = (uint) (sText.get_Chars((int) (num3 * 2)) - ((sText.get_Chars((int) (num3 * 2)) >= 'A') ? 0x37 : 0x30));
        if ((((uint) num2) - ((uint) num2)) >= 0)
        {
            if ((((uint) flag) & 0) == 0)
            {
                if (0 == 0)
                {
                    if ((num5 + ((uint) num)) <= uint.MaxValue)
                    {
                        if (((uint) num) < 0)
                        {
                            goto Label_00EC;
                        }
                        if ((num4 + num4) < 0)
                        {
                            goto Label_004A;
                        }
                    }
                    flag = (bool) (num4 < 0x10);
                    if (flag)
                    {
                        num5 = (uint) (sText.get_Chars((int) ((num3 * 2) + 1)) - ((sText.get_Chars((int) ((num3 * 2) + 1)) >= 'A') ? 0x37 : 0x30));
                        flag = (bool) (num5 < 0x10);
                        goto Label_004A;
                    }
                    goto Label_00EC;
                }
                goto Label_019E;
            }
            goto Label_0189;
        }
        goto Label_0168;
    }
    buffer = buffer2;
    if (3 == 0)
    {
        goto Label_018D;
    }
    return buffer;
Label_0042:
    flag = (bool) (num3 < num2);
    goto Label_0033;
Label_004A:
    if (!flag)
    {
        buffer = null;
        if ((num5 | 15) != 0)
        {
            return buffer;
        }
        goto Label_0033;
    }
Label_004D:
    buffer2[num3] = (byte) ((byte) ((num4 * 0x10) + num5));
    if ((((uint) num3) - ((uint) num3)) <= uint.MaxValue)
    {
        num3 = (int) (num3 + 1);
        goto Label_0042;
    }
Label_0073:
    if ((num5 & 0) == 0)
    {
    }
    goto Label_004D;
Label_00EC:
    return null;
Label_0168:
    num3 = 0;
    goto Label_0042;
Label_0186:
    if (!flag)
    {
        goto Label_019E;
    }
Label_0189:
    num2 = (int) (num / 2);
Label_018D:
    buffer2 = new byte[num2];
    goto Label_0168;
Label_019E:
    buffer = null;
    if ((num4 - ((uint) num)) > uint.MaxValue)
    {
        goto Label_0186;
    }
    return buffer;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 221
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
手工分析下,应该还好吧?花指令多些罢了
public static byte[] funcaa(string sText)
{
    bool flag;
    byte[] buffer;
    int num2;
    int num3;
    uint num4;
    uint num5;
    int num = sText.get_Length();
    if (num % 2!=0)
    {
	return null;
    }
    num2 = (int) (num / 2);
    buffer = new byte[num2];
    num3 = 0;
    while (num3 < num2)
    {
        num4 = (uint) (sText.get_Chars((int) (num3 * 2)) - ((sText.get_Chars((int) (num3 * 2)) >= 'A') ? 0x37 : 0x30));
        if (num4 >= 0x10)
        {
            return null;
        }
	num5 = (uint) (sText.get_Chars((int) ((num3 * 2) + 1)) - ((sText.get_Chars((int) ((num3 * 2) + 1)) >= 'A') ? 0x37 : 0x30));
        if (num5 >= 0x10)
        {
            return null;
        }
        buffer[num3] = (byte) ((byte) ((num4 * 0x10) + num5));
        num3 = (int) (num3 + 1);
    }
    return buffer;
}


希望没分析错,汗
2010-4-4 20:23
0
雪    币: 236
活跃值: (74)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上,这个分析应该有问题,无法得到正确结果

主要是不懂 .net ,才想把这个算法弄明白,好用DELPHI来改写
已经用其他方法解决了,再次感谢
2010-4-6 10:00
0
游客
登录 | 注册 方可回帖
返回
//