SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
Reverse Engineering
   逆向工程入門



         Y.C. Ling
   All Rights Reserved
        2010/09/24
Agenda

Part 1: 逆向工程入門
Part 2: 從組合語言到除錯
Part 1 分享內容

 中研院上課心得
 自由軟體技術充電站-「軟體除錯分析-C語言逆向入門」
   Website Link
軟體工程 V.S. 逆向工程

 軟體工程
   人 => 機器

 逆向工程
   機器 => 人 
逆向工程的應用

研究分析
  AV的最愛
  也是外掛的最愛
漏洞發掘
  黑盒
  白盒
軟體除錯
  我們有源始碼啊?
  鬼打牆時的最後一招
Why C?

Why C?
 較為貼近Machine Code
 Machine Code易與Source Code一一對應

What about C++?
  Much more complicated
   Class
   Member function
   Member data
   Virtual Function
   Template
   .....etc
Machine Code
助記符號
分析方法

靜態分析
  IDA pro
  objdump
動態分析
  Ollydbg
  gdb
IA32 Assembly Language

 您懂組語?略懂略懂

 mov a, b
 lea a, b

 add a, b
 sub a, b

 inc a
 dec a
IA32 Assembly Language

 cmp a, b

 jmp addr
 je addr
 jne addr
 j?? addr

 push a
 pop a

 call addr
 ret
Example 1: Hello World

   Main Function
      Three arguments
      緊臨exit() 

Let's Demo....
Example 2: Function Call

     Calling Convention
        stdcall, cdecl: 參數由右至左推入堆疊
     Stack
        ESP: 堆疊頂端
        EBP: 堆疊底端
int sub(a, b) { return a-b; }
int result = sub(2, 1);
轉成組合語言....
push 1
push 2
call sub
mov result, eax

Demo Time!!
Example 3: If Condition

通常長的像....
cmp a, b
j?? addr

廢話不多說,直接看Demo....
Example 4: For Loop
 應該長的像....




 可是....編譯器會....




 甚至....唉....Demo吧....
Example 5: Password

 實戰題
 大約是CrackMe或WarGame最簡單難度
 Demo Demo Demo!!
只要有心....




  天才?世界上沒有那麼多天才啦
  前輩:
     逆向 = 經驗 + 耐心
     不懂破解,別妄談保護
  Just Try It!!
Just Try It
回家做作業啦
 看雪學院
    http://www.pediy.com/
 Wargame
    http://wargame.cs.nctu.edu.tw/
 Crackme
    Beware of Virus & Trojan
    Sandbox!!
        VMWare
        VirtualBox
NCTU Wargame
Any Question?
 還有Part 2....
Reverse Engineering
      Part 2
 從組合語言到除錯

         Y.C. Ling
   All Rights Reserved
        2010/09/24
從組合語言到除錯

核心精神
  了解你的C++ Code會被編譯成怎樣的機器碼

組合語言的低階知識,的確數次幫我找到很難找的問題
  但這招其實很難得用的出來
    投資報酬率低XD
    不是天天遇到需要看組語的鬼打牆Bug
      If so, 程式碼的品質太差了
    就算鬼打牆,也不一定能從組語看出端倪
從組合語言到除錯

常應用的場合:
  開啟Optimization造成Debugger資訊不完全
  Crash Dump資訊不完全時
  一行Code中有一連串的Function Call,不知道當在那個點

How to learn?
  沒有捷徑
  C++基本功
  Detail knowledge of C++ Compiler
  組合語言基本功
  Also helps in optimization

以「對失效指標物件呼叫Member Function」為例
靠腰,鬼打牆

void CPlayer::IncreaseHP(int iAmount)
{
  // Do a lot of work....
  m_iHP += iAmount; //有人問:當在這行是三小狀況?
}
m_pPlayer->IncreaseHP(10);

  Access Violation
  是m_pPlayer指標錯了嗎?
  那為什麼Call IncreaseHP時不會當?
