用dnSpy破解某旅游系统5.2版。
某系统是网上最常见也是目前最好用的旅游站系统之一,5.1版本之前采用的maxtocode加壳后可以用de4dot反混淆后破解。5.1版本以后用de4dot无法脱壳。
本文仅限学习和讨论,请勿做侵权使用。
在这里说一种不脱壳破解的办法,我们分析早期版本的授权验证方式,以5.0为例,我们看下install的验证方法:
if (!flag || step2.smethod_0(this.key, lower))
{
//此处为安装代码,省略...
this.Response.Redirect("step3.aspx");
}
else
{
this.ClientScript.RegisterStartupScript(this.GetType(), "", "<script language='javascript'>alert('注册码错误!');</script>");
}
public static bool smethod_0(string string_0, string string_1)
{
string str = "髆@b驖b~!蘯鸛0&饕)";
return ((string_0.Equals(Utils.MD5(string.Concat("ωāр", string_1, str), 32).ToLower()) || string_0.Equals(Utils.MD5(string.Concat(string_1, str), 32).ToLower()) ? true : false) ? true : false);
}
可以看出使用了一个Key和域名MD5以后生成序列号进行验证。所以只要找到Key就可以算出序列号。
在不脱壳的前提下,如何找到这个Key?
我们再分析TourEx.Pages.Dll 找到 BasePage
private static void old_acctor_mc()
{
__ENCList = new List<WeakReference>();
LineOrderLock = RuntimeHelpers.GetObjectValue(new object());
OrderLock = RuntimeHelpers.GetObjectValue(new object());
WriteLock = RuntimeHelpers.GetObjectValue(new object());
checkkey = "髆@b驖b~!蘯鸛0&饕)";
includeWap = false;
}
当然这是分析旧版本脱壳后的代码,如果没有脱壳,就通过反射调用BasePage后输出checkkey,就可以得到。
然后,我们悲催的发现5.1以后checkkey不见了,写在了方法内部,这样是没法通过反射读出来的。
到这里,我们不得不介绍下dnSpy这款神器,这款神器是de4dot的作者开发,可以动态调试.net的EXE,非常强大。
我们先分析BasePage中的验证方法:
// TourEx.Pages.BasePage
// Token: 0x0600005B RID: 91 RVA: 0x00007684 File Offset: 0x00005884
public static bool smethod_0()
{
bool result;
if (HttpContext.Current.Server.MapPath(HttpContext.Current.Request.Url.AbsolutePath).IndexOf("wap") != -1)
{
if (!(result = (Operators.CompareString(BaseConfig.WebKey, TourEx.Common.Utils.MD5("ωāр" + BaseConfig.WebDomain + BasePage.checkkey, 32).ToLower(), false) != 0)))
{
BasePage.includeWap = true;
}
}
else if (result = (Operators.CompareString(BaseConfig.WebKey, TourEx.Common.Utils.MD5("ωāр" + BaseConfig.WebDomain + BasePage.checkkey, 32).ToLower(), false) != 0))
{
result = (Operators.CompareString(BaseConfig.WebKey, TourEx.Common.Utils.MD5(BaseConfig.WebDomain + BasePage.checkkey, 32).ToLower(), false) != 0);
}
else
{
BasePage.includeWap = true;
}
return result;
}
这个方法返回了验证结果和includeWap,我尝试用dnSpy写了IL代码

发现保存的时候失败了。

既然我们找对了地方,那就可以想别的办法,dnSpy有个很牛X的HEX编辑功能,可以找到方法对应的十六进制代码

用旧的版本修改IL代码,找到相关的十六进制分复制过来保存后,发现代码成功修改了!


