飘云阁(PYG官方论坛)

 找回密码
 加入论坛

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 332|回复: 0

[求助] 【.NET】程序脱壳后无法运行,有保护

[复制链接]
  • TA的每日心情
    奋斗
    2019-1-13 12:30
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2019-1-11 12:57:00 | 显示全部楼层 |阅读模式
    本帖最后由 ddk313 于 2019-1-11 13:42 编辑

    偶然在网上看到一个软件“XX百度网盘多帐号文件一键搜索工具”,官网地址:http://www.dllprotect.com/soft/5.html,感觉挺好的。但是正常只能登录一个账号,新手就想尝试Pojie一下。但是,经过几天的折腾后,发现,这个软件对于新手来说,好像难度挺大的,希望能得到大牛的指点一下。
    一、用DIE检测一下吧
    发现两个信息:
    1、这个软件加了 Confuser的壳,这里有个疑问:之前看大佬的视频,只是显示一个Confuser壳的信息,这里为什么会显示 Confuser(1.X)[-]和 ConfuserEx(1.0.0)[-]这两个壳的信息呢?不明白。
    2、这是个.net编写的程序,可以用dnspy分析。                     
    二、既然有壳,那就先脱壳吧!然后网上各种找资料,找到一个感觉比较靠谱的集合,还有脱壳步骤,感觉挺好,心中暗喜!

    但是脱完壳后,用DIE重新检测了一下,显示无壳了,心里很高兴!运行一下吧,无法运行!这是什么情况?

    想到了两点
    1、脱壳工具有问题。
    2、软件有保护机制。
    三、先解决是不是脱壳工具的问题吧。
    1、然后又网上各种找资料,又尝试了很多脱壳工具,结果都是一样,无法运行。即使只用de4dot,也不行。难道脱壳工具都不行吗?
    然后在GitHub网上发现了一个“ConfuserEx-动态脱壳”的资料,然后最近有更新,这个软件是不是可以呢?为此还特意安装了Visual Studio 2017,之前没用过这个软件,编译时各种报错,还是算了吧。其实这时候在想的是,是不是检测壳的时候,DIE显示了两个壳的原因呢?
    2、既然各种工具不行,那就手脱壳试试吧。然后根据一下两个教程
        https://www.bilibili.com/video/av6756217    “How to Unpack and Deobfuscate ConfuserEx 0.6 or 1.0 (Max Set”        https://mindlocksite.wordpress.com/2017/02/11/easy-way-to-unpack-confuserex-1-0-max-settings/
    尝试用手脱掉壳,但是均以失败告终!无论到哪一部,即使改动一点,都无法运行,无法继续用dnspy运行调试。没办法,应该是软件有保护机制。
    四、解决软件有保护机制
    把脱壳后的程序,用dnspy打开,搜索字符串“系统错误”,还真能搜索到啊!

    那就挨个看吧!看怎么能把这个保护机制给取消掉。由于我不会C#、不会VB、不会IL,这个工作对我来说就太难了。
    1、Main
          
    [C#] 纯文本查看 复制代码
     private static void Main()
            {
                try
                {
                    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.Automatic);
                    Application.ThreadException += Program.Application_ThreadException;
                    AppDomain.CurrentDomain.UnhandledException += Program.CurrentDomain_UnhandledException;
                    ServicePointManager.DefaultConnectionLimit = 65535;
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(Program.ValidateServerCertificate);
                    bool flag;
                    using (new Mutex(true, "Global\\" + Application.ProductName, ref flag))
                    {
                        if (flag)
                        {
                            Application.EnableVisualStyles();
                            Program.StartApplication();
                        }
                        else
                        {
                            MsgBox.MsgBoxShowWarning(string.Format("“{0}”已经在运行了。", Program.SoftName), Program.SoftName);
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.Error("系统错误,请联系软件供应商!", ex);
                    MsgBox.MsgBoxShowError("系统错误,请联系软件供应商!", Program.SoftName);
                }
            }

    2、StartApplication
    [C#] 纯文本查看 复制代码
    // Token: 0x06000087 RID: 135 RVA: 0x000064E8 File Offset: 0x000046E8
            private static void StartApplication()
            {
                try
                {
                    if (Program.formMain == null)
                    {
                        Program.formMain = new FormMain();
                    }
                    Application.Run(Program.formMain);
                }
                catch (Exception ex)
                {
                    LogHelper.Error("系统错误,请联系软件供应商!", ex);
                    MsgBox.MsgBoxShowError("系统错误,请联系软件供应商!", Program.SoftName);
                }
            }

    3、Application_ThreadException
    [C#] 纯文本查看 复制代码
    // Token: 0x06000088 RID: 136 RVA: 0x00006540 File Offset: 0x00004740
            private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
            {
                Exception ex = e.Exception;
                if (ex == null)
                {
                    ex = new Exception("未处理异常");
                }
                LogHelper.Error("系统错误,请联系软件供应商!", ex);
                MsgBox.MsgBoxShowError("系统错误,请联系软件供应商!", Program.SoftName);
            }

    4、CurrentDomain_UnhandledException
    [C#] 纯文本查看 复制代码
    private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                Exception ex = e.ExceptionObject as Exception;
                if (ex == null)
                {
                    ex = new Exception("未处理异常");
                }
                LogHelper.Error("系统错误,请联系软件供应商!", ex);
                MsgBox.MsgBoxShowError("系统错误,请联系软件供应商!", Program.SoftName);
            }

    这些要怎么修改才能正常运行程序呢?
    我的理解,感觉是  2、StartApplication里的Program.formMain = new FormMain(); 语句是启动软件界面的,想着,把所有出问题的地方都换成这一句是不是就可以了啊。然后就大改动了
    改动如下:
    1、Main
    [C#] 纯文本查看 复制代码
    private static void Main()
            {
                Program.StartApplication();
            }

    2、StartApplication
    [C#] 纯文本查看 复制代码
    private static void StartApplication()
            {
                Program.formMain = new FormMain();
            }

    3、Application_ThreadException
    [C#] 纯文本查看 复制代码
    private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
            {
                if (e.Exception == null)
                {
                    Program.formMain = new FormMain();
                }
                Program.formMain = new FormMain();
            }

    4、CurrentDomain_UnhandledException
    [C#] 纯文本查看 复制代码
    private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                Exception ex = e.ExceptionObject as Exception;
                if (ex == null)
                {
                    Program.formMain = new FormMain();
                }
                Program.formMain = new FormMain();
            }

    保存,还是无法运行,然后又在程序里胡乱改一通,结果都是一样,无法运行。。。。由于不会C#、不会VB、不会IL,这个工作对我来说就太难了。。。
    五、换个思路,既然脱壳完成了,那就尝试写个注册机,把激活码算出来,填到没脱壳前的程序里不就可以了。
    然后临时抱佛脚,找.NET写注册机的视频教程看了一下。
    在本软件中,有以下关键的信息

    虽然看不懂,但是有代码嘛,就在Visual Studio 2017新建了解决方案,本程序代码啥的导出,然后导入到Visual Studio 2017中,才发现,源程序中“<>o__6.<>p__1”这些代码好像还是加密状态,在Visual Studio 2017中各种报错,我也不会Visual Studio 2017。。
    至此,我研究这个软件好几天了,已经黔驴技穷了。但是我有点不太甘心,希望能大牛们指导一下,非常感谢!
    Pojie本软件只是交流学习用,若有违规,或软件作者有异议,请告知我删帖!谢谢

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?加入论坛

    x
    您需要登录后才可以回帖 登录 | 加入论坛

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

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