About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Apr

    8

    配置文件:201604081553133616.zip

    存放目录:WizBrother\CyberArticle\Plugins\Import\SourceCode2HTML

    Apr

    8

    Windows 10 LTSB 版本 KMS 地址激活

    • 0 Comments
    • Miscellaneous

    以管理员的权限启动 CMD 窗口(不要直接启动 CMD,必须以管理员的权限启动 CMD)。  

    slmgr /ipk WNMTR-4C88C-JK8YV-HQ7T2-76DF9
    slmgr /skms 54.223.212.31
    slmgr /ato

    备注:其中 KMS 激活用的 IP 地址 54.223.212.31 不保证它永久有效(本人是用这个地址激活的),如果这个 KMS 地址失效了可以在百度上搜一下,找到其它用于 KMS 激活的服务器地址。

    Apr

    2

    Google Play 报 AIR 应用 OpenSSL 漏洞问题已经不是一次两次了,2014 年和 2015 年都有过一次,今年 2016 年果不其然的又来一次,看到 Starling 开发者论坛里其它人也收到了类似的警告(下面是两个案例贴子):

    1、Google Play warning: You are using a vulnerable version of OpenSSL

    2、Open SSL Version in AIR

    警告的内容大致如下(事实上在 Google 搜索里可以找到其它平台的开发人员也收到了类似的警告,不仅仅只是 Adobe AIR 平台的开发者):

    Hello Google Play Developer,
     
    Your app(s) listed at the end of this email utilize a version of OpenSSL that contains one or more security vulnerabilities. If you have more than 20 affected apps in your account, please check the Developer Console for a full list.
     
    Please migrate your app(s) to OpenSSL 1.02f/1.01r or higher as soon as possible and increment the version number of the upgraded APK. Beginning July 11, 2016, Google Play will block publishing of any new apps or updates that use older versions of OpenSSL. If you’re using a 3rd party library that bundles OpenSSL, you’ll need to upgrade it to a version that bundles OpenSSL 1.02f/1.01r or higher.
     
    The vulnerabilities were addressed in OpenSSL 1.02f/1.01r. The latest versions of OpenSSL can be downloaded here. To confirm your OpenSSL version, you can do a grep search for ($ unzip -p YourApp.apk | strings | grep "OpenSSL").
     
    To confirm you’ve upgraded correctly, submit the updated version to the Developer Console and check back after five hours. If the app hasn’t been correctly upgraded, we will display a warning.
     
    The vulnerabilities include "logjam" and CVE-2015-3194. The Logjam attack allows a man-in-the-middle attacker to downgrade vulnerable TLS connections to 512-bit export-grade cryptography. This allows the attacker to read and modify any data passed over the connection. Details about other vulnerabilities are available here. For other technical questions, you can post to Stack Overflow and use the tags “android-security” and “OpenSSL.”
     
    While these specific issues may not affect every app that uses OpenSSL, it’s best to stay up to date on all security patches. Apps with vulnerabilities that expose users to risk of compromise may be considered in violation of our Malicious Behavior policy and section 4.4 of the Developer Distribution Agreement.
     
    Apps must also comply with the Developer Distribution Agreement and Developer Program Policies. If you feel we have sent this warning in error, contact our policy support team through the Google Play Developer Help Center.
     
    Regards,
     
    The Google Play Team
     

    测试了有两种方法可以解决这个问题,但每种方法都会存在问题。

    第一种方法:就如 Starling 论坛里面其它开发人员所述的,使用 AIR SDK 21 重新编译,然后再重新发布新版本。但这种方法并不代表是永久性的消除了问题,过一两年后也许在 2017 年…又会报旧版本 OpenSSL 存在的其它安全问题,或又报新的漏洞。如果帐号下面的应用数量越来越多,那么每过一年左右被这么搞一下是非常蛋疼的(而且你还得保证你的代码不会出什么意外事故)。

    第二种方法:在编译的时候不要集成 AIR 运行时环境,但打包时运行时环境的下载地址一定要选“Android Market - https://market.android.com/details?id=com.adobe.air”,因为 Google Play 政策有规定,应用不允许通过其它第三方平台下载和安装未知来源的应用(如果被 Google 发现是要被下架的)。这种方法的好处就是可以长久性的避免将来由 AIR 运行时环境带来的 OpenSSL 漏洞。缺点也很明确,这样的做法就会导制应用很可能不会被其它平台接受,因为很多平台规定不允许使用运行时共享技术给用户带来不好的体验,同样很多平台也会规定禁止下载其它平台的应用,尤其是在国内,既便国内平台允许用户下载第三方平台的应用,也会因为中国防火墙的问题无法下载 Google Play 上的 AIR 运行时环境(国内的普通用户甚至可能连 Google 帐号都没有)

    备注:虽然警告中写了提交更新 5 小时后如果正确的话警告信息会消失,但实际上你可能要等 10 小时以上。

    Mar

    21

    Mar

    18

    很简单的一行 AS3 代码:

    txt.text = String(parseFloat("9.2.1"));

    使用 Flash CS3 编译输出错误结果:92.1,既便是在高版本的 FlashPlayer 17 以上的版本中运行,也是一样错误的结果 92.1

    使用 Flash CS4 或 CC 输出正确结果:9.2,但如果将它运行在 Flash9 和 10.0 版本中,同样会变成错误的结果:92.1。如果运行在 10.1 以上的版本则输出正确结果 9.2 。

    PS:如果设置成 AS2 输出错误结果:9.21。

    突然对这个 API 感觉很不靠谱……

    Feb

    25

    苹果开发者续费时失败提示:“你的支付授权失败。请核实你的信息后重试,或试试其他付款方式” 。使用的是工商银行环球旅行信用卡 VISA 单标卡,多次银行核实了信息,没有任何错误,也多次向苹果公司客服和技术专家进行了联系,确认了帐号并没有任何异常。

    终于在 cocoachina.com 找到一个贴子,关于 VISA 单标卡续费失败的案例。虽然信息是广大银行公布的关于境内VISA单标信用卡停止境内跨行受理的通知,但 VISA 公司的政策同样适用于国内其它银行。

    因为工行环球旅行信用卡是套卡 1+1 的形式, VISA 信用卡和银联的信用卡是分开的,所以没有办法。在交通银行申请了带有 ”VISA + 银联“ 两个标志的信用卡后续费成功。

    Feb

    23

    很多时候我们需要用到设备的唯一识别码。安卓系统获取设备唯一识别码的资料网上比较多,但它们也并不通用,因为现在市场上的很多安卓机实际上它们的系统都是经过设备厂商修改过的,比如小米的系统,阿里云OS手机系统等等,所以实际上并不存在一个真正通用的方法。以下这个方法仅适用于 iPhone / iPad 设备或桌面设备,并不适用于 Android 系统(原因在后面)。

    苹果设备的 “IDFA、IDFV、UDID、OpenUDID 等等”这些标识区别可以在百度上找到,这些标识除了真正的 UDID 和 MAC 物理地址之外,其它的标识在很多情况下是会发生变化的:最常见的情况就是还原出厂设置后,会生成一个新的标识符。网络上一些第三方能够获得 UDID 的 SDK,实际上都是 OpenUDID,并不是真正的 UDID。

    苹果公司政策规定开发者是不能够获取用户设备的物理信息的(在 iOS 4.x 时代是获取 UDID 和 MAC 物理地址的,后来的新系统中都开始禁止了访问这些信息)。如果利用核客技术访问私有 API 被审核人员发现,那么一定会遭到苹果公司拒审;既便上架了被发现也会被下架。

    重要的事情说三边

    1、苹果公司政策规定不允许第三方开发者获取设备真正的唯一识别码!苹果公司政策规定不允许第三方开发者获取设备真正的唯一识别码!苹果公司政策规定不允许第三方开发者获取设备真正的唯一识别码!

    2、利用核客技术或系统漏洞调用苹果私有 API 会拒和下架!利用核客技术或系统漏洞调用苹果私有 API 会拒和下架!利用核客技术或系统漏洞调用苹果私有 API 会拒和下架!

    3、利用任何标识符统计用户数据必须接受苹果公司审核!利用任何标识符统计用户数据必须接受苹果公司审核!利用任何标识符统计用户数据必须接受苹果公司审核!

    4、开发者不要仅研究技术,也要知晓各平台的政策!开发者不要仅研究技术,也要知晓各平台的政策!开发者不要仅研究技术,也要知晓各平台的政策!

    技巧

    同一时间是指精确到毫秒级的时间!目录与创建时间!!硬件磁盘根目录即文件目录!!!

    从理论上来说,我们可以在同一时间创建两个目录,但那仅仅是理论上的,所以标题中“唯一”两个字加了引号。两块闪存盘同时间被格式化完成?这个概率可能比两个目录的创建时间完全相同的机率还要低。

    代码

    import flash.filesystem.File;
    import flash.globalization.DateTimeFormatter;

    trace("硬件信息:");

    var rootDirArr:Array = File.getRootDirectories();

    for (var i:uint = 0; i < rootDirArr.length; i++) 
    {
        var file:File = rootDirArr[i];

        var date:Date = file.creationDate;

        var dtf:DateTimeFormatter = new DateTimeFormatter(LocaleID.DEFAULT);
            dtf.setDateTimePattern("yyyy/MM/dd HH:mm:ss");

        var creationTime:String = dtf.format(date);

        //看到最后的这个 milliseconds 值了吗
        trace(file.nativePath + ":" + creationTime + "," + date.milliseconds);
    }

    如果是在我的 Windows 7 中调试运行,它会显示(它并不需要系统管理员的权限就能读取):

    硬件信息:
    C:\:2009/07/14 10:38:56,526
    D:\:2010/08/23 23:59:31,18
    E:\:2010/08/23 23:59:46,99

    如果是在我的 iOS 9.2 (iPhone6 Plus)中运行,它会显示(不需要越狱):

    硬件信息:
    /:2015/06/25 17:47:25,10

    使用这个方法最大好处就是不需要 ANE 文件。既便用户在系统设置中还原位置与隐私、还原广告标示符、抹掉所有内容与设置、升级系统等,磁盘的创建时间都不会发生变化,既便用户完全重置系统,还原所有设置到出厂状态,磁盘的创建时间都不会发生变化。经过测试,只有在使用线刷 / 强制刷机的情况下,磁盘才会被重新创建并且格式化,磁盘的创建时间才会发生变化 

    额外的话题:关于 Android 系统

    然后,以上这个方法并不适用于 Android 系统,在 Adobe 官方的 API  手册中 getRootDirectories() 方法下面已经有说明:“在根不可读的文件系统上,例如 Android 文件系统,返回的 File 对象的属性并不总是反映真实值。例如,在 Android 上,spaceAvailable 属性报告 0。” 安卓系统可以使用原生的方式获取设备id,制作成 ANE 文件给 AS3 调用。但正如前面第一段所述的,既便是 Google 提供的 getDeviceId() 这个 API 并不通用,因为国内很多手机厂商对安卓系统进行了修改,很多权限都发生了改变。

    比如,在不使用 ANE 的情况下,在未经修改的安卓系统中,可以用如下方法读取 MAC 网卡地址。我在 HTC 手机中进行了测试,-app.xml 中的权限:

    <!--删除 android.permission.INTERNET 权限将导致无法调试设备上的应用程序-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!--应同时切换 ACCESS_NETWORK_STATE 和 ACCESS_WIFI_STATE 权限,才能使用 AIR 的 NetworkInfo API-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

    AS3:

    var netWorkVec:Vector.<NetworkInterface > = NetworkInfo.networkInfo.findInterfaces();

    for (var i:* in netWorkVec)
    {
        if(netWorkVec[i].hardwareAddress)
            trace("MAC 物理地址:",netWorkVec[i].hardwareAddress);
    }

    结果输出了:

    MAC 物理地址: D8:B3:77:7F:00:47

    但是,同样的代码,在国内厂商经过修改后的系统里,它并不能正常输出 MAC 网卡地址,比如使用阿里云OS的联想手机经过测试就不能。所以如果 AS3 的安卓开发者们想要一个通用的获取设备硬件信息的方法,几乎是不可能。

    Feb

    21

    Adobe AIR Gaming SDK ANE 64位版本

    • 1 Comments
    • Flash Platform

    官方博客里下载到的是 32 位的版本。在官方的论坛里找到了 64 位版本。里面的链接是指向 dropbox.com 域名的,国内用户需要链接 VPN 才能下载,不知道什么原因 Adobe 的工作人员为什么要把文件放在 dropbox 网站去~

    没有 VPN 的话也可以在这里下载:Adobe Gaming SDK 64bit ANE.zip

    在 Adobe 开发者中心还找到了另一个个人升级过的版本,但当点击他的 Game Center Demo 中点击 Score 按钮时闪退了,替换为 dropbox 上下载的 ANE 文件并不会闪退,估计有 Bug……

    Feb

    20

    全局函数 navigateToURL() 功能很强大,仔细看它在 API 手册中的介绍,可以打开很多协议方案,可以用它启动拔号程序,短信程序等,也可以用它来打开 APP Store 程序。

    打开某个 APP 对应的中国市场页面:

    navigateToURL(new URLRequest("itms-apps://itunes.apple.com/cn/app/ANY_APP/idXXXXXXXXXX?mt=8"));

    用下面这种,可以自动识别多语言:

    navigateToURL(new URLRequest("itms-apps://itunes.apple.com/app/idXXXXXXXXXX"));

    跳转到用户评论页面,一般用的最多的估计就是这个:

    navigateToURL(new URLRequest("itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=XXXXXXXXXX"));

    Feb

    20

    强大的JSFL,开发Flash拓展插件

    • 0 Comments
    • Flash Platform

    1、Creating Flash Extensions — Pt. 1: Introduction

    介绍jsfl,如何从history中查看jsfl,对jsfl有基础的认识。

    2、Creating Flash Extensions — Pt. 2: The DOM

    dom结构,就是fla在jsfl语言中结构:

    fl.documents[0].timelines[0].layers[0].frames[0].elements[0];

    3、Creating Flash Extensions — Pt. 3: Manipulating the Library

    如何操作资源库,作者通过对不同类型的资源进行文件夹管理,很实用.

    创建一些交互界面,alert弹窗,确认弹窗等。 

    5、Creating Flash Extensions — Pt. 5: SWF Panels :

    用swf发布来做自定义面板,是不是很库呢?作者也推荐了几款相应的swf面板组件。 

    6、Creating Flash Extensions — Pt. 6: Custom Tools 

    自定义工具,这里可以让你自己做个画图工具了。 

     

    7、Creating Flash Extensions — Pt. 7: Distributing to Others :

    打包你开发的拓展,可以发给设计人员,也可以分享给其他人了。

     

    原文地址链接

    http://blog.fireyang.com/2011/03/29/2011-03-29-%E5%BC%BA%E5%A4%A7%E7%9A%84jsfl/

    其它相关链接

    http://kevincao.com/tag/jsfl/

    http://kevincao.com/2011/03/introduce-kafecomponent-part-2/