测试成功打开网页,破解完成。
这个只是一个思路了,破解之道在于坚持不泄,找到洞洞,然后注入精华代码。。嗯,就是这么回事了~看起来是不是自然万物是不是都一样的道理?扯远了。。
用dnSpy破解某旅游系统5.2版。的更多相关文章
- 最新深度技术GHOST XP系统旗舰增强版 V2016年
来自系统妈:http://www.xitongma.com 深度技术GHOST xp系统旗舰增强版 V2016年 系统概述 深度技术ghost xp系统旗舰增强版集合微软JAVA虚拟机IE插件,增强浏 ...
- 最新GHOST XP系统安全稳定版 V2016年
来自系统妈:http://www.xitongma.com 电脑公司GHOST xp系统经典优化版 V2016年4月 系统概述 电脑公司ghost xp系统经典优化版集成最常用的装机软件,集成最全面的 ...
- Linux命令lsb_release:查看当前系统的发行版信息
Linux里的lsb_release命令用来查看当前系统的发行版信 息(prints certain LSB (Linux Standard Base) and Distribution inform ...
- PyCharm5.0.2最新版破解注册激活码(图文版)
下载PyCharm http://download-cf.jetbrains.com/python/pycharm-professional-5.0.2.exe 安装PyCharm 设置激活服务器 ...
- Linux系统各发行版镜像下载
Linux系统各发行版镜像下载(2014年10月更新),如果直接下载不了,请使用迅雷下载.并且注意,我的下载地址,在 迅雷 里才起作用. 包括Ubuntu,Fedora,SUSE,Red Hat En ...
- Linux查看当前系统的发行版信息
lsb_release命令用来查看当前系统的发行版信息(prints certain LSB (Linux Standard Base) and Distribution information.). ...
- Linux系统各发行版镜像下载(借阅)
Linux各个版本资源下载 Linux系统各发行版镜像下载(持续更新) == Linux系统各发行版镜像下载(2014年10月更新),如果直接下载不了,请使用迅雷下载.并且注意,我的下载地址,在 迅 ...
- Linux命令之lsb_release - 查看当前系统的发行版信息
用途说明 lsb_release命令用来查看当前系统的发行版信息(prints certain LSB (Linux Standard Base) and Distribution informati ...
- Linux系统各发行版镜像下载(持续更新)
Linux系统各发行版镜像下载(持续更新) http://www.linuxidc.com/Linux/2007-09/7399.htm Linux系统各发行版镜像下载(2014年10月更新),如果直 ...
随机推荐
- minic 类型声明与变量定义句型处理
#include "token_define.h" //这个文件是用来处理句型的,对于算术表达式都是放在前面的那个头文件中来处理 typedef struct _handle_tr ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-有时候项目会无法编译,重新生成就自动卡死或者自动退出怎么办
删除所有中文注释,有中文注释则不一定能编译成功. 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123 我的在线论坛: ...
- WebService 之 工作原理
一.Web Service基本概念 Web Service 也叫 XML Web Service,WebService 是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求 ...
- 常见的web前端性能优化
一. 语义化HTML:语义化HTML的好处是可以使代码简洁清晰.支持不同设备.利于搜索引擎.便于团队开发: 减少DOM节点:加速页面渲染: 给图片加上正确的宽高值:这可以减少页面重绘,同时防止图片缩放 ...
- Python将一个大文件按段落分隔为多个小文件的简单方法
今天帮同学处理一点语料. 语料文件有点大,而且是以连续两个换行符作为段落标志,他想把它按段落分隔成多个小文件.即每3个段落组成一个新文件.因为曾经没有遇到过类似的操作,在网上找了一些类似的方法,看起来 ...
- KVM Run Process之KVM核心流程
在"KVM Run Process之Qemu核心流程"一文中讲到Qemu通过KVM_RUN调用KVM提供的API发起KVM的启动,从这里进入到了内核空间执行,本文主要讲述内核中KV ...
- 剑指OFFER之二叉搜索树与双向链表(九度OJ1503)
题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 输入: 输入可能包含多个测试样例.对于每个测试案例,输入的第一行为一个数 ...
- 如何更改Docker默认的images存储位置
Docker的镜像以及一些数据都是在/var/lib/docker目录下,它占用的是Linux的系统分区,也就是下面的/dev/vda1,当有多个镜像时,/dev/vda1的空间可能不足,我们可以把d ...
- 【微信小程序】退款功能教程(含申请退款和退款回调)
1.一定要区分小程序和公众号的退款,唯一的区别就是 appid不一样,其他的都是一样的. 不废话,直接写代码了啊. 放大招!!! 然后,需要注意的:最好是把证书放在下面的php的同级或者下级. 证书的 ...
- 阿里云视频服务SDK
原文地址:https://help.aliyun.com/document_detail/51992.html?spm=5176.doc52200.6.668.Sn3AjC SDK下载 更新时间:20 ...