一、相关声明

  • 本文涉及的 Xamarin 系列软件的版权为 Xamarin Inc. 所有
  • 以本文涉及的思路和方法破解的软件,禁止用于商业用途
  • 如无必要,学习和研究时最好以正版为准
  • 团队或土豪等若觉得 Xamarin 非常适合自身的业务,请务必支持正版
  • 本文禁止转载扩散
  • 之后应该不会发相关破解了,太耗时间

二、相关背景

2.1 材料背景

  2014年年底,微软在 Connect 开发者大会上宣布了一系列展望,其中就有一个是 Visual Studio “通用平台”(跨平台开发)的进程,在这里,Xamarin 开始走入更多人的视野里。之后,微软在开源的道路上不断前行,同时,也不停地打磨 Windows 10 和 Visual Studio,终于将在 2015 年夏,正式推出 Windows 10 、Visual Studio 2015 等一系列软件;而今,Visual Studio 2015 已抢先发布了 RTM 版。

2.2 破解背景

  • 首先,本人懒,每个平台都学一门新的语言,我累,而且吃了太多语法糖,对 Java 等不怎么中意;
  • 其次,Xamarin 免费版功能限制太多,试用版就一个月;
  • 第三,网上的破解都太过陈旧;
  • 最最重要的是,正版授权费对个人而言太贵了。

  本文将以 Visual Studio 2015 RTM 版带的 Xamarin for Visual Studio 3.11.372 为说明蓝本,以 Xamarin.Android 为说明对象,介绍 Xamarin for Visual Studio 的破解思路。

三、前期准备

  破解之前,我们应该装备有以下武器,为我们的破解之路扫清障碍(这里默认对这些工具都会简单的操作,本文不会展开如何使用;若对某些工具不熟悉,建议到相关网站查看操作,基本都很简单,差不多一看就会;建议使用正版软件,Reflector 和 IDA Pro 等的破解请自行查找):

  • Visual Studio 2010+ 或 Xamarin Studio
  • 一份各项安装完备的 Xamarin
  • 一款反编译软件,ILSpyReflector
  • Reflexil 插件,一般选择相应“AIO”版本(All-in-One?我猜的)
  • IDA Pro
  • @BinSys 写的 IDA 插件
  • Mono(非必要)
  • Process Explorer (非必要)
  • 抓包工具(非必要)

四、破解思路

4.1 大概运行一遍正版的流程,确认相关验证范围,在此过程中可抓包

4.1.1 新建一个 Xamarin.Android 项目,如 Blank App,将生成输出详细级别设为“详细”以上;同时可用 Process Explorer 查看 devenv (VS)总共调用了多少 Xamarin 的 dll(预备技能:需知 Visual Studio 插件一般安装在哪个目录下)

4.1.2 打开项目属性

4.1.3 现直接生成项目,会弹出登录账号,点击“取消”,会有错误提醒

4.1.4 再次点击生成,并随便登录一个账号后(默认权限为 Starter),会开始生成。同时,用 Process Explorer 工具查看,生成过程中 devenv (VS)调用了哪些程序,查看所在位置

4.1.5 结论

  通过抓包可知,在 Xamarin.Android 生成过程中,不涉及网络验证,且仅在登录过程中获取了权限信息;通过 Process Explorer 信息可知,在生成过程中会调用 mandroid.exe,同时能知晓,VS涉及到了 Xamarin 的 dll 有哪几个。退出 Xamarin 账号,并关闭Visual Studio,接下来就要枯燥的排除工作了。

4.2 确认授权验证相关

4.2.1 “站在巨人的肩膀上”

  一般来说,破解之前都会搜索一下是否有人破解过某款软件,思路如何,需要修改的文件是哪几个,我们依样画葫芦……我找不到我看得那个网页了,记得是一篇 blogspot 的文章,那个确实有说哪里要搞。

