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

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

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

    GalaxyPilot —— D.S


            生命不熄,戰(zhàn)斗不止
    數據加載中……

    一個java版的CreackMe分析

    一個java版的CreackMe分析
    ??? 在pediy上看到這個java版的CreakMe,我們知道java不可能編譯成真正的exe文件,所以用文本編輯器打開exe便可得到java原代碼,
    (我不知道,會不會有些工具把java做成exe后,在exe中存放的是字節(jié)碼,如果再加上混淆,分析難度就更大了)首先找出Register按
    鈕的響應代碼,簡單分析如下(為了便于閱讀,代碼做了一點修改):
    private void calculateSerial(){?????//點注冊按鈕執(zhí)行的函方法
    ?boolean fakeSuccess=false;????//注冊成功于否的標志
    ?String name = textField1.getText();???//讀取輸入的用戶名
    ?String serial = textField2.getText();???//讀取序列號
    ?if(name.length()==0 || serial.length()==0)??//如果name或serial的長度有為零的,顯示錯誤信息
    ??label3.setText("You Must Enter A Name Serial");???
    ?else{
    ??char[] charName = name.toCharArray();
    ??char[] charSerial = serial.toCharArray();?????
    ??Character[] chName=new Character[charName.length];
    ??Character[] chSerial = new Character[charSerial.length];
    ??if(name.length()>6 && serial.length()==9){???//name 長度大于六,serial 長度等于九
    ???for(int i=0;i<charName.length;i++)
    ????chName[i]=new Character(charName[i]);??//包裝為char對象數組,便于后面以對像處理
    ???for(int i=0;i<charSerial.length;i++)
    ????chSerial[i]=new Character(charSerial[i]);
    ???if(chName[0].compareTo(chSerial[4]) == 0){??//name 第一位和 serial 第五位相等
    ????if(chSerial[0].compareTo(chSerial[8]) == 0){?//serial 的第一位和第九位要一致
    ?????int tmp = (int) ((Character.getNumericValue(charName[1])+
    ???????Character.getNumericValue(charName[2])+
    ???????Character.getNumericValue(charName[3]))/3);
    ?????if( Character.getNumericValue(charSerial[2]) == tmp){
    ?????//name 二、三、四位非負整型的平均值等于serial第三位
    ??????int tmp1 = (int) ((Character.getNumericValue(charName[charName.length-3])+
    ????????Character.getNumericValue(charName[charName.length-2])+
    ????????Character.getNumericValue(charName[charName.length-1]))/3);?
    ??????if( Character.getNumericValue(charSerial[6] )== tmp1){
    ??????//name 倒數一、二、三位非負整型的平均值等于serial的第七位
    ???????fakeSuccess=true;
    ??????}
    ?????}?
    ????}
    ???}
    ??}
    ??if(fakeSuccess)
    ???label3.setText("Try Another Approach. Registration FAILED");???
    ??else
    ???label3.setText("Invalid Serial. Try Again");?????
    ?}???
    ?textField1.setText("");
    ?textField2.setText("");???????
    }
    ??? 按照上的算法寫出注冊機后發(fā)現還是不能注冊成功,而且注冊機會算出亂碼,顯然是有問題了。干脆把fakeSuccess改為true試試,
    任意輸入注冊碼后提示 Try Another Approach. Registration FAILED,明白了,Register按鈕根本是作者設的陷阱,把目光移到其它
    的代碼找找,OK,在該類的構造函數中找到如下代碼:
    String name=args[0];???????? //用戶名
    String serial = args[1];???? //序列號
    StringBuffer correct = new StringBuffer();
    for(int i=0;i<name.length();i++){
    ?char a = name.charAt(i);
    ?int b = Character.getNumericValue(a);
    ?int c = b % 10;????? //分別取出用戶名中的每個字符對應的 Unicode 的非負整型值模 10 便得到序列號的相應位的字符
    ?Integer d = new Integer(c);
    ?correct.append(d.toString());?? //這里轉換為字符串
    }
    if(serial.equals(correct.toString())){? //如果序列號正確則把注冊信息寫入INI文件
    ?registered = true;
    ??try{
    ???FileWriter theFile=new FileWriter("C:/Windows/systen.ini");
    ???theFile.write("Well done "+name+"\n\n");
    ???theFile.write("? You've cracked daPope's CrackMe #1");
    ???theFile.write("using "+serial+" as serialnumber\n\n");?????????
    ???theFile.flush();
    ??}
    ??catch(Exception e){};
    ??textField1.setBackground (new java.awt.Color (204, 204, 204));
    ??textField2.setBackground (new java.awt.Color (204, 204, 204));???
    ??textField1.setEditable(false);? //
    ??textField2.setEditable(false);???????????
    ??label3.setText("Cool! daPope's CrackMe #1 Successfully Registered");? //顯示注冊成功信息
    ??setTitle("daPope's CrackMe #1 - Registered");
    ?}
    ??? 其實上面的代碼就是注冊機了。接下來的問題是如何把我們計算出來的序列號提交給程序,序列號輸入框和注冊按鈕根本是個擺設,
    當然,用戶名輸入框也一樣,我不能通過這兩個輸入框和注冊按鈕提交信息。程序中注冊信息是從構造函數的參數中得到,那我們把注
    冊信息放在命令行中不就行了。
    ??? 在構造函數中還調用了checkForWinIce方法檢查c盤根目錄下的autoexec.bat中是否存在"winice.exe"這個字符串,檢測ICE是否存在
    的簡單方法。isRegistered 是用戶檢測注冊后保存注冊信息的文件是否存在,但并沒有檢查注冊信息是否正確,所以在C盤windows目
    錄下建立一個systen.ini的文件,不管內容有沒有,就算是破解成功。當然,你想通過程序注冊,要確保你的C盤有windows這個目錄,不
    然也不會注冊成功,好像是專為98系統(tǒng)寫的:)
    ??? 可以看得出來,作者在陷阱和實際注冊代碼中的序列號算法都很簡單,我想他真正的目票標是讓我們練習怎么走出陷阱,而不是鉆牛
    角尖,還好陷阱代碼并不復雜,不然我想大多數人會在這里花更多的時間,沒有耐心的則放棄,難怪經常會看到“破解需要耐心和運氣”
    這樣的字眼。

    posted on 2006-04-27 08:35 舵手 閱讀(2192) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網站導航:
     
    主站蜘蛛池模板: 鲁啊鲁在线视频免费播放| a级黄色毛片免费播放视频| 免费a级毛片无码av| 国产精品免费一区二区三区| 亚洲AV无码专区国产乱码4SE| 免费可以看黄的视频s色| 香蕉97碰碰视频免费| 久久亚洲伊人中字综合精品| 免费精品国产自产拍在| 九九久久精品国产免费看小说 | 国产亚洲综合久久系列| 91免费国产精品| 怡红院亚洲红怡院在线观看| 亚洲avav天堂av在线不卡| 性xxxx视频播放免费| 暖暖免费日本在线中文| 亚洲人成电影网站免费| 久久精品国产精品亚洲蜜月| 免费看大黄高清网站视频在线| 四虎影视无码永久免费| 亚洲精品无码久久久久秋霞| 亚洲国产美女精品久久久久∴| 麻豆国产VA免费精品高清在线| 国产成人AV片无码免费| 国产亚洲精品欧洲在线观看| 亚洲福利电影在线观看| 中文字幕亚洲日韩无线码| 最近免费中文字幕4| 日本免费大黄在线观看| 国产精品亚洲天堂| 亚洲午夜精品一区二区| 亚洲国产香蕉人人爽成AV片久久| 国产精品1024永久免费视频| 成人网站免费大全日韩国产| 久久综合亚洲色hezyo| 亚洲伊人久久大香线蕉影院| 亚洲精品成人网站在线观看| 免费在线观看黄色毛片| 永久免费看mv网站入口| 无码日韩人妻av一区免费| 午夜爽爽爽男女免费观看影院|