More Related Content
Similar to Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説 (20)
More from Tatsuya Ishikawa (13)
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
- 9. ①君のものは僕のもの
public partial class MainForm : Form
{
ComboBox _comboBox;
string MyFunc(int value)
{
return value.ToString();
}
}
public void YourThingIsMine()
{
var process=
Process.GetProcessesByName("Target")[0];
//友達になると・・・
var app = new WindowsAppFriend(process);
//別プロセスのオブジェクトを
//自分のプロセスのもののように操作できる。
dynamic form = app.Type<Application>().OpenForms[0];
form._comboBox.SelectedIndex = 1;
string ret = form.MyFunc(3);
}
そ、そんな・・・
.Netはもちろん
NativeのDLL公開関数もOK!
- 10. ②僕のものは君のもの
void MyThingIsYours()
{
var process= Process.GetProcessesByName("Target")[0];
var app = new WindowsAppFriend(process);
//自分のコードを動的にインジェクション!
WindowsAppExpander.LoadAssembly(app, GetType().Assembly);
//挿入したコードを相手プロセスで実行
app.Type(GetType()). ForTest();
}
static void ForTest() { /*テスト用*/ }
え!? 勝手に?
- 16. 備考) テスタビリティー操作(自動化と相性悪いコード)
//ここの結合は不安が少ない
void Event(object sender, EventArgs e)
{
EventCore(PointToClient(Control. MousePosition));
}
//これをFriendlyで呼び出す
void EventCore(Point mousePosClient)
{
//ここから先のロジックをテストしたい。
}
プロダクトを変更。
難易度高くて効果の低い
部分は自動化しない。
効果の高い部分のみ
呼び出せるようにする。
・キー、マウス直接参照
・D&D
・OS提供のGUI
etc…
・タイマ
・非同期
・ペイントイベントを利用したトリッキーコード
etc…
- 24. HMODULE Func(LPCWSTR)
{
HMODULE m = nullptr;
return m;
mov rax,qword ptr [rsp]
}
int _tmain(int argc, _TCHAR* argv[])
{
LPTHREAD_START_ROUTINE f = (decltype(f))Func;
auto ret = f(nullptr);
call qword ptr [f]
mov dword ptr [ret],eax
return 0;
}
実験してみました!
戻り値使わなかったら
全く問題なし (゚∀゚;)
HMODULEを戻り値に使っても
レジスタしかつかわない
情報が落ちただけ
- 25. 挿入したDLLのAPIを呼び出し
//自分のプロセスで関数ポインタを取得
IntPtr mod = LoadLibrary(dllPath);
IntPtr proc = GetProcAddress(mod, procName);
//差分を計算
var distance = …;//proc - mod; x64とx86で型が違う
//相手プロセスの中でのDLLのアドレスを取得
IntPtr targetDllAddress;
EnumProcessModules(...)
...
//差分を足したら、対象プロセス内での関数ポインタになる
IntPtr pFunc = …;//targetDllAddress + distance;
//指定の関数を対象プロセスで実行!
CreateRemoteThread(..., pFunc, path, ...);
Init()
初期化開始!
通信サーバー
立ち上げるよー
- 30. お知らせ 登壇予定
9/20 Boost.勉強会 #16 大阪
http://osakaboostjp.doorkeeper.
jp/events/14150
9/11 SQIPシンポジウム
http://www.juse.jp/sqip/symp
osium/timetable/day1/
Editor's Notes
- PrivateでもOK