XX婆 A8 TOP 9.2 自定义补丁
说起.Net程序的破解来网上的教程很多,尤其是对加强壳的程序,我这里的这篇教程可能都不算什么,因为XX婆的加密从第一代起就完全是粗放式的代码几乎和源码没有区别,而现在各种破解工具的完善,基本没有人会直接用编译器编完程序就发布了,就连一些破解软件的作者也出于各种目的对破解补丁进行加壳。为了防止被滥用,为了保护自己的劳动成果,为了追求经济利益。总之授人以鱼不如授人以渔,本篇教程的目的就是为了教你怎么制作自己的破解补丁。需要有一点编程经验。
需要准备的工具.NET Reflector 8.3和Reflexil 1.7插件大家自行百度安装。
本次破解以管家婆A8 TOP 9.2为例,其他类似程序参考
用.NET Reflector打开A8程序目录bin下的CarpaServer.dll
找到CarpaServer.Dog依次打开DogInfo .ctor()
在右侧看到代码如下
public DogInfo()
{
this.strDogID = string.Empty;
this.strDogType = string.Empty;
this.strUserCardNo = string.Empty;
this.strRegClientName = string.Empty;
this.strRegFlag = string.Empty;
this.strDogRegionName = string.Empty;
this.strDogRegionCode = string.Empty;
this.strFirstUseDate = string.Empty;
this.strRegDate = string.Empty;
this.strBrainPower = "00";
this.strIpLimit = "01";
this.intAccountNumber = 5;
this.intDogUserCount = 0;
this.intDogSymbol = -1;
this.ifDogValid = 0;
this.isUseAcSystem = string.IsNullOrEmpty(ConfigurationManager.AppSettings["demoAccount"]) ? 1 : 0;
this.CentificateNo = string.Empty;
this.CentificateNum = string.Empty;
this.remainDay = 0;
this.isTopDog = "0";
this.CorpTel = string.Empty;
this.Mobil = string.Empty;
this.EMail = string.Empty;
}
点击.NET Reflector 菜单的Tool选择Reflexil 1.7
在代码的下面就会出现Reflexil 的IL代码编辑器,然后懂IL汇编的人就可以修改了。选中相应的IL代码行右键选择Edit进行修改编辑。
大多数用户对IL这种代码不熟悉也不了解,编辑起来有些吃力,Reflexil 给我们提供了另一种编程体验,就是直接使用C#或者vb.net编辑
在IL代码编辑器右键选择Replace all with code…
弹出代码编辑窗
然后你就可以像在VS里面编程一样随意编写代码,替换原先的程序
比如我是这样写的
using System;
using System.Configuration;
namespace CarpaServer.Dog
{
public class DogInfo : ICloneable
{
public string strDogRegionName;
public string strDogRegionCode;
public string strDogID;
public string strDogType;
public string strFirstUseDate;
public string strRegDate;
public string strUserCardNo;
public string strRegClientName;
public string strRegFlag;
public string strBrainPower;
public string strIpLimit;
public int intAccountNumber;
public int intDogUserCount;
public int intDogSymbol;
public int ifDogValid;
public int isUseAcSystem;
public string CentificateNo;
public string CentificateNum;
public int remainDay;
public string isTopDog;
public string CorpTel;
public string Mobil;
public string EMail;
public DogInfo()
{
this.strDogID
= (string.IsNullOrEmpty(ConfigurationManager.AppSettings["DogID"]) ? "12345678901234" : Convert.ToString(ConfigurationManager.AppSettings["DogID"]));
this.strDogType
= (string.IsNullOrEmpty(ConfigurationManager.AppSettings["DogType"]) ? "01" : Convert.ToString(ConfigurationManager.AppSettings["DogType"]));
this.strUserCardNo
= (string.IsNullOrEmpty(ConfigurationManager.AppSettings["UserCardNo"]) ? "12345678901234" : Convert.ToString(ConfigurationManager.AppSettings["UserCardNo"]));
this.strRegClientName
= (string.IsNullOrEmpty(ConfigurationManager.AppSettings["RegClientName"]) ? "成都任我行软件股份有限公司批量许可版" : Convert.ToString(ConfigurationManager.AppSettings["RegClientName"]));
this.strRegFlag
= "TR";
this.strDogRegionName
= "";
this.strDogRegionCode
= (string.IsNullOrEmpty(ConfigurationManager.AppSettings["DogRegionCode"]) ? "01" : Convert.ToString(ConfigurationManager.AppSettings["DogRegionCode"]));
this.strFirstUseDate
= (string.IsNullOrEmpty(ConfigurationManager.AppSettings["FirstUseDate"]) ? "2012-08-08" :
Convert.ToString(ConfigurationManager.AppSettings["FirstUseDate"]));
this.strRegDate
= (string.IsNullOrEmpty(ConfigurationManager.AppSettings["RegDate"]) ? "2012-08-08" :
Convert.ToString(ConfigurationManager.AppSettings["RegDate"]));
this.strBrainPower
= "00";
this.strIpLimit
= "01";
this.intAccountNumber
= 100;
this.intDogUserCount
= (string.IsNullOrEmpty(ConfigurationManager.AppSettings["DogUserCount"]) ? 50 : Convert.ToInt32(ConfigurationManager.AppSettings["DogUserCount"]));
this.intDogSymbol
= 5;
this.ifDogValid
= 1;
this.isUseAcSystem
= 1;
this.CentificateNo
= "20080006";
this.CentificateNum
= "2008TO2018";
this.remainDay
= 0;
this.isTopDog
= "0";
this.CorpTel
= "010-64014567";
this.Mobil
= "13901618088";
this.EMail
= "gosun@12388.com";
}
object ICloneable.Clone()
{
return this.Clone();
}
public DogInfo Clone()
{
return (DogInfo)base.MemberwiseClone();
}
}
}
编写完了以后可以使用编辑窗最下面的compile按钮进行编译,如果没有错误右侧会出现编译好的IL代码,这时候点击IL编辑窗下面的OK按钮保存修改结果
可以参照上面的办法修改回传信息,常见的一些IP地址和网址需要翻看代码,或者抓包获得,这里就不讨论了。
代码修改完了以后并不能立刻看到结果我们需要在.NET Reflector左侧的程序列表里找到刚刚打开的CarpaServer右键 选择Reflexil 1.7 Save as…保存修改。
然后就可以用新修改的补丁去测试了。懂编程的朋友都知道我这个是修改的自定义版本的,使用了web.config里面的配置参数。如果想正常使用还要配置一下web.config。好了教程完毕,欢迎讨论。
-------------------------------------------------------------------------------------
<!-- 狗类型 01基础版,02通讯版,03电脑版,04食品版 -->
<add key="DogType" value="01" />
<!-- 软件狗号 -->
<add key="DogID" value="12345678901234" />
<!-- 正版卡号 -->
<add key="UserCardNo" value="12345678901234" />
<!-- 注册公司 -->
<add key="RegClientName" value="成都任我行软件股份有限公司批量许可版" />
<!-- 注册地区 -->
<add key="DogRegionCode" value="01" />
<!-- 首次使用日期 -->
<add key="FirstUseDate" value="2012-08-08" />
<!-- 注册日期 -->
<add key="RegDate" value="2012-08-08" />
<!-- 用户数 -->
<add key="DogUserCount" value="50" />
2月9日再次更新了补丁,因为我做教程的时候误覆盖了一个版本的去回传,导致回传没有去干净特此更新。
说到回传就是管家婆程序内部调用一个线程往管家婆预设的几个服务器回传一些公司注册信息和帐套使用情况,凡是代码里看到猥琐的分段string或者一些稀奇古怪的强制转换涉及到ip或者域名,或者url字段的都应该警惕的反复调试
常用的几个回传地址
www.grasp.com.cn 这个不用说了,
223.4.116.22 这个在帐套的sysdata表里,在CarpaServer.dll被调用多次,程序人员还为了伪装这个地址用了强制转换来多次拼接组合地址
115.239.210.27 这个多次出现在CarpaServer.dll里,可以用查找查到
我一般是将www.grasp.com.cn 换成www.baidu.com其他两个ip地址换成127.0.0.1