Java

小米JS地址:

http://p.www.xiaomi.com/zt/20130313/huodong/pm.min.js

上面这个JS是小米抢手机页面的代码。和抢手机有直接关联。。


虽然我3次都没抢到红米手机,但是今天偶尔发现这么一个js文件,对文件内容比较好奇,但是这个js开头有个数组,部分截图如下:


开始这么一大堆的16进制字符串,这种类型的数据经常会在properties文件中看到,为了看到实际的内容,写了如下代码进行翻译。


最简单的方式,只要把上面的代码,贴到浏览器(如chrome的console中),就可以看到还原的文字。


另一种java方式,实现很简单,因为看到上面的x,首先想到的是16进制,看到u首先想到的是unicode,看如下完整代码:

public class UnicodeHex {

	public static String decode(String str) {
		if(str==null||str.trim().equals("")){
			return "";
		}
		String[] ss = str.split("\\");
		int i = 0, j = 0;
		int length = ss.length;
		char[] cs = new char[length];
		for (; i < ss.length; i++) {
			if (!ss[i].trim().equals("")) {
				cs[j] = (char) (Integer.valueOf(ss[i].substring(1), 16).intValue());
				j++;
			}
		}
		return new String(cs);
	}

	public static String encode(String str){
		if(str==null||str.trim().equals("")){
			return "";
		}
		StringBuffer sb = new StringBuffer();
		char c;
		for(int i=0;i<str.length();i++){
			c = str.charAt(i);
			if(c > 256){
				sb.append("\u");
			}
			else {
				sb.append("\x");
			}
			sb.append(Integer.toHexString(c));
		}
		return sb.toString();
	}
	
	public static void main(String[] args) throws Exception {
		String str = "\x3c\x2f\x69\x6e\x73\x3e\u5c0f\u65f6\x3c\x69\x6e\x73\x3e";
		System.out.println(decode(str));
		String ss = "</ins>小时<ins>";
		System.out.println(encode(ss));
		System.out.println(str);
	}
}


使用decode解析上面的字符串,使用encode转换为上述字符串。


小米这段代码都有什么呢,看如下部分内容(使用chrome,和上面java代码执行结果一样):



这段代码中,最明显的应该就是:

http://tc.hd.xiaomi.com/hdget?callback=hdcontrol&_=

这段代码在后续点击按钮时,发送的请求就是这个。

小米抢手机,好像是在服务器上限制了几百个线程,如果你正好抢到一个线程,你就进入了。如果抢不到,服务器返回一个503错误。


小米每次的请求地址都不一样,如果在抢手机之前可以获得请求的字符串,也许就可以抢先别人获得线程...至于是否可行,就等下周二试试了。



原文地址:https://www.cnblogs.com/james1207/p/3285805.html