大家周一好,還在上學的小夥伴們期末考試考完了嗎?期末考試考完了學習計劃就完了嗎?我知道你不會的,你的心裡只有學習沒有女朋友。書山有路勤為徑,代碼沒寫完不行。還在上班的夥伴們離過年還有整整一個月,放假還早,時間不少,冬天外面冷,呆在室內寫寫代碼,看看項目,何樂而不為呢?(滑稽表情)

本周開源周報流行開源項目榜中榜前十名項目有 x64dbg 給 Windows 系統的開源調試器,反編譯apk的 JADX,反編譯 Java 的 Byte-code viewer,彙編工具 asm-dude,可以說是反編譯器扎堆了,前一陣子 Intel 處理器(後來證實 AMD 、ARM、NVIDIA等處理器部分也有)爆出來的 meltdown 等漏洞把大家折騰得慘烈無比,全球用戶一片哀嚎,不過很快就有跟它有關的開源項目啦,並且熱度不減;而關注前端的朋友,可以看看厲害的 Nerv庫,它提供了與React 16一致的使用方式與API,並且擁有更高的性能表現、更小的包大小以及更好的瀏覽器兼容性。

本周流行開源項目榜中榜開源趨勢 Top 10

0. x64dbg

一個為32位和64位 windows 系統準備的開源調試器

這個調試器在打開程序和程序啟動的入口處都設置了斷點,從而可以讓使用者觀察程序的狀態,比如 CPU 的地址及其地址的內容;內存的地址,大小,頁面信息,內容,類型等等等等。幾乎可以讓使用者在運行程序的同時完全的監視這個程序,還可以通過在程序中設置斷點來進一步觀察運行狀態。

特點:

1.可以全功能的調試 dll 和 exe 文件

2.附帶跳轉箭頭的 IDA 側邊欄和 IDA 指令標記筆

3.可動態識別模塊與字元串

4.快速的反彙編程序

5.擁有用於注釋,標籤等功能的用戶資料庫

6.支持插件

7.擁有可擴展,可調試的腳本語言,便於自動化

1. JADX

 

簡介:一個能夠反編譯二進位和APK文件的開源軟體,同時擁有GUI和命令行兩種操作方式。

用法:

Windows下:來到build/jadx/bin目錄下,雙擊jadx-gui.bat,然後選擇要反編譯的apk即可。

命令行:把apk拷貝到bin目錄下,命令行cd到bin目錄下:鍵入jadx -d out xxx.apk會把編譯後的源碼丟到out目錄下。

優勢:

  1. 相比於傳統的安卓反彙編方式(apktool+dex2jar+jd-gui)更加集成化。
  2. 可以直接導出項目源代碼為Gradle項目,方便使用 Android Studio 再次開發。

2.workerize

workerize 能將模塊移動到 Web Worker 中,自動將導出的函數反應為非同步代理

特點:

  • 將一個小型的專門構建的RPC實現捆綁到您的應用程序中
  • 如果導出的模塊方法已經是非同步的,那麼簽名是不變的
  • 支持同步和非同步工作者功能
  • 與非同步/等待美妙地工作
  • 只需900位元組的壓縮ES3

用法:

傳遞一個函數或一個包含代碼的字元串

let worker = workerize(`
    	export function add(a, b) {
             	// block for half a second to demonstrate asynchronicity
             	let start = Date.now();
             	while (Date.now()-start < 250);
             	return a + b;
    	}
`);
 
(async () => {
    	console.log('3 + 9 = ', await worker.add(3, 9));
    	console.log('1 + 2 = ', await worker.add(1, 2));
})();

3. Bytecode Viewer

Bytecode-viewer 是一個由五個不同的Java 反編譯器,兩個位元組碼編輯器,一個Java 編譯器,Android APK等組成的工具。

主要特點:

1.  Smali / BakSmali集成 - 可以通過smali編輯類文件/ dex文件。

2.  APK / DEX支持 - 使用Dex2Jar和Jar2Dex,可以輕鬆載入和保存APK。

3. Java反編譯器 - 利用FernFlower,Procyon和CFR進行反編譯。

4. 每個反編譯器/編輯器/查看器都是可切換的,也可以自定義每個窗格上顯示的內容。

 5. 全功能的搜索系統 - 通過字元串,函數,變數等等搜索。

6. 內置的插件系統 - (惡意代碼掃描器,字元串解密器等)

更多信息:https://wiki.bytecode.club/Bytecode_Viewer