您懂Access Violation?略懂略懂

 程式什麼時候會當掉?
   Infinity loop, Deadlock, Invalid system call
   最常見的狀況之一: Access Violation(Segmentation Fault)
 何謂Access Violation
   不合法的存取
       讀寫未非法的Segment
       寫入唯讀的Segment
 當物件指標不合法
   pPlayer->IncreaseHP(10);
   如為null,則會讀寫到0附近的位置,造成當機
   怎麼當?何時當?
   為何有時Call Function就會當?有時執行Function Body才
   當?
Non-Virtual Function

m_pPlayer->IncreaseHP(10)

機器碼行為類似這樣
CPlayer::InvokeHP(m_pPlayer, 10);

組語長的像這樣
push 10
push m_pPlayer
call CPlayer::InvokeHP

呼叫時沒有存取m_pPlayer指向之內容!
所以呼叫時不會當機,而當在函數
Virtual Function

m_pPlayer->IncreaseHP(10)

組語行為像這樣
mov eax, m_pPlayer
mov eax, DWORD PTR[eax] #當機
add eax, offset
mov edx, DWORD PTR[eax]

push 10
push m_pPlayer

call edx

Virtual Function在被呼叫物件為null時,必定在呼叫時當機
Inline Function

沒有Function Call! 

m_pPlayer->IncreaseHP(10)
行為其實像
m_pPlayer->m_iHP += 10
Crash when Function Invocation
  假設呼叫了一個IncreaseHP的函式,該函式僅簡單地改
  動一個Member Data

                                                  Non-Virtual Function      Virtual Function
                                                 當在Function中             呼叫時當機
                                Null Pointer     存取Member時
Virtual Function Revisited:
                                                 若Segment被回收,可能 若Segment被回收,可
mov eax, m_pPlayer                               馬上當機。          能馬上當機。
mov eax, DWORD PTR[eax]
add eax, offset                                  否則,視該記憶體位置是             仍有機會完全不當機
mov edx, DWORD PTR[eax]                          否已被其他資料佔用。若             (指向Virtual Pointer
                                                 無的話,則可能(不幸地)            Table的指標沒被動
push 10                       Dangling Pointer   沒有影響。若有的話,則             到)。
push m_pPlayer                                   可能造成資料錯亂。
                                                                         再者,可能在存取
call edx                                                                 VPTable或call function
                                                                         時當機。
m_pGameStage->GetMainPlayer()->GetWeapon()
 ->GetSFX()->GetChannel(2)->SetSpeed(2.0f);
   Access Violation
   Crash Dump資訊不完全
   偶發當機,難以重現
int iDamage = pAttacker->GetDmg() * pAttacker->GetWeapon()->GetDmgBonus()
  / ( pDefender->GetDef() * pDefender->GetArmor()->GetDefBonus() );

.....Orz
結語
核心精神:
  了解你的C++ Code會被編譯成怎樣的機器碼
當Debugger資訊不足,Crash Dump資訊不完全時
  在Register和Assembly中挖掘資訊,以拼湊問題點

夜路走多總會碰到鬼,C++寫多總會弄錯指標
  使用更高階的語言實作High Level Logic?
  讓VM與GC讓你解決這些問題
    但你會碰到其他問題....
Any Question?

Contenu connexe

Tendances

全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版Simen Li
 
COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽Kito Cheng
 
系統程式 -- 第 11 章
系統程式 -- 第 11 章系統程式 -- 第 11 章
系統程式 -- 第 11 章鍾誠 陳鍾誠
 
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)FLASH开发者交流会
 
Android C Library: Bionic 成長計畫
Android C Library: Bionic 成長計畫Android C Library: Bionic 成長計畫
Android C Library: Bionic 成長計畫Kito Cheng
 
系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章鍾誠 陳鍾誠
 
