自動投票系統—Fiddler+grepWin+IE+Chrome+IIS

今天拿到一個投票系統,只要投幾次,就可以參加抽獎,原本想用鍵盤快速投票的,結果他是用image元件,這樣我就無法用tab去得到焦點了。

本著程式設計師的個性,絕不作重覆的工作,所以我決定寫個程式幫我自動投票。快速看了一下網頁原始碼,好像沒有那麼簡單,完全沒有看到投票按鈕的html,這也代表了不能用簡單的WebRequest元件來自動投票了。現在的瀏覽器功能越來越複雜,都快變成OS了,所以Parse Html也麻煩許多。

先說一下我之前作過的方法:

一:控制鍵盤滑鼠與瀏覽器的程式,記得在大學有一次要評分各單位,我就用這個方法,適當的算出投票按鈕的位置跟換頁的位置,就可以了,簡單,不用去管網路的Protocol,但缺點是跑程式的時候,電腦就不能用了,不然座標會跑掉,而且我覺得寫程式的時候也是浪費一堆時間,因為都在那邊算座標,沒學到甚麼東西。

二:透過內嵌WebBrowser元件去抓取需登入的資訊,科科,用來抓公司的員工照片,因為公司內部的網頁是走LDAP認證,自己用WebRequest做認證麻煩,登入之後再取得WebBrowser.DocumentText來Parse就好

三:之前抓美女圖片用過的WebRequest,不用登入,大概就是Regular Expression、Cookies、Referrer設好就行了。

而今天要hack的投票系統比較麻煩。

第一:Raw Html沒有按鈕的Element Html,這樣就不能用WebRequest了,因為一定是透過Javascript動態產生的。

第二:裡面用到一堆jquery的元件,這樣我如果用內嵌的WebBrowser看來也要改不少。

找到我以前的文章:無名小站相簿的熱鍵破解--IE版

因為都看不到按鈕的Element Html,所以先使用Chrome另存新檔,就可以看到跑完Javascript後的DOM會變成怎樣了。這裡比較奇怪的是IE的另存新檔反而不會有。觀察另存新檔,會看到html的最後面加上了一段 feedback-search.js 的Script。水,所以我就先把feedback-search.js 存到自己localhost的網站中。

但看了一下Raw Html,裡面還是沒有這一段,所以應該是某一個 js 把 feedback-search.js 插進去的,這時候我就使用 grepWin 去搜尋Chrome抓下來的資料夾,哇!完全沒有 js 檔案裡面含有 feedback-search.js 的。怎麼可能,換一下關鍵字,使用 feedback-search,科科,看到了,eval-loader.js,所以這時候也要把 eval-loader.js 也存到自己的localhost,然後把裡面載入 feedback-search.js 的網址換成 http://localhost:8080/feedback-search.js。 這邊準備工作就完成了,接下來就是要把 Raw Html 裡面的 eval-loader.js 導到 http://localhost/eval-loader.js

所以我就仿照之前的方法,寫了下面這一段

var html : String;
         if(oSession.url.toLowerCase().indexOf("TargetUrl")>-1)
         {
            html = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
            html = html.Replace("/xxx/eval-loader.js","http://localhost/eval-loader.js");
            oSession.responseBodyBytes=System.Text.Encoding.UTF8.GetBytes(html);
            return;
         }

存檔之後,沒想到使用IE Reload後,竟然會看不到畫面,透過Fiddler看,原來Server有使用gzip壓縮,所以我不能直接用 UTF8去解,但我又懶得自己解gzip,所以再加上

static function OnBeforeRequest(oSession: Session)
    {
     
      oSession.oRequest.headers.Remove("Accept-Encoding");
    }

這樣代表我的瀏覽器都不支援壓縮指令,Server就會直接傳UTF8給我了。

這時候再 feedback-search.js 裡面加上一行

alert(“Hacked!’);

重新 reload IE就會看到噴出這個視窗,科科~

接下來就是想辦法怎麼自動按下投票按鈕了, feedback-search.js 裡面使用

$('.search-feedback-btn').live('click', function(e){
        var target = $(e.target);

代表要把所有的 img 的 click事件導到這裡,查了一下jquery的用法,我將其改為

    $('.search-feedback-btn').each(function(index){
        var target = $(this);

科科,這樣代表原本要按下才會觸發的事件,立刻就會被觸發了。

作到這裡,只要我登入之後,到某一頁就會自動把那一頁的投票按鈕都按過一次,但這樣還不夠,我需要自動換頁的功能。

所以繼續在 feedback-search.js 的最後加上下面程式碼,最多大概投個 8 頁就夠了。

if(s3.queryParameters['page']<8)
{
    var NextPage=s3.queryParameters['page']+1;
    var PageElement=document.getElementById('page-' + NextPage);
    window.location.href=PageElement;
}

 

上面寫的有點亂,總結一下這次自動投票解決的流程:

  1. 先用Chrome 另存新檔找出投票時使用的 TargetJs。
  2. 使用grepWin 找出是誰(FirstJs)把 TargetJs 加進 DOM 裡面的。
  3. 使用 Fiddler 把 FirstJs 換成本機的 Js,然後本機的FirstJs 也要修改成是載入本機的 TargetJs。 這裡要使用Fiddler讓Server不要送出 gzip 的編碼。
  4. 然後他的FirstJs的路徑中有不是固定的字串,客,還要用RegularExpression去Parse,我懶的用直接用 IndexOf 找出頭尾\“解決。
  5. 修改TargetJs,讓其自動投票
  6. 修改TargetJs,讓其自動換頁,重點是不能太快換頁,不然正在投票的 AJAX 就會不見了,而我又找不到好的 sleep 作法,所以就使用 alert(‘Hacked!’); 來讓頁面暫停一會兒投票。
  7. 最後使用IE登入OpenID之後切到第一頁,就會開始投票了,只要按下幾個 Hacked! 的按鈕即可~

留言

這個網誌中的熱門文章

好貴的東元冷氣維修--馬達啟動電容

台大醫院 婁培人 耳鼻喉科 就診

機車無法充電之整流器壞掉--$650