社區地址:https://the.bytecode.club/forumdisplay.php?fid=69

關於Bytecode俱樂部:

這是一個專註於逆向工程的社區,他們嘗試以Java / Android為目標,但也包括其他語言/平台。為支持和免費開放源代碼應用感到自豪。

4. Nerv

Nerv是一款基於虛擬DOM技術的JavaScript(TypeScript)庫,它提供了與React 16一致的使用方式與API,並且擁有更高的性能表現、更小的包大小以及更好的瀏覽器兼容性。

特性:

  1. 與React保持一致的API,不需要 nerv-compat
  2. 久經戰鬥洗禮,已經應用於京東PC首頁 與 京東旗下TOPLIFE
  3. 強勁的性能
  4. IE8兼容
  5. 更小尺寸, 9Kb gziped
  6. 支持客戶端與服務端同構渲染
  7. 支持React 16的新特性, 例如錯誤處理, Portals, 自定義DOM屬性等等.

熟悉react框架的人可以直接上手nerv,從React切換成使用Nerv非常方便,只需要將react 和 react-dom 重命名成 nervjs,而不需要任何的代碼變動。

5. Eel

Eel是一個小型的Python(目前僅用於Python3)庫,用於製作簡單的類似Electron的HTML / JS GUI應用程序

它擁有一個本地的網路伺服器,然後讓你用Python聲明函數,以便從Javascript調用它們,反之亦然。

它的設計目的在於編寫短而簡單的GUI應用程序。

Eel不像Electron或Cefpython那樣完全成熟 - 它可能不適合做像Atom這樣全面的應用程序 - 但它非常適合使你自己使用的小實用程序腳本的GUI相當。

6. algorithms_and_data_structures

該項目是一份 c++描述的演算法與數據結構問題的解決方案的集合,當你遇到難題時,來這裡尋找說不定能有意外的收穫。另外,要補充的是,該項目採用的是GNU通用公共許可證,那麼,你能幹嘛不能幹嘛就不必我贅述了吧。

當前分類:

  1. 鏈表問題
  2. Include 部分:提供了一些常用演算法和大部分數據結構的泛型實現
  3. 位操作問題
  4. 《程序員面試金典》中的部分問題
  5. 動態規劃中的一些問題
  6. 關於樹的問題
  7. 字元串問題
  8. 常見的數據結構與邏輯問題
  9. 數學問題
  10. 堆棧問題
  11. 排序與搜索問題
  12. 圖形問題
  13. 貪心演算法問題
  14. LeetCode上的一些問題

7. meltdown

一個新發現的bug,提供了多個演示視頻,演示視頻使用的是Ubuntu 16.04以及Intel i7,但他們應該可以工作在任何基於2010年以後的現代Intel CPU的Linux系統上。為了取得最好的演示效果,最好使用支持Intel TSX的快速CPU

鏈接:

這個庫包含了多個應用程序來展示Meltdown bug. 技術信息參考:https://meltdown.help/meltdown.pdf

操作步驟:

1、對於支持RPM的系統:首先安裝glibc-static

sudo yum install -y glibc-static

演示

1#

首先測試第一個代碼,如果其不工作,則其他的演示也將失敗,原因請參考github網站

make

taskset 0x1 ./test

如果看到以下代碼則表示可以運行

Expect: Welcome to the wonderful world of microarchitectural attacks

Got: Welcome to the wonderful world of microarchitectural attacks

2# 破壞kaslr

輸入:

make

sudo taskset 0x1 ./kaslr

等待幾秒鐘後你將看到

[+] Direct physical map offset: 0xffff880000000000

3#可靠性測試

如果你有KASLR啟用,第一個參數是physical map的偏移量。否則,程序不需要參數。

make

sudo taskset 0x1 ./reliability 0xffff880000000000

等待幾秒鐘後你將看到

[-] Success rate: 99.93% (read 1354 values)

4#讀物理內存

提供了一個可讀的測試工具(secret)

make

sudo ./secret

等待幾秒鐘後你將看到

[+] Secret: If you can read this, this is really bad

[+] Physical address of secret: 0x390fff400

[+] Exit with Ctrl+C if you are done reading the secret

讓secret繼續運行並開始physical_reader,如果你有沒KASLR啟用,第二個參數是physical map的偏移量。否則,程序不需要參數。

taskset 0 x1。 / physical_reader 0 0 xffff880000000000 x390fff400

等待幾秒鐘後你將看到:

[+] Physical address       : 0x390fff400

[+] Physical offset        : 0xffff880000000000

