開始
馬上就要開始考教資了,現在開始准備學習,然后日常翻翻B站,發現了感覺不錯的課程。但是電腦端不能下載怎么辦? 其實之前有用過下載工具的,不過此時找不到了,那就網上下載一個,結果發現需要關注公眾號,哎?我不想關注,感覺作者也不容易,我於是就關注了,並且請求一個驗證碼。 結果驗證碼不好使,死活不好使。那么我尋思是否可以用它練習一下逆向能力呢?
OD嘗試
- 首先打開OD,然后把程序拖進去
- 結果發現程序直接就飛了...
- OD好像不太合適
- 再想想大佬們說開始之前應該先查殼 : - )
PEID查殼
-
查殼結果如下
-
這里可以看到是一個 32位程序,是C#開發的,並且好像沒有加殼
-
C#的話 我記的是有專門工具的, 之前還用它反編譯過一個游戲,去愛盤下載到 dnSpy
dnSpy 反編譯
- 原本以為要用OD跟蹤調試,會很麻煩,沒想到是C#開發
- 拖進dnSpy 直接把代碼給反編譯出來了,甚至沒有做混淆
- 定位到入口
這里可以看到 運行之后首先會檢查更新,不過因為是最新版的關系 我運行是沒有察覺
因為沒有寫過C#的關系,第二行第三行不知道是干嘛的,但是最后一行能看出來是實例化了一個主窗口
- 點擊進入之后
- 再進去
- 根據之前寫Java代碼的經驗來看 這個應該就是主頁上各種組件了,現在嘗試找到觸發彈窗的按鈕,並且找到關聯的回調函數
- 根據按鈕標題可以找到
- 繼續進去可以看到大概邏輯
- 首先判斷編輯框是否為空,然后判斷版權,這里的話不清楚B站版權的能不能直接下載
- 看到this.check() 應該是一個關鍵的,因為下面直接開啟了一個線程,已經開始下載視頻了,那么直接把判斷中的! 去掉,就行了,這樣 不管它檢查了什么,都會直接過掉,編輯代碼保存即可
- 之后運行反編譯之后的程序,發現已經過了驗證 不需要驗證碼了
其他方法
- 既然都看到代碼了,我也好奇它check了啥
public bool check()
{
string text = FileUtil.checkOpenId();
string text2 = "http://www.屏蔽.com/qrcode/ajax/query/";
if (text != null && !"".Equals(text))
{
text2 = text2 + "?openid=" + text.Trim();
}
else
{
text2 = text2 + "?mac=" + ManagementSystemInfo.getMac().Trim();
}
Console.WriteLine("----" + text2 + "---");
string text3 = "";
try
{
text3 = HttpUtil.HttpGet(text2, null, null);
}
catch (Exception)
{
}
if (text3 == null || "".Equals(text3))
{
return false;
}
Console.WriteLine(text3);
MessagePack messagePack = JsonConvert.DeserializeObject<MessagePack>(text3);
string status = messagePack.status;
if (status == "nodata")
{
new Subscribe().ShowDialog();
return false;
}
if (status == "fobidden")
{
MessageBox.Show("不能使用該軟件");
return false;
}
if (!(status == "custom"))
{
FileUtil.writeOpenId(messagePack.openid);
return true;
}
MessageBox.Show(messagePack.message);
return false;
}
- 上面就是check() 的代碼 可以看到,它get了openid ,進去查看代碼之后,知道就是公眾號發布的驗證碼
- 判斷有沒有openid 如果沒有,就獲取主機的mac地址(我猜的),然后給提交上服務器去了(蜜汁操作)
- 然后請求了一個接口,判斷在數據庫中是否有這個驗證碼,講道理,我既然有公眾號給的openid應該能過這里的判斷才對啊,於是我瀏覽器直接請求這個鏈接,發現得到的json結果 status 是 nodata
- 那這里有驗證碼也不能使用就確實是服務器那邊有問題了
- 根據請求的接口 會返回一個json ,根據status 決定了之后的行為,比如我有驗證碼但是錯誤 就會彈出來窗口,
讓我關注公眾號 (但是真的有用的話 我就不會寫這個文章了)
- 如果 status == fobidden 那就彈出相應提示,
- 最重要的是那個 custom 狀態,會更新本地的openid 那么此時我有一個不修改代碼就能過驗證的方法...
網址劫持
hosts 文件 hosts文件負責解析域名並優先於DNS服務,通常很多惡意軟件會惡意更改該文件來達到劫持網站的目地。
- 那么我只要通過hosts文件修改他的域名指向,指向到我的 127.0.0.1 然后 我本地構造出符合條件的json字符串 就可以過了驗證
- 於是我在 hosts文件中添加
- 這樣 我訪問網址之后 會被跳轉到我的本地服務器,然后根據url構造請求文件
- 訪問結果如下
- 此時再打開軟件,就可以跳過驗證 (好神奇....)
軟件作者看到這個 別殺我祭天 QAQ 我沒分享出去