程式人雜誌 -- 2014 年8月號
程式人雜誌 -- 2014 年8月號程式人雜誌 -- 2014 年8月號
程式人雜誌 -- 2014 年8月號鍾誠 陳鍾誠
 
系統程式 -- 第 10 章
系統程式 -- 第 10 章系統程式 -- 第 10 章
系統程式 -- 第 10 章鍾誠 陳鍾誠
 
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMCompiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMLi Hsuan Hung
 
Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門吳錫修 (ShyiShiou Wu)
 
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack FirmwareSimen Li
 
Effective linux.1.(commandline)
Effective linux.1.(commandline)Effective linux.1.(commandline)
Effective linux.1.(commandline)wang hongjiang
 
[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階Simen Li
 
[COSCUP2013] Python, F#, Golang and Friends
[COSCUP2013] Python, F#, Golang and Friends[COSCUP2013] Python, F#, Golang and Friends
[COSCUP2013] Python, F#, Golang and Friendsweijr
 
少年科技人雜誌 2015 年六月
少年科技人雜誌 2015 年六月少年科技人雜誌 2015 年六月
少年科技人雜誌 2015 年六月鍾誠 陳鍾誠
 
Learning python in the motion picture industry by will zhou
Learning python in the motion picture industry   by will zhouLearning python in the motion picture industry   by will zhou
Learning python in the motion picture industry by will zhouWill Zhou
 
Pycontw2013x
Pycontw2013xPycontw2013x
Pycontw2013xweijr
 
Talking about exploit writing
Talking about exploit writingTalking about exploit writing
Talking about exploit writingsbha0909
 

Tendances (19)

全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版
 
COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽
 
系統程式 -- 第 11 章
系統程式 -- 第 11 章系統程式 -- 第 11 章
系統程式 -- 第 11 章
 
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)
 
Android C Library: Bionic 成長計畫
Android C Library: Bionic 成長計畫Android C Library: Bionic 成長計畫
Android C Library: Bionic 成長計畫
 
系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章
 
程式人雜誌 -- 2014 年8月號
程式人雜誌 -- 2014 年8月號程式人雜誌 -- 2014 年8月號
程式人雜誌 -- 2014 年8月號
 
系統程式 -- 第 10 章
系統程式 -- 第 10 章系統程式 -- 第 10 章
系統程式 -- 第 10 章
 
系統程式 -- 第 9 章
系統程式 -- 第 9 章系統程式 -- 第 9 章
系統程式 -- 第 9 章
 
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMCompiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
 
Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門
 
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
 
Effective linux.1.(commandline)
Effective linux.1.(commandline)Effective linux.1.(commandline)
Effective linux.1.(commandline)
 
[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階
 
[COSCUP2013] Python, F#, Golang and Friends
[COSCUP2013] Python, F#, Golang and Friends[COSCUP2013] Python, F#, Golang and Friends
[COSCUP2013] Python, F#, Golang and Friends
 
少年科技人雜誌 2015 年六月
少年科技人雜誌 2015 年六月少年科技人雜誌 2015 年六月
少年科技人雜誌 2015 年六月
 
Learning python in the motion picture industry by will zhou
Learning python in the motion picture industry   by will zhouLearning python in the motion picture industry   by will zhou
Learning python in the motion picture industry by will zhou
 
Pycontw2013x
Pycontw2013xPycontw2013x
Pycontw2013x
 
Talking about exploit writing
Talking about exploit writingTalking about exploit writing
Talking about exploit writing
 

Similaire à Introduction of Reverse Engineering

Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Fred Chien
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Kris Mok
 
Proxmox VE 5.3 Cluster, High Availability & Others [20181223] @集思台大會議中心
Proxmox VE 5.3 Cluster, High Availability & Others [20181223] @集思台大會議中心Proxmox VE 5.3 Cluster, High Availability & Others [20181223] @集思台大會議中心
Proxmox VE 5.3 Cluster, High Availability & Others [20181223] @集思台大會議中心Jason Cheng
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集zhen chen
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)Shanda innovation institute
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)Kris Mok
 
