2011年11月30日 星期三

UML - Extension point in Usecase diagram 說明

甚麼是 Extension point
定義一個使用者案例的例外事件,可以將看它看成一到多個 exception path。以「使用者登入」這個使用這案例來舉例的話,這個使用者案例會有下面幾個extension point:
  1. Invalid Username
  2. Invalid Password
  3. Account has been blocked
而這幾個extension point需要被對應到相對處理的使用者案例
  1. handle invalid username
  2. handle invalid password
  3. handle account block
下面是完整的使用者案例圖,說明了使用者使用「login」這個使用者案例,而這個案例會有三個extension points,而這三個extension points分別有各自的使用者案例處理。


2011年11月24日 星期四

Android aapt 指令應用

Android asset packaging tool 是 aapt 的全名,就像名字一樣這個工具是用來進行 apk (Android package )檔案的管理,最常用到的是當程式開發完成後就會使用它來將所有的 application asset 打包成最後能夠安裝的程式。

除了這個功能之外也可使用來進行 apk 檔案的管理,例如:檔案刪除, 新增, 更新, 取出。
這個工具在進行 reengineering 的時候更是不可或缺的工具,不過現在也有很多開發好的 open source 工具可以使用,像是 apktool。

指令位置
{android-sdk location}/tools/aapt
簡單的使用指令說明

查看使用方式很簡單,只要不帶參數執行便會顯示詳細的使用說明
aapt 

下面來說一下怎樣使用這個程式來進行 apk 的管理,下面只介紹基本的操作其餘參數請自行參照說明,文件執行環境:
  • MAC OSX 10.7.2
  • Android Asset Packaging Tool, v0.2
打包安裝檔

aapt p -v -z -x -u -M {AndroidManifest.xml 檔案位置} -A {asset 目錄位置} -S {res 目錄位置} -F {產生的 apk 儲存路徑包含路徑}

查看檔案內容清單

aapt l -v {apk 檔案完整路徑}
可搭配 grep 快速地查找自己所要的結果


刪除檔案

aapt r -v {apk 檔案完整路徑} {刪除的檔案所在 apk 內的完整路徑,若多檔則使用逗號分隔}

新增檔案
aapt a -v {apk 檔案完整路徑} {所要新增的檔案,若多檔則使用逗號分隔}

更新檔案
aapt r -f -v {apk 檔案完整路徑} {所要新增的檔案,若多檔則使用逗號分隔}