4.2.2 “小子,我看好你哦”

  如果没人搞过,或者思路没给清楚,那就麻烦多了,一种思路是,把涉及到的 Xamarin dll 都拖到 ILSpy 中,用之前得到的几个提醒内容,提取关键字来“搜索字符串”,如 Enterprise 或 Starter 等,这里我们以 Enterprise 为例。

  然后,不断分析这两个方法以及内容以及各引用,可以判断用 XamarinEdition 来指示 Xamarin 的权限。

  接着,就来分析 XamarinEdition 被哪些调用了,再不断分析这些调用,大概就能确定一般情况下大都最终都会调用 XamarinEntitlements 类。

  用 Reflexil 修改 XamarinEntitlements 类,因为 set 为私有,所以用 C# 一般直接生成不了,切换到 IL,改 IL,修改完毕后,请记得 Update ILSpy object model(ILSpy能立即更新显示,以前Reflector是不能的,不知道现在如何)。

  细节方面,自己改,你可以把set清空,把字段也删了,这样也顺便把自定义Attribute也删了,当然不仅仅是这一个属性,其他相关属性一样的道理,然后全部改完后,点击“验证”,没提示错误,就可以直接保存了,他会提示强签名什么的 ,我一般都是选第一个的(需要将sn.exe放到环境变量 PATH 中)。

  修改 源文件以及补丁名称。

4.3 验证目前的修改是否正确

4.3.1 重启 Visual Studio,打开之前的项目

还是弹出来 Welcome(→_→因为我们之前只是改了权限,没改是否登录,忽略)

4.3.2 重新生成项目,发现可以直接生成了,说明这修改还是有作用的。

4.3.3 现在,打开项目属性,我们要来试试,需要 Enterprise 权限的功能之“打包程序集”。

注意,要在 Release 模式下,勾选“Bundle assemblies into native code”,然后,重新生成并点击“Export Android Package”。(Debug 模式下,没有打包成 apk 这个选项,除非点得是“开始调试”才会自动打包)

然而,它竟然弹出了一个提醒框:

然后,我们可以这个提示错误的步骤名为“SignAndroidPackage”,然后,退出Visual Studio,我们要开始硬来了。

4.4 掌握生成验证入口

4.4.1 搜索 “SignAndroidPackage”,分析相关方法

4.4.2 对函数过程不断分析,缩小范围,然后得到 IServiceProvider、XamarinAndroidPackage 之类的一系列东西,最终得到 mandroid.exe(一般我都是用 Process Explorer 直接看是否调用了其他东西)

4.5 分析 mandroid.exe

没啥好说的, 我水平有限,具体分析请阅读,@BinSys 写的系列文章

4.6 分析 mandroid-win.exe

4.6.1 找到 Main 入口,并分析

4.6.2 用 Reflexil 修改保存相关数据,并将其压入mandroid.exe中(可用脚本、代码或手动mkbundle),这里就不展开了

4.7 重新打开先前的项目,并点击“Export Android Package”,没有出错

现在,我们可以对比一下, 打包与没打包的区别。

打包:

没打包:

额,对了,再来看看 Layout:

五、写在最后

至此,基本的破解算完成了,当然小问题还是有,大多还是细节体验方面,Log 输出不一致,账号要登录(不登录的话每次都弹 Welcome 觉得不爽)。而对于 Xamarin.IOS 来说,涉及的范围更大。

PS:使用 Xamarin,还是要学习相关平台的知识,只是降低了语言成本罢了。

