看到悬赏区有人求类似软件,果断下载然后逆向。
【0X01】查壳
Unknown>>>>>Unknown Obfuscator,但是de4支持,所以果断拖进去脱壳。
【0X02】逆向
拖到DnSpy里,从入口点下手发现关键代码
[C#] 纯文本查看 复制代码 if (configData.sn == null)//如果sn是空的就运行frmMain这个函数
{
configData.fileCreateTime = fileInfo.CreationTime.ToString();
Cache.licenseData = configData;
Application.Run(new frmMain());
}
我们来看这个Main函数
[C#] 纯文本查看 复制代码 public void btnRegist_Click(object sender, EventArgs e)
{
LicenseService licenseService = new LicenseService();
RegistIn registIn = new RegistIn();
registIn.sn = string.Concat(new string[]
{
this.txtSn1.Text,
"-",
this.txtSn2.Text,
"-",
this.txtSn3.Text,
"-",
this.txtSn4.Text
});
registIn.userInfo = this.txtClient.Text;//四个编辑框组成的sn
registIn.fileCreateTime = Cache.licenseData.fileCreateTime;//取创建时间
registIn.productApiKey = "vimiLVloKqDbOdTkIrQdAhtZkJFClP14594231815470201";
RegistOut registOut = licenseService.regist(registIn);//网络验证,下面是三种情况。
if (registOut == null)
{
MessageBox.Show("认证失败\r\n可能的原因\r\n1.序列号填写有误\r\n2.未连接互联网");
}
else if ("Y".Equals(registOut.isRegisted))
{
MessageBox.Show("该序列号已被使用");
}
else
{
MessageBox.Show("产品认证成功\r\n请重启本软件");
ConfigData licenseData = Cache.licenseData;
licenseData.sn = registIn.sn;
licenseData.userInfo = registIn.userInfo;
licenseData.right = registOut.right;
licenseData.lastAccessTime = DateTime.Now.ToString();
File.WriteAllText(Directory.GetCurrentDirectory() + "\\license", DESUtil.Encrypt(JsonUtil.objectToString(licenseData)));//加密获取的数据然后重启验证
Application.Exit();
}
}
}
}
这个函数直接删除引用就好,继续往下走
[C#] 纯文本查看 复制代码 bool flag = true;
if (!fileInfo.CreationTime.ToString().Equals(configData.fileCreateTime))//这里是校验License,直接删除掉
{
MessageBox.Show("认证文件已损坏!");
flag = false;
Application.Exit();
}
if (flag)
{
LicenseService licenseService = new LicenseService();
if (licenseService.onlineCheck(configData.sn))
{
configData.lastAccessTime = DateTime.Now.ToString();
File.WriteAllText(Directory.GetCurrentDirectory() + "\\license", DESUtil.Encrypt(JsonUtil.objectToString(configData)));
}
else
{
DateTime d = DateTime.Parse(configData.lastAccessTime);
int days = (DateTime.Now - d).Days;
if (days > 7)
{
flag = false;
MessageBox.Show("已经超过7天没有认证软件\r\n请连接互联网后重启软件");
Application.Exit();
}
}
}
if (flag)//这里是对比版本的所以没有必要删除掉
{
VersionService versionService = new VersionService();
VersionInfo newVersionInfo = versionService.getNewVersionInfo("vimiLVloKqDbOdTkIrQdAhtZkJFClP14594231815470201");
if (newVersionInfo != null)
{
string text2 = File.ReadAllText(Directory.GetCurrentDirectory() + "\\version");
if (!text2.Equals(newVersionInfo.versionNum))
{
new frmVersion
{
oldVersion = text2,
newVersion = newVersionInfo.versionNum,
downloadUrl = newVersionInfo.fileUrl,
updateInfo = newVersionInfo.updateInfo
}.ShowDialog();
}
}
string text3 = StringCommon.RandomString(50);
File.WriteAllText(Directory.GetCurrentDirectory() + "\\hander", DESUtil.Encrypt(text3));//下面就是启动主程序Patstory了,这个程序只是个启动器性质的
new Process
{
StartInfo =
{
FileName = Directory.GetCurrentDirectory() + "\\PatStory\\PatStory.exe",
Arguments = text3
}
}.Start();
}
}
}
}
}
【0x03】调试
保存调试,提示更新,更新完成后依然成功载入主程序
用到的工具:de4ot,Dnspy
|