相關聯結
Android developer guide - Building and Running (http://developer.android.com/guide/developing/building/index.html#detailed-build)
Android-apktool (http://code.google.com/p/android-apktool/)


2011年11月23日 星期三

IOS Cocoa Touch Static Library 開發教學

提升軟體開發效率最有效的方式就是建立可重用的元件,基本上只要在一個專案中被重復使用兩次以上的功能都可以被納入元件設計的範圍中,這樣的概念是通用於所有開發語言的。

在IOS的開發中這樣的概念在XCode中就已經有支援了,因此今天這篇文章就使用一個簡單的範例來展示一下如何達到。

開發環境

  1. XCode 4.1 build 4B110
  2. iPhone 4.3 Simulator
下面會使用XCode建立一個 Cocoa Touch Static Library Project 與一個 View-based Application,先建立一個static library然後引入到 view-based application中進行開發使用。

建立靜態元件(Static Library)
建立Cocoa Touch Static Library Project
File > New > New Project > Framework & Library > Cocoa Touch Static Library
(這裡建立的專案名稱為: BikeLibrary)

編輯BikeLibrary.h 加入功能宣告

編輯BikeLibrary.h 並實作功能

選擇目標裝置 iPhone 4.3 Simulator & 編譯 (Product > Build)


建立一個新的資料夾 BikeLibrary 將 libBikeLibrary.a + BikeLibrary.h 複製到目錄中就完成了共用元件的製作。


建立專案並使用靜態元件
建立一個View-based Application Project
File > New > New Project > Application > View-based Application
(這裡建立的專案名稱為: BikeController)

複製靜態元件到專案目錄中


編輯 BikeControllerViewController.h 加入 BikeLibrary.h


編輯 BikeControllerViewController.m 呼叫靜態元件

執行模凝器 iPhone 4.3 Simulator 並且觀察 Output Console 是否正確輸出 debug訊息

Comment 
好的元件設計能夠替開發人員省去寶貴的開發時間,在面臨需求變更與效能調教時也能夠很快速地達成。省下來的時間拿來增進自己的知識或是研究更好的技術這才是根本的解決之道。

2011年11月22日 星期二

MAC 下的解壓縮軟體 The Unarchiver

一直以來我在MAC上都用command在做壓縮跟解壓縮,可能自己也用習慣了也就這樣活到現在。不過今天看到一個很不錯的open source軟體很好用,因此就推一下。

這個軟體可以解壓縮絕大多數的壓縮檔案諸如: Zip, Tar-GZip, Tar-BZip2, RAR, 7-zip, LhA, StuffIt等還有更多。

下載與安裝
在安裝上很方便,你只要打開App Store輸入搜尋 [ The Unarchiver ]然後點選安裝就可以。

使用與設定
使用上也很簡單,只要打開軟體並且設定後就可以直接點選壓縮檔使用了。

Java 反組譯工具 JD 與 JAD

最近接了幾個奇怪的案子,清一色的就是沒有原始碼,看來這是台灣軟體界的抬頭了!畢竟在這十幾年的資訊生涯裡每個專案的原始碼都是在合約中寫明的是屬於甲方的,不過我想專案吧,開發出來的東西我想歸屬於客戶也沒甚麼關係,要改也要有個功力好的人才有辦法做reengineering。

不過接了這些案子但是又需要測試的時候只好進行decompiler了,在java domain有個很棒的好處就是open source的精神,全世界的設計師開發出很多很好用的tool可以快速地達到這點。

Java Decompiler 工具
下面幾個是比較受歡迎的Decompiler tool:
  1. JD 
  2. JAD
試用後發現JD的正確性比較高,不過下面還是針對這兩個Decompiler的安裝與使用方式做一個介紹。

Eclipse plugin installation
我的方式是直接使用eclipse,比較方便也比較快速,我的eclipse version 為 indigo 3.7.1 mac 64x。
兩種Tool在eclipse上的安裝方式都是:
Help -> Install New Software > Add : 然後輸入名字與網址後點選Add。


JD for Eclipse
Name: jd-decompiler
Location: http://java.decompiler.free.fr/jd-eclipse/update

JAD for Eclipse
Name: J2D
Location: http://jadclipse.sf.net/update

Plugin setting
安裝好後必須設定關聯檔案,如此我們可以在IDE裡頭開啟class檔案時直接呼叫Decompiler看到原始碼,設定方式如下。

設定檔案關聯性,將class檔案關聯到decompiler tool。
Open Eclipse > Preferences > General > Editors > File Associations


在右側的 [File types] 中選擇*.class,在下面的[Associated editors] 選擇Add然後:
  1. 如果是想要使用JAD則選擇[Decompiled Class File Viewer]
  2. 如果是想要使用JD的話則選擇[Class File Editor]

Open Eclipse > Preferences > Java > Decompilers

在[Decompiler]右側可以選擇所要使用的Decompiler Tool,
若勾選[Use Eclipse code formmatter (reformats decompiler output.]的話則在decompiler之後會進行原始碼的格式化。

如果使用的是JAD的話需要額外的設定。
Open JAD 右側的
[Path to decompiler] 必須設定jad指令檔的完整路徑
[Directory for temporary files] 若有預設值則不需修改,若無的話你則需要設定一個目錄作暫存用

到此為止設定完成後便可以在eclipse快速度進行decompiler的動作,對於JAD來說有其他的相關設定在[Debug] [Directives] [Formatting] [Misc]中。

2011年11月15日 星期二

Android APK 逆向工程

前言


最近接到了一個神奇的Android App開發專案,也就是沒有原始碼的使用者介面修改專案。
這也看出了現在台灣Mobile專案開發的火熱程度{企業竟然接受了不包含SOURCE CODE}的開發條件,一點點的心得感想。


甚麼是APK
APK (全名Android Package)是利用ZIP的壓縮技術將所有軟體執行所需要的檔案打包成一個安裝包裹,如果解開的話會看到這幾個主要的部分:
    1. XML File:Android 的View與Global軟體設定檔
    2. Classes.dex:編譯過的原始碼,若使用apktools作解壓縮的話產生的所有的原始碼會被解開成smali,smali檔案是dalvik的assemble檔案。
逆向工程的開始
我們透過幾個簡單的方式記型逆向工程
  1. 使用ZIP解壓縮APK檔案,以取出classes.dex
  2. 使用APKTOOL解壓縮APK取出XML File
  3. 使用JD-GUI反解譯class assemble
  4. 建立新的Android Project將XML File與classes放進新的專案
  5. 完成逆向

Content Reference

@開始

一個星期過去了,開始的進度太慢。
這是執行力的問題,忙東忙西的! 當然也包括自己思考太多降低了很多事情的完成線。

一個下雨的傍晚,是傍晚、是冬天的傍晚。