一、相关声明

  • 本文涉及的 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. ListView与GridView异步加载图片

    原理很简单,主要是用到了回调方法,下面是异步加载图片的类 <span style="font-size:16px;">package com.xxx.xxx; impo ...

  2. SQL Server实现数据的递归查询

    在一次项目中遇到一种需求,需要记录某产品的替换记录. 实际应用举例为:产品101被201替换,之后201又被303替换,303又被109替换:产品102被202替换,之后202又被105替换. 现在我 ...

  3. 代码编译方式 ant +ivy

    Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.由Apache软件基金会所提供. 没用过ant,了解一下,无非就这些功能, 编 ...

  4. [笔记]学习HighCharts的使用(不错的web图表插件)

    最近有一个小项目需要用到折线图.到处请教了一下,有人给我推荐了highcharts.感觉还不错,就稍微学习下.这里记录一下学习的过程. 网上相关的内容还不少,我就说一下我学习的内容. 看的第一篇文章& ...

  5. Android facebook-android-sdk-3.5.2 FQL

    android平台下使用Facebook 3.5.2的SDK实践 步骤总结: 1.引用SDK 在Facebook官网下载最新版的SDK,解压. 打开Eclipse, 'File' -> 'Imp ...

  6. ABAP后台JOB数量控制

    数据库视图:V_OP 可以查看JOB信息 FORM sub_check_job. * 通过JOB名称,控制活动JOB的数量 , jobname TYPE btcjob , strtdate TYPE ...

  7. Machine Learning 学习笔记 (4) —— 广义线性模型

    本系列文章允许转载,转载请保留全文! [请先阅读][说明&总目录]http://www.cnblogs.com/tbcaaa8/p/4415055.html 1. 指数分布族简介 之前的文章分 ...

  8. 64位Windows2003下如何正确发布VesnData.Net(VDN)

    64位windows2003下发布VDN,按照正常的步骤会出现:试图加载格式不正确的程序. (异常来自 HRESULT:0x8007000B)的错误. 按照下面的步骤进行处理: 1.如果安装了64位F ...

  9. JAVA内部类(转)

    源出处:JAVA内部类 在java语言中,有一种类叫做内部类(inner class),也称为嵌入类(nested class),它是定义在其他类的内部.内部类作为其外部类的一个成员,与其他成员一样, ...

  10. 软件工程随堂作业--随机产生30到四则运算(c语言)

    #include "stdio.h" #include "math.h" #include "stdlib.h" #include" ...