大家周一好,还在上学的小伙伴们期末考试考完了吗?期末考试考完了学习计划就完了吗?我知道你不会的,你的心里只有学习没有女朋友。书山有路勤为径,代码没写完不行。还在上班的伙伴们离过年还有整整一个月,放假还早,时间不少,冬天外面冷,呆在室内写写代码,看看项目,何乐而不为呢?(滑稽表情)

本周开源周报流行开源项目榜中榜前十名项目有 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中向作者提出。

好了,本期开源周报到这里就结束了,欢迎下周同一时间再见。