<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Ryan's Java world!

    something about Java and opensource!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      51 Posts :: 25 Stories :: 59 Comments :: 0 Trackbacks

    在前面一篇文章(http://www.hexiao.cn/blog/index.php?job=art&articleid=a_20060730_130422)中, 提到了 關于IE中的 js.edcode的加密問題. 由于要使用這些加密后的信息,就要解密,在網絡上找了一個js版本的解密程序, 由于要在java中使用,就把他轉化為java代碼了, 解密js.encode的java代碼如下:

    ?

    //import java.util.regex.Matcher;
    //import java.util.regex.Pattern;
    /**
    ?* Decode encode
    ?* @author icess
    ?* @blog http://blog.matrix.org.cn/page/icess
    ?*/
    public class EncodeDecode {
    ?final int STATE_COPY_INPUT = 100;

    ?final int STATE_READLEN = 101;

    ?final int STATE_DECODE = 102;

    ?final int STATE_UNESCAPE = 103;

    ?int[] digits = new int[128];

    ?int[][] transformed = new int[3][128];

    ?int[] pick_encoding = { 1, 2, 0, 1, 2, 0, 2, 0, 0, 2, 0, 2, 1, 0, 2, 0, 1,
    ???0, 2, 0, 1, 1, 2, 0, 0, 2, 1, 0, 2, 0, 0, 2, 1, 1, 0, 2, 0, 2, 0,
    ???1, 0, 1, 1, 2, 0, 1, 0, 2, 1, 0, 2, 0, 1, 1, 2, 0, 0, 1, 1, 2, 0,
    ???1, 0, 2 };

    ?int[] rawData = { 0x64, 0x37, 0x69, 0x50, 0x7E, 0x2C, 0x22, 0x5A, 0x65,
    ???0x4A, 0x45, 0x72, 0x61, 0x3A, 0x5B, 0x5E, 0x79, 0x66, 0x5D, 0x59,
    ???0x75, 0x5B, 0x27, 0x4C, 0x42, 0x76, 0x45, 0x60, 0x63, 0x76, 0x23,
    ???0x62, 0x2A, 0x65, 0x4D, 0x43, 0x5F, 0x51, 0x33, 0x7E, 0x53, 0x42,
    ???0x4F, 0x52, 0x20, 0x52, 0x20, 0x63, 0x7A, 0x26, 0x4A, 0x21, 0x54,
    ???0x5A, 0x46, 0x71, 0x38, 0x20, 0x2B, 0x79, 0x26, 0x66, 0x32, 0x63,
    ???0x2A, 0x57, 0x2A, 0x58, 0x6C, 0x76, 0x7F, 0x2B, 0x47, 0x7B, 0x46,
    ???0x25, 0x30, 0x52, 0x2C, 0x31, 0x4F, 0x29, 0x6C, 0x3D, 0x69, 0x49,
    ???0x70, 0x3F, 0x3F, 0x3F, 0x27, 0x78, 0x7B, 0x3F, 0x3F, 0x3F, 0x67,
    ???0x5F, 0x51, 0x3F, 0x3F, 0x3F, 0x62, 0x29, 0x7A, 0x41, 0x24, 0x7E,
    ???0x5A, 0x2F, 0x3B, 0x66, 0x39, 0x47, 0x32, 0x33, 0x41, 0x73, 0x6F,
    ???0x77, 0x4D, 0x21, 0x56, 0x43, 0x75, 0x5F, 0x71, 0x28, 0x26, 0x39,
    ???0x42, 0x78, 0x7C, 0x46, 0x6E, 0x53, 0x4A, 0x64, 0x48, 0x5C, 0x74,
    ???0x31, 0x48, 0x67, 0x72, 0x36, 0x7D, 0x6E, 0x4B, 0x68, 0x70, 0x7D,
    ???0x35, 0x49, 0x5D, 0x22, 0x3F, 0x6A, 0x55, 0x4B, 0x50, 0x3A, 0x6A,
    ???0x69, 0x60, 0x2E, 0x23, 0x6A, 0x7F, 0x09, 0x71, 0x28, 0x70, 0x6F,
    ???0x35, 0x65, 0x49, 0x7D, 0x74, 0x5C, 0x24, 0x2C, 0x5D, 0x2D, 0x77,
    ???0x27, 0x54, 0x44, 0x59, 0x37, 0x3F, 0x25, 0x7B, 0x6D, 0x7C, 0x3D,
    ???0x7C, 0x23, 0x6C, 0x43, 0x6D, 0x34, 0x38, 0x28, 0x6D, 0x5E, 0x31,
    ???0x4E, 0x5B, 0x39, 0x2B, 0x6E, 0x7F, 0x30, 0x57, 0x36, 0x6F, 0x4C,
    ???0x54, 0x74, 0x34, 0x34, 0x6B, 0x72, 0x62, 0x4C, 0x25, 0x4E, 0x33,
    ???0x56, 0x30, 0x56, 0x73, 0x5E, 0x3A, 0x68, 0x73, 0x78, 0x55, 0x09,
    ???0x57, 0x47, 0x4B, 0x77, 0x32, 0x61, 0x3B, 0x35, 0x24, 0x44, 0x2E,
    ???0x4D, 0x2F, 0x64, 0x6B, 0x59, 0x4F, 0x44, 0x45, 0x3B, 0x21, 0x5C,
    ???0x2D, 0x37, 0x68, 0x41, 0x53, 0x36, 0x61, 0x58, 0x58, 0x7A, 0x48,
    ???0x79, 0x22, 0x2E, 0x09, 0x60, 0x50, 0x75, 0x6B, 0x2D, 0x38, 0x4E,
    ???0x29, 0x55, 0x3D, 0x3F };

    ?public EncodeDecode() {
    //??System.out.println(rawData[0]);
    ??init();
    ?}

    ?public String decode(String encodingString) {
    //??System.out.println("encodingString? :? " + encodingString);
    ??String marker = "#@~^";
    ??String at;
    ??String encodingLable = null;
    ??String unEncodingString = "";
    ??int stringIndex = 0;
    ??int scriptIndex = -1;
    ??int unEncodingIndex = 0;
    ??int unEncodinglength = 0;
    ??int state = STATE_COPY_INPUT;
    ??// int statePos = 0;

    ??while (state != 0) {
    ???// System.out.println("in the Swith statePos is :" + statePos +
    ???// "State:" +state);
    ???switch (state) {
    ???case (STATE_COPY_INPUT):
    ????scriptIndex = encodingString.indexOf(marker, stringIndex);
    ????// System.out.println("scriptIndex1"+scriptIndex);
    ????if (scriptIndex != -1) {
    ?????unEncodingString += encodingString.substring(stringIndex,
    ???????stringIndex + scriptIndex);
    ?????scriptIndex += marker.length();
    ?????state = STATE_READLEN;
    ????} else {
    ?????stringIndex = stringIndex == 0 ? 0 : stringIndex;
    ?????unEncodingString += encodingString.substring(stringIndex,
    ???????encodingString.length());
    ?????state = 0;
    ????}
    ????break;

    ???case (STATE_READLEN):
    ????// System.out.println("scriptIndex"+scriptIndex);
    ????encodingLable = encodingString.substring(scriptIndex,
    ??????scriptIndex + 6);
    ????unEncodinglength = decodeBase64(encodingLable);
    ????scriptIndex += (6 + "==".length());
    ????state = STATE_DECODE;
    ????break;

    ???case (STATE_DECODE):
    ????if (unEncodinglength == 0) {
    ?????stringIndex = scriptIndex + "DQgAAA==^#~@".length();
    ?????unEncodingIndex = 0;
    ?????state = STATE_COPY_INPUT;
    ?????break;
    ????}
    ????at = encodingString.substring(scriptIndex, scriptIndex + 1);
    ????if (at == "@")
    ?????state = STATE_UNESCAPE;
    ????else {
    ?????if (at.codePointAt(0) < 0xFF) {
    ??????unEncodingString += String
    ????????.valueOf((char) transformed[pick_encoding[unEncodingIndex % 64]][at
    ??????????.codePointAt(0)]);
    ??????unEncodingIndex++;
    ?????} else {
    ??????unEncodingString += at;
    ?????}
    ?????scriptIndex++;
    ?????unEncodinglength--;
    ?????break;
    ????}

    ???case STATE_UNESCAPE:
    ????unEncodingString += unescape(encodingString.substring(
    ??????++scriptIndex, scriptIndex + 1));
    ????scriptIndex++;
    ????unEncodinglength -= 2;
    ????unEncodingIndex++;
    ????state = STATE_DECODE;
    ????break;
    ???}
    ??}

    ??// System.out.println("unEncodingString : " + unEncodingString);
    ??// Pattern pattern = Pattern.compile("JScript.Encode");
    ??// Matcher matcher = pattern.matcher(unEncodingString);
    ??// if(matcher.find()) {
    ??// System.out.println("unEncodingString 1: " + unEncodingString);
    ??// unEncodingString = unEncodingString.substring(0, matcher.start()) +
    ??// matcher.group() + unEncodingString.substring(matcher.end());
    ??// }

    //??System.out.println("EncodeDecode.decode : unEncodingString? :? " + unEncodingString);
    ??return unEncodingString;
    ?}

    ?public int decodeBase64(String string) {
    ??int val = 0;
    ??val += (digits[string.codePointAt(0)] << 2);
    ??val += (digits[string.codePointAt(1)] >> 4);
    ??val += (digits[string.codePointAt(1)] & 0xf) << 12;
    ??val += ((digits[string.codePointAt(2)] >> 2) << 8);
    ??val += ((digits[string.codePointAt(2)] & 0x3) << 22);
    ??val += (digits[string.codePointAt(3)] << 16);
    ??return val;
    ?}

    ?public String unescape(String ch) { // no used, and no test
    ??// System.out.println("dddd");
    ??String escapes = "#&!*$";
    ??String escaped = "\r\n<>@";

    ??if (ch.codePointAt(0) > 126)
    ???return ch;
    ??int index = escapes.indexOf(ch);
    ??if (index != -1)
    ???return escaped.substring(index, index + 1);
    ??return "?";
    ?}

    ?public void init() {
    ??for (int i = 31; i <= 126; i++)
    ???for (int j = 0; j < 3; j++)
    ????transformed[j][rawData[(i - 31) * 3 + j]] = (i == 31) ? 9 : i;

    ??for (int i = 0; i < 26; i++) {
    ???digits['A' + i] = i;
    ???digits['a' + i] = i + 26;
    ??}
    ??for (int i = 0; i < 10; i++)
    ???digits['0' + i] = i + 52;
    ??digits[0x2b] = 62;
    ??digits[0x2f] = 63;
    ?}

    ?/**
    ? * @param args
    ? */
    ?public static void main(String[] args) {
    ??// new EncodeDecode().decode("<script
    ??// language='JScript.Encode'>#@~^SwAAAA==-mD~DK'B8vZfF~!0FyF/TFFFZXFR!F8)TvZc82qsq98,TfZ+!wF{T;F&q*Z2T!Z1ZAqZFl!bEiyRAAAA==^#~@</script>");
    ??String plantext = new EncodeDecode()
    ????.decode("#@~^SwAAAA==-mD~DK'B8vZfF~!0FyF/TFFFZXFR!F8)TvZc82qsq98,TfZ+!wF{T;F&q*Z2T!Z1ZAqZFl!bEiyRAAAA==^#~@");
    ??System.out
    ????.println(plantext
    ??????.equals("var ero='16031B08121C07110518011A06041E1F1D190D020F170C13140E00090B10150A';"));
    ??System.out.println("0".codePointAt(0) + " " + (int) 'a' + " "
    ????+ (int) 'A');
    ??
    ??System.out.println("ididgigggi".indexOf("i", 1));
    ?}

    }

    現在可以得到需要的信息了. 呵呵

    posted on 2006-08-01 13:18 冰雨 閱讀(3155) 評論(0)  編輯  收藏 所屬分類: Opensource

    JSF中文技術文摘
    主站蜘蛛池模板: 亚洲AV网站在线观看| 羞羞视频在线观看免费| 久久国产亚洲观看| 免费a级毛片永久免费| 猫咪社区免费资源在线观看| 免费日本一区二区| 一级毛片在线免费播放| 国产亚洲综合视频| 亚洲综合色丁香婷婷六月图片 | 亚洲日产乱码一二三区别| 精品亚洲成a人片在线观看 | 国产精品美女久久久免费| 亚洲精品无码日韩国产不卡av| 亚洲精品人成电影网| 亚洲AV日韩AV永久无码免下载 | 久久免费区一区二区三波多野| 一级全免费视频播放| 美女黄网站人色视频免费| 亚洲av成人中文无码专区| 亚洲色成人网站WWW永久四虎| 亚洲成在人线中文字幕| 亚洲国产高清视频在线观看| 亚洲精品高清国产一久久| 亚洲爆乳无码一区二区三区| 国产亚洲日韩一区二区三区| 亚洲精品国产电影| 亚洲一级特黄大片在线观看| 亚洲国产精品一区二区九九| 婷婷亚洲天堂影院| 亚洲性日韩精品一区二区三区| 亚洲日本一区二区一本一道| 亚洲视频在线免费| 亚洲精品亚洲人成在线观看| 国产亚洲真人做受在线观看| 亚洲成av人在线视| 亚洲色图国产精品| 亚洲中文字幕人成乱码| 日本亚洲色大成网站www久久 | 暖暖日本免费在线视频| 在线免费观看国产视频| 亚洲 小说区 图片区 都市|