吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9249|回复: 22
收起左侧

[原创] Net反编译之退出验证解除

[复制链接]
ajm3 发表于 2016-5-23 20:09
本帖最后由 ajm3 于 2016-5-23 22:00 编辑

net教程少,楼主也不吝啬贡献一点点
blue发了几部,感觉都很浅,比如破解注册啥的就是改一个br.true 或者改一下 idc.i4.1啥的,不够新鲜。
今天发一个net程序退出验证的去除方法,只分析代码,不发程序了


[Asm] 纯文本查看 复制代码
public MainService()
{
    this.errMsg = "★★ 警告:★★\n\n系统异常,马上退出!";
}

 

在reflector里面搜索字符找到如图这段代码。
1.png

经过分析寻找this.errMsg,因为是经过分析寻找this.errMsg=XXXX,点击errMSG,(那就不能直接用Analyzer搜索ctor),右键,点击Analyzer得到下图


1-1.png

重点看 Initialize(),这个英文大家有经验的都知道是主窗体,所以重点在这里,然后分析一下代码看看哪里调用了这句删除即可

2.png
分析代码如下
[Asm] 纯文本查看 复制代码
public override void Initialize()
{
    base.Initialize();
    RootMenuNode parNode = new RootMenuNode();
    string webConfigKeyValue = AppUtils.GetWebConfigKeyValue("IMSwitch");
    base.Context["IMSwitch"] = webConfigKeyValue;
    base.Context["PollingTime"] = int.Parse(ConfigurationManager.AppSettings["PollineTime"].ToString());
    base.Context["isTop"] = !string.IsNullOrEmpty("910");
    using (DbHelper helper = AppUtils.CreateDbHelper())
    {
        int num2;
        this.setVersionInfo();
        int magicDogFlag = this.doMagicDogFlag();
        string message = string.Empty;
        base.Context["registerMessage"] = string.Empty;
        base.Context["registered"] = string.Empty;
        base.Context["OutputMessageAndClose"] = string.Empty;
        MenuHelper.CheckRemindDays(base.Context, ref message, out num2);
        base.Context["registerMessage"] = message;
        base.Context["registered"] = num2;
        base.Context["tryMessage"] = message;
        if ((string.IsNullOrEmpty(message) && SysData1.isSstages) && MenuHelper.CheckOnLineDogsOverDays(ref message))
        {
            base.Context["tryMessage"] = message;
        }
        base.Context["attendance"] = UserInfo.IsAdmin ? ((object) 0) : ((object) Limit.LIMIT_TIMEWORK_ADDDATA);
        if (MenuHelper.chkSysData() == 0)
        {
            AppUtils.OutputMessageAndClose(base.Context, this.errMsg);
        }
        int dogUserCount = 0;
        int loginUserCount = 0;
        int errorCode = 0;
        if (MenuHelper.CheckCurLoginUserCountForASP(helper, CurrUser.GetCode(), ref loginUserCount, ref dogUserCount, ref errorCode) != 0)
        {
            AppUtils.OutputMessageAndClose(base.Context, string.Format("█ █ █ █ 系统严重警告:█ █ █ █\n\n ★", (dogUserCount == 0) ? "单机" : ("(" + dogUserCount + ")用户"), loginUserCount));
        }
        else if (magicDogFlag < 0)
        {
            AppUtils.OutputMessageAndClose(base.Context, this.getErrorMagicMessage(magicDogFlag).ToString());
        }
        if (MenuHelper.checkSysdataData() == 1)
        {
            AppUtils.OutputMessageAndClose(base.Context, this.errMsg);
        }
        if (MenuHelper.checkSysdata1Data() == 1)
        {
            AppUtils.OutputMessageAndClose(base.Context, this.errMsg);
        }

 

出现3句
[Asm] 纯文本查看 复制代码
AppUtils.OutputMessageAndClose(base.Context, this.errMsg);

一样的代码,意思就是OutputMessageAndClose,输出message并且close。明白了吧
然后修改如下效果即可
[Asm] 纯文本查看 复制代码
public override void Initialize()
{
    base.Initialize();
    RootMenuNode parNode = new RootMenuNode();
    string webConfigKeyValue = AppUtils.GetWebConfigKeyValue("IMSwitch");
    base.Context["IMSwitch"] = webConfigKeyValue;
    base.Context["PollingTime"] = int.Parse(ConfigurationManager.AppSettings["PollineTime"].ToString());
    base.Context["isTop"] = !string.IsNullOrEmpty("910");
    using (DbHelper helper = AppUtils.CreateDbHelper())
    {
        int num2;
        this.setVersionInfo();
        int magicDogFlag = this.doMagicDogFlag();
        string message = string.Empty;
        base.Context["registerMessage"] = string.Empty;
        base.Context["registered"] = string.Empty;
        base.Context["OutputMessageAndClose"] = string.Empty;
        MenuHelper.CheckRemindDays(base.Context, ref message, out num2);
        base.Context["registerMessage"] = message;
        base.Context["registered"] = num2;
        base.Context["tryMessage"] = message;
        if ((string.IsNullOrEmpty(message) && SysData1.isSstages) && MenuHelper.CheckOnLineDogsOverDays(ref message))
        {
            base.Context["tryMessage"] = message;
        }
        base.Context["attendance"] = UserInfo.IsAdmin ? ((object) 0) : ((object) Limit.LIMIT_TIMEWORK_ADDDATA);
        if (MenuHelper.chkSysData() == 0)
        {
//AppUtils.OutputMessageAndClose(base.Context, this.errMsg);
        }
        int dogUserCount = 0;
        int loginUserCount = 0;
        int errorCode = 0;
        if (MenuHelper.CheckCurLoginUserCountForASP(helper, CurrUser.GetCode(), ref loginUserCount, ref dogUserCount, ref errorCode) != 0)
        {
            AppUtils.OutputMessageAndClose(base.Context, string.Format("█ █ █ █ 系统严重警告:█ █ █ █\n\n ★", (dogUserCount == 0) ? "单机" : ("(" + dogUserCount + ")用户"), loginUserCount));
        }
        else if (magicDogFlag < 0)
        {
            AppUtils.OutputMessageAndClose(base.Context, this.getErrorMagicMessage(magicDogFlag).ToString());
        }
        if (MenuHelper.checkSysdataData() == 1)
        {
//AppUtils.OutputMessageAndClose(base.Context, this.errMsg);
        }
        if (MenuHelper.checkSysdata1Data() == 1)
        {
//AppUtils.OutputMessageAndClose(base.Context, this.errMsg);
        }

 


//的意思就是删除这一行。这样这个提示和退出就没有了

这样就ok了。不知道大家看明白没有
教程简单,net本来就简单,复杂不起来,没办法,可能难就难在加壳和脱壳,目前很少软件能加壳net的,大家有没有什么好的加密解密方法可以分享出来



//楼下有朋友点评说退出没有任何提示要怎么弄,其实和有提示差不多,思路也是一样,找到窗口主体代码,AppUtils.OutputMessageAndClose(base.Context, this.errMsg);不同的就是少了msg。退出就是close,或者vb.net的end unload me之类的代码,找到他的引用,删除就可以了

点评

退出没有任何提示的,这个要怎么破  发表于 2016-5-23 21:47

免费评分

参与人数 6热心值 +6 收起 理由
咬字分开念 + 1 这个软件我用过,还不错
caleb110 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
jack0323 + 1 您是我的老师啊!
Sound + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
heiyan + 1 谢谢楼主教程 期待多出精品啊 支持!
啦灯是我干掉的 + 1 原创 给力啊!!!

查看全部评分

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

 楼主| ajm3 发表于 2016-5-23 23:48
Sound 发表于 2016-5-23 23:44
代码加密 和外壳 ,当然 常见的 TMD/WL  enigma  Safengine 等 可以对net软件进行外壳保护。,

额。。。。能别复制粘贴吗
Agile.NET (aka CliSecure)
Babel.NET
CodeFort
CodeVeil
CodeWall
CryptoObfuscator
Confuser
ConfuserEx
DNGuard
DeepSea Obfuscator
Dotfuscator
.NET Reactor
Eazfuscator.NET
Goliath.NET
ILProtector
MaxtoCode
MPRESS
Obfuscator
Rummage
Skater.NET
SmartAssembly
Spices.Net
Xenocode


这些我全部试过,没一个行,广告就吹的很好很厉害,实际去下载,要么用不了,要么瞬间反出代码。。。。哎,我的要求其实不高,只要我不能反出代码,能用就行了。。。。。
enigma  Safengine 这些说是可以加net,实际上 下载好多个都只能加win32程序  tmd也一样

免费评分

参与人数 1热心值 +1 收起 理由
咬字分开念 + 1 支持

查看全部评分

 楼主| ajm3 发表于 2016-5-23 23:39
Sound 发表于 2016-5-23 23:36
目前很少软件能加壳net的,大家有没有什么好的加密解密方法可以分享出来

很多保护器都可以对.net软件进 ...

哎。。。我找遍了整个百度和52,没有一个管用的,inlock还勉强凑合,但是不太好,说不出哪里不好。像.NET Reactor ,或者Skater .NET Obfuscator或者.Postbuild.混淆都没什么用,连我都可以瞬间反出代码,何况是别人,不知道你有没有什么好的推荐
A00 发表于 2016-5-23 20:54
广州快乐神 发表于 2016-5-23 21:00
学习了,,,
topcookie 发表于 2016-5-23 21:02
对于.net确实还停留在最初级阶段,感谢楼主把思路和分析分享出来
 楼主| ajm3 发表于 2016-5-23 21:18
A00 发表于 2016-5-23 20:54
支持支持可以交流吗

不可以,下午发了个帖子说交流的留个邮箱,结果被论坛的老大删了。看来还是不要交流好了,看看贴就好
头像被屏蔽
新西兰天气晴 发表于 2016-5-23 21:38
提示: 作者被禁止或删除 内容自动屏蔽
爱飞的猫 发表于 2016-5-23 22:30
理想情况应该是继续跟进 “MenuHelper.checkSysdataData” 和 “MenuHelper.checkSysdata1Data” 了解为什么会退出,并针对这些情况修改返回值,因为软件可能在某个操作中调用这些函数检查。
如果是过自校验,最理想状态是伪造签名/校验值,让程序自己都不认为自己被改过,.net 程序的话分析起来应该方便一些。

个人想法,未经验证,欢迎吐槽 :D
Sound 发表于 2016-5-23 23:36
目前很少软件能加壳net的,大家有没有什么好的加密解密方法可以分享出来

很多保护器都可以对.net软件进行外壳保护,并且.net的混淆 软件也很多的。
Sound 发表于 2016-5-23 23:44
111.png

代码加密 和外壳 ,当然 常见的 TMD/WL  enigma  Safengine 等 可以对net软件进行外壳保护。,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-17 10:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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