The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)jeffz
 
部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計Leon Chuang
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)
2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)
2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)Simen Li
 
滲透測試基本技巧與經驗分享
滲透測試基本技巧與經驗分享滲透測試基本技巧與經驗分享
滲透測試基本技巧與經驗分享WEI CHIEH CHAO
 
C/C++调试、跟踪及性能分析工具综述
C/C++调试、跟踪及性能分析工具综述C/C++调试、跟踪及性能分析工具综述
C/C++调试、跟踪及性能分析工具综述Xiaozhe Wang
 
Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化Harvey Zhang
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发litaocheng
 
Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalivedcolderboy17
 

Similaire à Introduction of Reverse Engineering (20)

LLVM introduction
LLVM introductionLLVM introduction
LLVM introduction
 
Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 
Proxmox VE 5.3 Cluster, High Availability & Others [20181223] @集思台大會議中心
Proxmox VE 5.3 Cluster, High Availability & Others [20181223] @集思台大會議中心Proxmox VE 5.3 Cluster, High Availability & Others [20181223] @集思台大會議中心
Proxmox VE 5.3 Cluster, High Availability & Others [20181223] @集思台大會議中心
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
 
The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)
 
部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)
2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)
2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)
 
滲透測試基本技巧與經驗分享
滲透測試基本技巧與經驗分享滲透測試基本技巧與經驗分享
滲透測試基本技巧與經驗分享
 
C/C++调试、跟踪及性能分析工具综述
C/C++调试、跟踪及性能分析工具综述C/C++调试、跟踪及性能分析工具综述
C/C++调试、跟踪及性能分析工具综述
 
Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalived
 
Inside VCL
Inside VCLInside VCL
Inside VCL
 

Plus de YC Ling

那些函數語言Tutorial沒有教我的事
那些函數語言Tutorial沒有教我的事那些函數語言Tutorial沒有教我的事
那些函數語言Tutorial沒有教我的事YC Ling
 
淺談Ruby process fork應用
淺談Ruby process fork應用淺談Ruby process fork應用
淺談Ruby process fork應用YC Ling
 
Learn Haskell The Easy Way
Learn Haskell The Easy WayLearn Haskell The Easy Way
Learn Haskell The Easy WayYC Ling
 
[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例YC Ling
 
Lol Programming
Lol ProgrammingLol Programming
Lol ProgrammingYC Ling
 
Lightning Talk: RichRC & Hirb-Unicode
Lightning Talk: RichRC & Hirb-UnicodeLightning Talk: RichRC & Hirb-Unicode
Lightning Talk: RichRC & Hirb-UnicodeYC Ling
 
Learning Ruby with RubyWarrior
Learning Ruby with RubyWarriorLearning Ruby with RubyWarrior
Learning Ruby with RubyWarriorYC Ling
 

Plus de YC Ling (7)

那些函數語言Tutorial沒有教我的事
那些函數語言Tutorial沒有教我的事那些函數語言Tutorial沒有教我的事
那些函數語言Tutorial沒有教我的事
 
淺談Ruby process fork應用
淺談Ruby process fork應用淺談Ruby process fork應用
淺談Ruby process fork應用
 
Learn Haskell The Easy Way
Learn Haskell The Easy WayLearn Haskell The Easy Way
Learn Haskell The Easy Way
 
[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例
 
Lol Programming
Lol ProgrammingLol Programming
Lol Programming
 
Lightning Talk: RichRC & Hirb-Unicode
Lightning Talk: RichRC & Hirb-UnicodeLightning Talk: RichRC & Hirb-Unicode
Lightning Talk: RichRC & Hirb-Unicode
 
Learning Ruby with RubyWarrior
Learning Ruby with RubyWarriorLearning Ruby with RubyWarrior
Learning Ruby with RubyWarrior
 

Introduction of Reverse Engineering