皈依Emacs

這應該算第三次使用Emacs了。第一次是在2009年,NOI 2009醬油後下決心好好學習Linux,Philip Xu前輩我指引了兩天,發現Linux這個未知世界竟然有這麼多好玩的軟件。編輯器之神Vim用了一陣子了,NOIP 2009前若干天開始探索神的編輯器Emacs,使用Emacs Lisp配置,實現與Vim相似的設定效果需要多出好多代碼,因此不久又回到Vim。大概2010下半年又用起Emacs,這次好好折騰了一把。當時Vim的插件生態還圍繞vim.org(現在逐步轉戰GitHub了),Emacs倒是有個http://www.emacswiki.org,嘗試了Mew、ERC、AUCTeX、haskell-mode、org-mode等好多東西。很多文件類型的解析、自動縮進支持比Vim對應物好不少,插件質量感覺也稍高。

Read More

J語言初探

先看些例子,感受一下J的魅力:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   +/\ i.6                     NB. prefix sum of 0~5
0 1 3 6 10 15
(+/ % #) 2 3 4 5 NB. mean
3.5
*/~ 1+i.9 NB. multiplication table
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
({.;#)/.~ 'abbccc'
┌─┬─┐
│a│1│
├─┼─┤
│b│2│
├─┼─┤
│c│3│
└─┴─┘

Read More

DEFCON 23 CTF參賽記

8月4日

從北京出發,起飛前兩小時發現機票沒有買成功,立即買了一張,感謝諸位隊友。到達San Francisco後與昨日航班延遲一天的隊友會合,21:00多飛往Las Vegas。今年DEFCON會場從Rio遷到了Paris & Bally's。我們提前到達的在這裏訂了幾間房間。

場外選手所在的套房

Read More

一次服務器BMC固件逆向經歷

導出文件

訪問BMC默認開啓的Web管理界面http://$ip,開啓ssh服務,之後即可以執行ssh root@$ip,得到一個受限的管理界面,功能很少,沒有系統shell。

在服務器上執行ipmitool fru可以查找到設備型號,使用廠商提供的flash備份工具導出flash,比較慢,每秒200多KB。在BMC網頁界面的BMC System Audit Log中看到BMC的Linux系統日誌:

Read More

常數空間Invert Binary Tree與仿Morris法後序遍歷

今天在地鐵上浪費了好多時間……嗚嗚……做其他事都沒有效率,就利用這些時間寫字了。

前幾天LeetCode的Invert Binary Tree火了。名稱有點糟,無法準確描述要求。

主要思路是遍歷二叉樹,把訪問操作修改爲交換左右孩子,每個節點都交換一次即可。

如果採用前序或中序遍歷,則子樹交換髮生在遍歷某棵子樹之前,會引起麻煩。因此我想到了後序遍歷,在遍歷完子樹後再交換左右孩子,重心就是如何實現常數空間複雜度的後序遍歷。某些資料/問題稱之爲Morris post-order traversal。

Read More

jq实现原理——字节码

jq所用的DSL是一门dataflow language,程序中编写的几乎所有结构都是filter,函数(比如def foo(f) f;)接受filter为参数,产生filter。jq程序描述了如何把各个filter组合起来产生更复杂的filter,在执行时把输入数据(若干JSON)变换得到输出(若干JSON)。

jq独特的地方在于它的控制结构是由if和backtracking实现的。由于变量赋值后不可修改,因此迭代无法通过跳转和可变状态实现。

jq把程序编译成字节码后解释执行。字节码是栈式的(参看后缀表达式计算器、Forth),处理的值是JSON,执行时当前结果和临时变量等都存放在data stack上,并提供了很多指令用于处理data stack。下面用表示data stack,左边是栈顶:

持续更新中

Read More

BCTF 2015 CamlMaze命題報告及CTF題目鏡像準備方法

題目

BCTF 2015中的題目,名爲CamlMaze。向解出此題的217、PPP、Gallopsled、Dragon Sector表達祝賀。

描述:

Caml has found a foggy maze. Please direct him to find the gold.

The source code of Caml Featherweight may be helpful.

本題是字節碼逆向題,供選手下載的user.tgz包含camlfwrun(字節碼解釋器)、bytecode(字節碼,是一段客戶端程序,用我的Caml Featherweight編譯生成)、camlfwod(用ocamlrun執行的字節碼查看器,名字來源於objdump)。和Caml Featherweight相比,camlfwrun經過了少許修改,在解釋前會向服務端創建socket,是爲了適配交互式逆向/pwn類CTF題目,靜態編譯,已被strip -s

名字中的Caml源於Categorical Abstract Machine Language,一個ML語言的方言。

Read More