.NET 逆向:Patch 一款实时日志查看软件

我的第一个逆向作品:https://pan.baidu.com/s/1pZTRFOk-xzuNqChGcpIQ5A,和大家分享。

一款我很喜欢的实现日志查看软件,官网:https://www.logfusion.ca/。

个人感觉和免费的如logExpert相比,最大的优势就是高分支持做的比较好,在高分屏上UI依旧非常清晰。

废话不多说,正文开始。


一、环境

  • dnSpy 4.5.1(x64)
  • de4dot 3.2.0(x64)
  • Snipaste... ?

dnSpy 和 de4dot 都是搞.NET逆向必不可少的工具,它们都github开源。我们可以去下载最新源码后,自己用VS编译,来获取最佳的效果。

由于主题和篇幅,这里暂时不具体介绍他们的功能和编译方法。

二、去混淆

直接用dnSpy打开,发现代码被混淆过了。故拖到de4dot上去看看,发现是用了SmartAssembly混淆的。最新版的de4dot反混淆成功。

三、修改注册逻辑

发现软件是通过输入注册码后,点击apply来进行注册的,故从apply入手。

发现apply按钮处理函数,会调用一个验证函数method_60。

 接下来Class295.smethod_5是一个关键验证。我们详细的看看这个函数。

发现其会排除掉一些非法注册码,如果满足条件则会调用一个smethod_6,进一步验证。

好了,修改这个smethod_5函数就已经足够实现暴力破解了。当然,如果我们直接想写注册机的话,可以继续深入研究smethod_6,来研究它的验证算法细节。这里就不继续下去了。

经研究发现,bflicenseKeyStatusEnum_0、bflicenseKeyTypeEnum_0、bflicenseKeyVersionEnum_0、bflicenseProEnum_0、dateTime_0对注册是否成功起到了关键作用。

我们将smethod_5直接修改为以下代码。

public static bool smethod_5(BFPublicData bfpublicData_0, string string_0, bool bool_0, BFPublicEnums.BFLicenseCheckListEnum bflicenseCheckListEnum_0, out string string_1, out string string_2, out DateTime dateTime_1, out BFPublicEnums.BFLicenseKeyVersionEnum bflicenseKeyVersionEnum_0, out BFPublicEnums.BFLicenseKeyTypeEnum bflicenseKeyTypeEnum_0, out Guid guid_0, out bool bool_1, out BFPublicEnums.BFLicenseKeyStatusEnum bflicenseKeyStatusEnum_0, out BFPublicEnums.BFLicenseProEnum bflicenseProEnum_0)
{
    bool result = true;
    string_1 = "I am plain8."; //注册码
    string_2 = "plain8 (www.cnblogs.com/plain8)"; //注册名
    dateTime_1 = new DateTime(1980, 1, 1);
    bflicenseKeyStatusEnum_0 = BFPublicEnums.BFLicenseKeyStatusEnum.Valid;
    bflicenseKeyTypeEnum_0 = BFPublicEnums.BFLicenseKeyTypeEnum.ProPersonalLicense;
    bflicenseKeyVersionEnum_0 = BFPublicEnums.BFLicenseKeyVersionEnum.V2;
    bflicenseProEnum_0 = BFPublicEnums.BFLicenseProEnum.ProLicensed;
    bool_1 = false;
    guid_0 = Guid.Empty;
    return result;
}

 现在,在输入激活码处输入任意字符,即可完成注册。

 

四、去除联网验证

发现,在联网的情况下,程序会在启动时进行联网验证,取消激活,并弹窗报警。

 

经跟踪发现此关键的联网验证api函数,它根据软件的类型来分配网络api。

很简单,我们只要让它返回一个非法的api即可。

我这里简单的将其修改为:

public static string smethod_10(BFPublicEnums.BFProductID bfproductID_0)
{
    return "http://www.cnblogs.com/plain8";
}

即可去除联网验证。

转载于:https://www.cnblogs.com/plain8/p/8158889.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值