Xamarin for Visual Studio 破解日志的更多相关文章

  1. Xamarin For Visual Studio 3.0.54.0 完整离线破解版(C# 开发Android、IOS工具 吾乐吧软件站分享)

    Xamarin For Visual Studio就是原本的Xamarin For Android 以及 Xamarin For iOS,最新版的已经把两个独立的插件合并为一个exe安装包了.为了区分 ...

  2. Xamarin For Visual Studio 3.7.165 完整离线破解版

    原文 Xamarin For Visual Studio 3.7.165 完整离线破解版 Xamarin For Visual Studio就是原本的Xamarin For Android 以及 Xa ...

  3. Xamarin For Visual Studio 3.0.54.0 完整离线破解版

    Xamarin For Visual Studio 3.0.54.0 完整离线破解版 Xamarin For Visual Studio就是原本的Xamarin For Android 以及 Xama ...

  4. Xamarin for Visual Studio 3.11.666 稳定版 破解补丁 Version 3

    前提概要 1.全新安装请参考 安装 Xamarin for Visual Studio. 2.本次补丁包含: ① Xamarin for Visual Studio 3.11.666 ② Xamari ...

  5. Xamarin for Visual Studio 3.11.666 Beta版 破解补丁

    注意:本版本是 Beta 版   现已推送到稳定频道 前提概要 全新安装请参考 安装 Xamarin for Visual Studio. 最新稳定版请参考 Xamarin for Visual St ...

  6. Xamarin for Visual Studio 3.11.658 Alpha 版 破解补丁

    注意:此版本为 Alpha 版,版本迭代较频繁,仅供尝鲜 前提概要 全新安装请参考 安装 Xamarin for Visual Studio. 最新稳定版请参考 Xamarin for Visual ...

  7. Xamarin for Visual Studio 3.11.590 稳定版 破解补丁 Version 3

    前提概要 全新安装请参考 安装 Xamarin for Visual Studio. Release Log 3.11.590 此版本是紧急修复(HotFix)版,重点改善了 build-tool 及 ...

  8. [百度网盘]Xamarin for Visual Studio 3.7.165 Preview 最新版-介绍

    Xamarin 3.7.165 Preview 下载地址:http://download.xamarin.com/XamarinforVisualStudio/Windows/Xamarin.Visu ...

  9. [Xamarin.iOS] Visual Studio中Xamarin.iOS项目,无法加入PCL项目参考、NuGet组件参考

    [Xamarin.iOS] Visual Studio中Xamarin.iOS项目,无法加入PCL项目参考.NuGet组件参考 解决方案 目前Visual Studio中最新版本的Xamarin.iO ...

随机推荐

  1. 使用Handler和Timer+Timertask实现简单的图片轮播

    布局文件就只放了一个简单的ImageView,就不展示了. 下面是Activity package com.example.administrator.handlerthreadmessagedemo ...

  2. Python: 迭代器与生成器小结

    迭代器与生成器的区别: 1. 迭代器由Class对象创建. 生成器由包含yield表达的Function对象或者Generator Expression创建. 2. 迭代器的原理: (1)由Itera ...

  3. boa介绍文档

    http://wenku.baidu.com/view/873aa903cc175527072208ce.html?re=view

  4. [译]rabbitmq 2.1 Consumers and producers (not an economics lesson)

    我对rabbitmq学习还不深入,这些翻译仅仅做资料保存,希望不要误导大家. For now, all you need to know is that producers create messag ...

  5. Python-memcached的基本使用

    想学Python,又想研究下memcached的客户端,于是拿Python-memcached研究研究~~~ 1.memcached的安装 请参考本博另一文章<Linux下安装memcached ...

  6. html 元素 变小手

    要设置鼠标指针放在一个元素边界范围内时所用的光标形状,需要对元素的css属性cursor进行设置.cursor属性可能的值1.default 默认光标(通常是一个箭头)2.auto 默认.浏览器设置的 ...

  7. SQL SERVER发布与订阅 [原创]

    一.配置分发 1.配置分发服务器,注:配置发布与订阅,连接SQLSERVER必须用服务器名登录 2.配置分发 3.选择分发服务器 4.选择快照文件夹 5.设置此文件夹的读写权限为everyone 6. ...

  8. QTP与Selenium的比较

    1.用户仿真:Selenium在浏览器后台执行,它通过修改HTML的DOM(文档对象模型)来执行操作,实际上是通过javascript来控制的.执行时窗口可以最小化,可以在同一机器执行多个测试.QTP ...

  9. 查看linux命令类型

    type type -a type type是内建变量 root@akayer-p6:~# type -a lsls 是 `ls --color=auto' 的别名ls 是 /bin/ls

  10. HDU 5795 博弈

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5795 A Simple Nim Time Limit: 2000/1000 MS (Java/Oth ...