[+] Reading virtual address: 0xffff880390fff400

 

If you can read this, this is really bad

5#轉存內存

首先運行給的測試工具memory_filler,來給內存填充可讀信息。第一個變數是要填充的數量(以千兆位元組為單位)

make

./memory_filler 9

接下來運行工具memdump

執行memory_filler之前,您應該看到一些字元串片段。如果你有Firefox和Chrome運行多個標籤,您還會看到最近點開或關閉的網站。

第一個參數是轉儲應該開始的物理地址。如果你有沒KASLR啟用,第二個參數是physical map的偏移量。

taskset 0x1 ./memdump 0x240000000 0xffff880000000000 # start at 9 GB

你將獲得16進位顯示的一部分內存(可能包含隱私文件)

8. Web Developer Roadmap

作者應一位老教授的要求給老教授的學生做了一份對前景的分析,給迷茫的小朋友們介紹了通向成為一個前端,後台或者是一個DevOps(開發軟體、技術運營和質量保障(QA)三者的交集)的路徑與其對應的技術,以及通向任一方向前應掌握的東西。

作者還打算做一份相關資源的圖表,但還未實施;同時作者很歡迎讀者詢問,並與他一起對這些圖表做出改進

作者製作圖表的工具:https://balsamiq.com/products/

9. TopSup

簡介:使用截圖,文字識別,搜索的小輔助。

使用步驟 (谷歌 Tesseract)

Android

安裝ADB

下載地址:https://adb.clockworkmod.com/ 安裝完後插入安卓設備且安卓已打開 USB 調試模式,終端輸入 adb devices ,顯示設備號則表示成功。我手上的機子是堅果 pro1,第一次不成功,查看設備管理器有嘆號,使用 handshaker 載入驅動後成功,也可以使用豌豆莢之類的試試。

安裝python3

安裝所需python包

命令行:

pip install pytesseract

pip install pillow

pip install requests

安裝谷歌Tesseract

Windows下鏈接: 推薦使用安裝版,在安裝時選擇增加中文簡體語言包

  • 安裝版:

https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-3.05.01.exe

  • 免安裝版:

https://github.com/parrot-office/tesseract/releases/download/3.5.1/tesseract-Win64.zip 免安裝版需要下載中文語言包

其他系統: https://github.com/tesseract-ocr/tesseract/wiki

修改 GetTitleTessAndroid 代碼相應目錄信息(默認安裝則無需修改)

# tesseract 路徑

pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract'

# 語言包目錄和參數

tessdata_dir_config = '--tessdata-dir "C:\\Program Files (x86)\\Tesseract-OCR\\tessdata" --psm 6'

運行腳本

python GetQuestionTessAndroid.py 會自動識別文字並打開瀏覽器

註: 可以用 GetImgTool.py 調整題目截取位置

可以到

https://github.com/Skyexu/TopSup/blob/master/common/devicesCutConfig.txt

查看部分手機截圖設置 若屏幕解析度不同,請在 ocr.py 中自行修改代碼即可

# 切割題目和選項位置,左上角坐標和右下角坐標,自行測試解析度

question_im = image.crop((50, 350, 1000, 560)) # 堅果 pro1

choices_im = image.crop((75, 535, 990, 1150))

# question = img.crop((75, 315, 1167, 789)) # iPhone 7P

其它

  • Tesseract 參數,若識別有問題可以更改參數解決:

https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc

  • 三種方法可以選擇,可以加#注釋掉只保留一個方法

10. asm-dude

 

Asm-dude 是一個應用於 Visual Studio 2015/2017 彙編代碼編寫功能以及反編譯功能的輔助工具。他擁有將語法高亮顯示並提供說明(指向、作用),這個功能對x86指令集和x64,SSE、AVX、avx2、Xeon Phi(Knights Corner),最常用的彙編指令的和一些NASM指令提供支持;並支持文檔鏈接的快速跳轉,自動生成部分簡單代碼,對代碼進行摺疊,自動提示參數,標籤校驗等功能。

除此之外,它的2.0版本擁有彙編模擬器功能,模擬器提供Multi-Valued Logics、顯示登記內容、多種錯誤檢查(使用未定義的值,冗餘指令,不可能觸發的邏輯判斷指令,語法錯誤)等功能。

該工具仍在持續更新完善,如果你在使用這個工具時有任何疑問與建議,都可以在github中向作者提出。

好了,本期開源周報到這裡就結束了,歡迎下周同一時間再見。