2016年3月15日火曜日

C# BackgroundWorkerでClipboardを使うときはInvoke

これは全くゲーム関係ない事です・・。

ロリポップ!レンタルサーバ

めも

スレッド中からクリップボードを操作するとき

            Dispatcher.Invoke(new Action(() =>
            {
                System.Windows.Forms.Clipboard.SetText(data);
            }));

スレッド中からはUIがいじれないのと同様に

クリップボードも弄れないのでinvokeして使いました。

検索したら英語のサイトしかなかったので、めも程度に残します。


クリップボードって1個だけしかないのね、ハードに近いオブジェクトなのかな・・?

仕組みによっては、退避処理つくらないとバグになりそうな感じ



C#簡単で生産性が高くていい感じですね(・ω・)とか偉そうに言ってみる。


何で急にクリップボードの話になったかというと、スマホに文字入力しようとして困ったからです

adb で全角入力まで対応する場合、スマホ側に受け手になるサービスを作りこまないといけないらしく

androidまで作りたくなかったので、C#からのコピペで対応しました

ロリポップ!レンタルサーバ

実機をマクロ化(android)シェルを使うバージョン

スマホにシェルを置いてマクロ化する方法です。
まずはシェルの準備。

ロリポップ!レンタルサーバ

○使うもの

Android携帯
PC
USBケーブル
adb.exe

○やること
前準備        ・・・環境を整える
シェル作成の調査 ・・・シェルを作るためにスマホのログを調査
シェル作成     ・・・シェルを作成


○手順
--------------
●前準備

1.adb.exeを入手(AndroidSDKの中に入ってます。)

2.USBデバッグをONにする方法をぐぐって調べる。

3.マクロ確認用に、スマホに絵をかくスマホアプリをインストール
  私は「スケッチ」をつかってます。
  https://play.google.com/store/apps/details?id=com.sonymobile.sketch&hl=ja


●自分のスマホ用に、シェルを作るための調査

1.USBでPCとスマホを繋ぎます。

2.USBデバッグを許可します。

3.コマンドプロンプトを起動
  (windowsキー + Rキー → cmd → OK押下)

4.adbで接続確認「adb devices」


6.スマホでお絵かきアプリを立ち上げる
7.コマンドプロンプトで、スマホのイベントログをとる
  「adb shell getevent /dev/input/event0

8.スマホのお絵かきアプリ上で、タップ
9.コマンドプロンプト上にログが流れなかったら、「ctrlキー + Cキー」で、停止して
  7.へ戻って、event1、event2、event3、、と調べていく。

10.ログが流れたらeventの何番だったかメモメモ(上記だとevent1です)


●自分用のシェルの作成

1.PCのテキストでシェルを作ります。

ファイル名:tap.sh(名前何でもいいです。event1の番号を端末にあわせて変更)
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 3 57 0
sendevent /dev/input/event1 3 55 0
sendevent /dev/input/event1 3 53 $1
sendevent /dev/input/event1 3 54 $2
sendevent /dev/input/event1 3 58 53
sendevent /dev/input/event1 0 2 0
sendevent /dev/input/event1 0 0 0
/system/bin/sleep $5
sendevent /dev/input/event1 3 57 0
sendevent /dev/input/event1 3 55 0
sendevent /dev/input/event1 3 53 $3
sendevent /dev/input/event1 3 54 $4
sendevent /dev/input/event1 3 58 53
sendevent /dev/input/event1 0 2 0
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 0 2 0
sendevent /dev/input/event1 0 0 0

2.adbで接続して適当なフォルダにプッシュします。
   今回の例は/sdcard/downloadにプッシュ
  (追記:3月23日うまく動かない場合はスマホ側で、ファイルを作成しなおしてみてください。PC側で作ってからプッシュだと、文字コードとか改行コードとかが怪しいような感じだったので追記しました。

   tap.shを保存したフォルダで「adb push tap.sh /sdcard/download」
   

13.シェルのテスト

   スマホにお絵かきアプリが立ち上がった状態で
   「adb shell sh /sdcard/download/tap.sh 500 500 400 400 1」
                            引数は、[X1 Y1 X2 Y2 秒]、
   線が引けるはずです。

もし動かない場合は、イベントログを見て、シェルを修正する必要があります。
イベントログは16進で書いてあるので、シェルに書くときは10進にしてください。

---------------------

白猫だと
「adb shell sh /sdcard/download/tap.sh 500 700 700 500 1」とかで
スキル1が発動すると思います。
意味は、座標(500,700)で1秒長押しして、座標(700,500)までスワイプです。
                     (長押し、右斜め上方向にスワイプ)
「adb shell sh /sdcard/download/tap.sh 500 500 500 500 1」とかで長押し(ガードとか)になります。
「adb shell input tap 500 500」 こっちはタップ(攻撃とか)(標準で用意されてるコマンド)


ここまでできればあとはキックするプログラムかスクリプトを組めばOKです。


ロリポップ!レンタルサーバ

2016年3月3日木曜日

アンドロイドのマクロはシェルが良さそう(adb 長押し スワイプ いろいろ操作)

いろいろやってみたけど

アンドロイドのマクロはシェルが楽でした。

スマホのsdcardのdownloadに入れて、起動する感じです。


例えば、タップの長押しとかは(べた書きですが)
longpress.sh

sendevent /dev/input/event7 1 330 1
sendevent /dev/input/event7 3 58 1
sendevent /dev/input/event7 3 53 $1
sendevent /dev/input/event7 3 54 $2
sendevent /dev/input/event7 0 2 0
sendevent /dev/input/event7 0 0 0
sleep 1
sendevent /dev/input/event7 1 330 0
sendevent /dev/input/event7 3 58 0
sendevent /dev/input/event7 3 53 $1
sendevent /dev/input/event7 3 54 $2
sendevent /dev/input/event7 0 2 0
sendevent /dev/input/event7 0 0 0

とかにして、同様に何個か必要な動きを作っておいて
メインのシェルで呼び出す感じです。
$1はx座標
$2はy座標
2か所あるのは、1点目と2点目。2個めの$1と$2を$3を$4にすればスワイプになる。

※event7 の 7 は端末によって違うので
adb shell getevent /dev/input/event●


●の数字を0~順に見てタップして、何番目が該当するか調べます。


プニこん専用のシェルも何個かつくって配置して、メインのシェルを書けばOKですね^^

IPとポート指定でADBでキックする場合は
adb -s [IP:port] shell [作ったシェルのパス] [x座標] [y座標]
 例: adb -s 192.168.12.105 shell /sdcard/Download/longpress.sh 100 200
シェルに実行権限をつけてもたぶん大丈夫です。キック方法は好きなやり方でOKです。

まとまったらアップします。
今度はアーカイブじゃなくてテキストファイルなので、
ダウンロードサイトは使わずに、ブログにペタペタ張ります。



余談ですが、既存のコマンドの一部は、DalvikVMを再利用しない作りになってるらしいです。
VMを再利用するように直すといろいろスムーズになるかもしれませんね。

最後に使ったアクティビティを調べるシェルは
aaaa.shとか適当な名前で保存して
logcat -b events -d | grep am_create_activity | tail -n 1

こんな感じ、tailもgrepも使えるから素敵(・ω・)xargsとかもあればよかったけど無いポイね


追記:3/14
xargs無いな~と思ってたら、AndroidTerminalEmulatorというスマホアプリを入れたら普通に使えました^-^
wgetもあったので、何でもインストールできそうと思い
とりあえずgccのインストールを試みたのですがうまくいかず、試行錯誤しています。

私的にはimagemagickあたりが使えればメチャ便利なので、なんとかコンパイル環境を整えたいです。

ゲームやってただけのはずがなぜかどんどん深みにはまっていくこの感じ(・ω・)

C#とadbでコツコツとツールを作って
指定した画像をクリックしたりするマクロファイルを生成ツールも作ってあるのです。
(でもこれは、シェルをスマホ側に置かないといけないので生理的に配布できないのでした。)
シェルで作ったのはスクリーンショットを取ることと、長押し、スワイプ
C#で作ったのはシェルキックする機能と、ローカル画像とスクショを比較する機能。
画像比較してる部分をスマホ側に移植するためにImageMagickを使いたくなって
コンパイル環境を整えるところで今止まってます。

2016年2月29日月曜日

ゲームのパケットを見る準備①シンプルなhttpプロキシ


ロリポップ!レンタルサーバ


使うもの
VS


とりあえず叩き台のソースを拾ってきました。
プロキシサーバモドキ
(参考(英語):http://times.imkrisna.com/2011/08/simple-http-proxy-server-c-source-code/

やり方
参考URL先のソースをコピペしてコンパイルして起動させて、端末側のプロキシの設定をする。


結果

中継させたため、通常の状態と比べてロード時間が長くなりました。

とりあえず、
協力バトルとかでロード時間がやたら遅い人がいたら、チータの可能性が高いです。



ClientConnectionクラスのHandlerメソッドで
Httpリクエストを作り直して、投げて、戻ってきたレスポンスをクライアントに中継して投げています。

この仕組みでゲームは動くけどgoogleはsorryっての返してきます。
文字列加工して投げてるだけだと嫌みたいですね。


ロリポップ!レンタルサーバ

TechAcademy [テックアカデミー]

バグで困ったときは【teratail】に相談!

2016年2月22日月曜日

Windows10 で、デコの流れ(dll→il→dll→署名→インストール→稼働)

使ったもの

VS ・・・ dllをilに、ilをdllにするのに使う。インジェクションのDLL作るのにも使う
(ilasm.exeは、開発者コマンドプロンプトを開くとパスが通ったけど、実際どこにあるか見つけられなかった。)


ロリポップ!レンタルサーバ

やったこと

スマホに対象となるゲームをインストる。

ESで、ゲームをバックアップしてSDカードに保存

どうにかしてPCに転送。



PCに転送したアーカイブを7-zipで開く

アセットの中にある、いじりたいDLLを、ildasm.exeで開いて、ilにダンプする。


dllに戻すときは、VSの開発者コマンドプロンプトを開くとパスが通るので

このコマンドプロンプトからilasm.exeを使ってdllに戻す。


スマホに転送してインストール。(動くかわからない、署名ってどうなるんだろ)




こんな流れなのかな?



やってみた結果

dll 抜く、ilに変換、dllに戻す、アーカイブに突っ込む、スマホに転送

インストールできませんでした。



jarsignerで署名見るとわかりますが、消えてます。

再署名するにはマニュフェストとか消して署名つっこめばいいけど・・どうなのかな。


進展あったら追記します。



ロリポップ!レンタルサーバ

追記:
署名したらインストールできました。


稼働も確認できたのでOKとします。

署名がかわるので、運営が更新してもこっちは更新はいらなくなります。



あとは、運営側が非正規アーカイブをどう判定してるかを見て回避すれば大丈夫そうですね。

パケットでみた情報をヒントに探すとしたら

クエストジェネレートしてるとこと、コンプリートしてるとこ、あと圧縮解凍、暗号のところらへんを見れば良さそう。

アカ規制回の方は
デジタル署名のチェックか、インストール時リファラのチェックやってると思うのでソースを解析するか、
サーバーをたてておいて、不正だよって伝えるパケットをカットする方法になるのかな。



どのみちいろんなゲームやるし、使えそうなプロキシライブラリを探します。

FidderCoreってのを見つけたのですが非商用ライセンスが無かったです。勉強には使えそうです。


調べたけっかですが
どの言語でもURLを分解して投げなおせばプロキシもどきとして使えるみたいですね。
httpクライアントのある適当な言語で自分の好きなように作るのがよさそうです。

と思ったら、シンプルなHTTPproxyモドキで処理した場合、ゲームも動くし見た目は問題なかったのですがgoogleに何やってるのって叱られました。

(追記:fiddler4でも同じの出たから、ゲーム側には影響しないにしても、回避できないのかも。)



とりあえず次はfiddlerCore遊んでます。

fiddlerCoreを使う場合は以下の3個を登録しとけばよさそうでした。
            Fiddler.FiddlerApplication.BeforeRequest
                        += new Fiddler.SessionStateHandler(リクエスト中継前にしたい処理);
            Fiddler.FiddlerApplication.BeforeResponse
                        += new Fiddler.SessionStateHandler(レスポンス中継前にしたい処理);
            Fiddler.FiddlerApplication.AfterSessionComplete
                        += new Fiddler.SessionStateHandler(レスポンス中継後にしたい処理);

リクエストの握り潰し、レスポンスの改ざん、結果の確認、何ができるかいろいろ考えられますね。


追記:3月15日
smaliというのを見つけました。
https://translate.google.co.jp/translate?hl=ja&sl=en&tl=ja&u=https%3A%2F%2Fbitbucket.org%2FJesusFreke%2Fsmali%2Fdownloads&anno=2

java側の改造はこっちでやってる人が多いみたいで情報が結構おちてますね。

java -Xmx1G -jar baksmali.jar classes.dex
でoutフォルダに展開されるので、ごにょごにょ弄って
java -jar smali.jar -o classes.dex out/
で戻してあげればできあがりみたい。

ロリポップ!レンタルサーバ

2016年2月21日日曜日

白猫のパケット

ソースの見方

必要な物:
java
jad → jd-gui
ILspy
adb
tcpdump → fiddler4

ロリポップ!レンタルサーバ

手順:

adbとtcpdunmでパケットのログを取って
パラメータに何が必要かなどを調べて、javaとC#の中を探す
 javaは、jarコマンドでapkを展開、jadで、javaを復元して見る。
 C#は、jarコマンドで展開されたフォルダ内の、assetsフォルダ内のdllをILspyで見る。
(ソースをいきなりみても追うのが大変だから先にパケットを見るという順番)

---------

初回起動時(リクエストのみ)
/ajax/regist/create
(この応答まではSO中のカギで読めると思う。この後は差し替えてから読む)


起動時のパケット概要(リクエストのみ)

registチェック
デフォルト装備
バージョン
世界のリスト
エリアリスト
loginbonus
再びバージョン
クエストリスト


クエスト開始~討伐完了までのパケット概要(リクエストのみ)

バージョン
クエストジェネレータ
再びバージョン
クエストコンプリート

ロリポップ!レンタルサーバ


パラメータに連結されていく文字列がわかればクエストはパケ投げクリアできるのかな。
ソースの見当は、 NetworkManagerでキーの名前持ってるのでこの辺りを読めばよさそうです。違うかな。
パケ投げでクリアするときは即クリじゃなくて、手動と同じ速度にしたほうが無難かもしれません。
あと、念のため白猫が更新されるたびにパケット解析したほうがいいです。


あ。でも、パケ投げする方法は反対です。


マクロ中からパケットを見て何かの判定として使うならいいけど
パケット投げるのってあるいみ攻撃なので本当やめたほうがいいです。


追記:
バージョンをキックしてるのはクッキーのチェックぽいのかな。

クッキーは、ゲームのキャシュ消しても変わらなかったから
おそらく固有の値ぽく、これは変更不可能なのかもしれない。
でも、ライフサイクルどうなってるんだろ。


あと、クエスト開始~コンプリートまで
初回のクエストジェネレータキックからコンプリートキックまでの間
ローカルやりたい放題に見えた。
箱開け、敵全滅やりたいほうだいやって、コンプリートキックとか。

ここで輝くハイジャック(・ω・)

ロリポップ!レンタルサーバ


追記:3月31日

ILSPYでNetworkManagerを見ると、IEnumeratorのメソッドがたくさんあり
見たことがなかったので少ししらべてみたところIteratorパターンでいうところの反復子にあたる部分だということがわかりました。
集合体にあたるのがEnumerableです。

ILSPYでの表示をilに切り替えると、NetworkManagerにあるIteratorが何かわかります。
Request_ImplとRequestCoroutineのMoveNextで、DecryptとEncryptしてます。
(うーん、Enumerableはイテレータってだけじゃなさそう。startで呼ばれてるから・・タスクとかスレッド?かな?httpのやりとりを貯めてって、必要がある時にmovenextで順に使ってく感じかもしれない。)
さらにたどっていくと、 RijndaelManagedが使われていることがわかりました。

余談ですが、ilのcallとcallvirtの違いは、インタフェースを実装したメソッドを呼ぶときcallvirtになるみたい
callのほうが最適化が積極的にされてるらしく、できるだけilがcallになるようなコーディングが好ましいっぽくどっかにかいてあった。とはいえC#の話であってUnityの事じゃないです。

あと、httpリクエストは一般的にはキックすると生で提供してはこず、こちらからのリクエストヘッダーを見て、対応できる形式で圧縮した状態でレスを返してきます。
なので、いちおうソース中でさがしてみましたZlibが使われてるようでした。

何を使ってるかわかったので、APIをみて使い方を調べて見ます。
サーバー立てるまでもなく、経由させればOKかも。

ここまでのまとめ。

パケットを見て、ヒントを得る。今回のヒントはトークンキーの名前。
ソース中をグレップして位置を特定。今回はNetworkManager。
何をしてるか見て、何を使うか決める。今回はRijndaelManaged、Zlib。
APIを見て使い方を調べて、必要な値をソース中から探す。

ロリポップ!レンタルサーバ



追記:4月4日

RijndaelManagedのAPIを見るとIVKEYが必要であることがわかりました。
ソース中を探すと、その2つがSOの中にあることがわかったので
IDA」のフリー版を落としてきて開いてみると、こんな感じで呼び出していたラベルがあるので


それ以降に記述してあるアセンブラを読むと戻り値がわかると思います。
アセンブラと聞くと腰が引けるかもしれませんがニーモニックは超簡単です。
慣れれば簡単な処理ならマシン語のままでも読めちゃいます。


現状、インストールしてあるものは
7-zip、IDA、VS、ILSpy、java、adb
あと、なんちゃってプロクシ(fidder4は使ってなくって、C#のなんちゃってプロクシを使ってます)

見たものはパケット(httpヘッダー、ボディ)→トークンキーの名前を発見
C#とILをトークンキーでグレップ→通信するためのクラスを発見
C#とILを読む→何を用いてるか発見
用いる物のAPIをチェック→KEYとIVが必要な事を発見
ILを読む→SOをキックしてることを発見
SOをIDAで開いてニーモニックを確認 ^-^ 
読まなくても、SOのラベルわかってるからキックすればいいのかもしれない。

気になるのは変数に入ってなければSOの値を使うぽくなってる。なんだろう。
(追記:インストールしたてで起動したときのパケットでカギがさし変わる仕組みらしい)
プロクシモドキのソースに手を加えて試してみます。
C#で作ってあるので、復元したソースのメソッドコピペで流用できちゃうのがいい感じ。dllも使える。

一般人にとってVSは本当に心強い味方(・ω・)
ま、きっと何やってるかわかればエクセルでもできちゃうんでしょう。

自分で自分のセッションハイジャックまであと少しかも・・?
(あ、パケ投げは攻撃だから駄目ですよ!あくまでも見るだけですよ!)

ロリポップ!レンタルサーバ

追記:4月7日
SO中の16進をUTF8にした文字列でググルと
「新規」か「機種変更」のときのパケットで初回の鍵がユーザ固有の鍵にさしかわるって書いてありました。



代表的なアーキやパターンを知ってればC#のソースを見て内部的に呼ばれる関数なども読み取れるのかもしれませんね。
あまり大きいソースを見たことが無かったのでいろいろ勉強になりました。



パケット復元の仕方のまとめ

C#で作る場合、apk中のzlibとjsonのdllを参照したプロジェクトを作成して
プロクシモドキを作って経由させてあげればOKぽいです。
レスポンスはdll中の関数をキックするメソッドで解凍できました。コピペメソッドです。
・・・ゲームソース中のメソッドを丸ごとコピペして使います
(必要そうなのは複合・暗号・圧縮・解凍あたり)
コピペコピペコピペ(・ω・)
ポストを見たい場合はunscapeしないとデコードできないので気を付けてね。
json中の\uで始まる16進むはUTF-16で復元できます。

SO中のカギで読めるレスポンスの中のjsonに差し替えのカギが入ってるので
まず、レスポンス中でcharset=UTF-8のパケットをデコードしてテキストに出力して読みます。
で、json中から新しいカギを見つけて、差し替えてから後々のパケットが読めるようになります。
(uhってuser hashの略かな?だとするとユーザ単位ってのはありえますね)

ロリポップ!レンタルサーバ


次は
復元した受信のパケットを、いじってクライアントに読み込ませてみます。

試したい事は
敵とか木箱とか宝を増やしたり減らしたりできるかどうか。
敵のレベルとか下げれるとクリア簡単になるかな?
まずはパラメータの調査からですねl。

2016年2月15日月曜日

白猫 マクロ作成ツール Ver 0.0.0.1

ROOT化不要でマクロ化、連戦マクロ作成用です。

雛形のソースに指示の記述を挿入するだけなんだけど、これがあると便利。

えと、方角がわかりやすいようにM0~M19の方位図も表示してみました。
今のところ使い道は無いですが、ビーム回転の指示もあります。
これをつかってマップに対応したファイルを作っていこうと思います。


下記にツールの説明を記述します。

Keep Trying [ぷにこん専用]


こんな仕様にしました。

◎使う前の準備
・PCにアンドロイドの画面を表示させます。
 Genymotion、Bluestacks、Xamarin Android Playerなどのエミュ
 もしくは、Vysor、TeamViewerなどのリモートを使用など、何でもOK
 (TeamViewerでやるのが一番簡単だったかも。)


・次に、白猫を起動し、画像を保存します。(端末の枠を含む事)

 クエスト終了後の報酬画面→BASE.bmpという名前で保存。どのクエ終了後のでもOK
                                  画面の位置やサイズの情報に使います。



・次に、設定変更です。
   カメラの回転=無し、ターゲットへ向く=無し、初期カメラ位置=遠い、スキルカットイン=無し


あとは、ツールのテキストエリアに指示を書いてSTARTです。

例えば銀狸BOSSマップであれば、キャラの強さにもよりますが、指示の記述は
M18-2000
S1
の2行で回せます。

M18-2000は、左ななめ上方向に2000ミリ秒進む。
S1はスキル1を使う。

あとは、自動的に再挑戦を繰り返します。

ロリポップ!レンタルサーバ

銀たぬきマップの動画


赤のルーン集めの動画



ロリポップ!レンタルサーバ



個人的にはTeamViewerでやるのが簡単でした。
----------
TeamViewerでやる場合は

PCにTeamViewerをインストール
スマホにQuickSupportというアプリを入れるだけです。
(※追記:2016/03/09 iphoneだと遠隔操作できません。Vennyなどを使ってスマホにVNCサーバを導入してください。)


例えば、スマホを部室で充電したまま、自宅のpcから操作でき、連戦できます。


下記は、TeamViewerで自動化した場合の実機側の動画です。
セオリが無人で連戦しているところ。


別途ページを設けました。 → ツール概要とダウンロード
にわかの私が作ったツールに興味を持っていただきありがとうございます。


開幕OKボタンがあれば押すという処理を追加しました。
あと、1回転のビーム使ってみました^^;、算数が苦手なのでひし形を描くように動かしてます。


2016年2月12日金曜日

実機をマクロでボット化する方法

前回までに

Vysorを使ってスマホ端末をPC画面上に表示してGUIベースでBOT化したり
ADB接続を使ってCUIベースでのBOT化をしました。


Vysorを使ってBOT化した場合、ラグや画像の乱れなどがありちょっと難がありました。

ADB接続をつかったBOTの場合はもラグがあり、それらをクリアするためには
スマホ端末側にイベント受け口になるコマンドの配置が必要でした。



えと、今日はTeamViewerというツールを使っての操作です。
けっこう有名なソフトだと思いますが、なんとスマホの遠隔操作に対応していました。


やり方は
まず、PCに「TeamViewer」をインストールします。(無料版でOK)
次にスマホに
「QuickSupport」をインストールします。

これで準備完了。

あとは、PC側のTeamViewerから、スマホのQuickSupportに接続すれば
スマホを遠隔操作できます。
(※追記:2016/03/09 iphoneだと遠隔操作できません。Vennyなどを使ってスマホにVNCサーバを導入してください。)


PCにスマホの画面を表示して、操作する方法としては

これが一番簡単だと思いました。

USBケーブルもいらないし
ADBもJAVAもいらない
ROOT化もいらない

ADBを内部で使ってるツールによるリモート操作だとキックするレイヤがいまいち謎だったけどTeamViewerでの操作の場合、スマホ側からみるとハードウェアマクロになるのかな。

画面タップがハードウェア的に操作できるってことは
運営側からしたらBOTなのか人なのか見分けがつかないですよね。


ということで、実機をBOT化する場合はTeamViewerを使うことにしました。


仮想端末も実機端末もBOTマクロは同じソースでできるので、ほぼほぼ完結です。
あとは設定をしやすいように、BOTマクロ生成ツールを作っていきます。

マクロの雛形作成は完了で
次は、マクロ生成ツールの設計です。


追記:3月16日
TeamViewerのSDKについて、質問を投げてみたところ返信がもらえたので追記します。

このSDKを使って開発すればiphoneのリモート操作できますかという問いに対する返答は

「SDKを使えばTeamViewerからiPhoneのアプリ内(SDKをご利用して開発したアプリ)の遠隔操作が可能です。
完全なiPhoneの遠隔操作ではなく、そのアプリ内のみの遠隔操作になります。」

ということでした。アプリ内のみの遠隔操作だそうです・・、工夫できそうなのかな。
開発者の方ためしてみてください。

2016年2月10日水曜日

白猫 自動化の時短ツールを作ってみた

UWSCのツールはなんとなくできたので

次はADBのバッチ処理書きはじめたのですが

書くのがめんどくさくなってきたのでツールを作りました。



M1_1 で1秒上に向かう
S1 でスキル1を使う

とか、簡易的に記述できるようにツールです。

テキストに指示を保存して読み込んでスタートで指定回数実行します。


白猫だけじゃなくて何でも使えるけど
ぷにこんの操作に特化した仕様になってます。
命令数が少ないので直観的に扱えるかと思います。

①のタップ位置はデフォルトのままで大丈夫です。
②の指示は、命令を改行しながら書きます。

移動・・・M[1~20]-秒数:M1=上, M2=真上のM1よりちょっと右, M3= M2よりちょっと右・・・・略
スキル・・・S[1~3]:スキル使用
タップ・・・T-回数:タップ(攻撃とか、ボタン押下とか)
待機・・・W-秒数:時間調整用の待機

キャラの移動は運だけど、クリア確率の高いコースを歩かせれば良いと思います。
壁にあてたりしてキャラの位置補正のできるコース選びが重要になります。


最初は、プレゼントクエストの銀狸BOSSマップで
再挑戦LOOP作って慣れてから違うマップで使っていく感じです。

ロリポップ!レンタルサーバ


余談ですが
スマホ端末の中にあるinputをcatで開いて中身を見てみました。
うーん、スマホ側にコマンド作れそうですね。

/system/bin
このフォルダにあって、adb shell できっくできるのは
ls /system/bin | grep shell で調べられます。
けっこうたくさんありました。何ができるんだろう?

迷走しはじめたので、明日は山登りに行ってきます。


追記:2/11
http://blog.kotemaru.org/2014/04/02/android-ndk-setup.html
Androidで実行可能なバイナリの作り方の参考URL
http://techblog.qoncept.jp/?p=397
ラグが気になるのでスマホ側にコマンドを突っ込むのがベストぽいですね。


という事で、今回のツールは端末にコマンド配置してもいいよって人しか使えなくなりました。

ちなみにsendeventをcatしてしまい、久しぶりに冷や汗が出ました。
バイナリなのでcatしないように気を付けて下さいね^^;

水曜日 ルーン集めボット

水曜日のクエストマップを追加しました。


コッペリアで1週140秒くらいです。

水槽の水替えをしてる間、稼働させてたら15週できました。

ロリポップ!レンタルサーバ

2016年2月9日火曜日

白猫プロジェクト 実機をUSB経由でPCから操作

ロリポップ!レンタルサーバ 

USB経由で実機を操作するには以下が必要になります。

javaSDK → http://www.oracle.com/technetwork/java/javase/downloads/index.html
AndroidSDK → http://developer.android.com/sdk/index.html

が必要で、パスを通したりしないといけません。
パスを通すというのは
PCに対して「ファイルはここにあるよ」って事を、環境変数に書くことです。

http://andmem.blogspot.jp/2014/04/installjdkandroidsdkadb.html
ここがわかりやすかったです。


JavaSDKとAndroidSDKの準備ができましたか?


次は、

スマホ操作して、USBデバッグができるようにします。
http://andmem.blogspot.jp/2012/10/androiddebugmode.html



PCとスマホをUSBケーブルでつなぎます。

PCのコマンドプロンプトを開いて

java -versionを入力してエンタ→バージョン情報が表示されればOK
adb devicesを入力してエンタ→ successfullyが表示されればOK

出ない場合はパスが通ってない可能性があります。
PATHを入力してエンタ→表示されているパス中にJAVAのフォルダとAndroidのフォルダが正しく書いてあるか確認し、違う場合は直して下さい。


--------------
やっと、実機にコマンドを送れます!

参考URLです。
http://techblog.qoncept.jp/?p=356


-------------
初めて作る時は

銀狸BOSSが出てくるやつ、あれの再挑戦ループを作ると簡単だと思います。
友情覚醒したいキャラを連れて何回かLOOPするやつ。

工夫できる点としては
どの端末でも使えるように
画面サイズを取得してタップする座標位置を計算する仕様にすればOKです。

工夫する点の実装方法
 adb shell getprop
 このコマンドで端末情報が大量にとれます。
 パイプ知ってます?私はパイプ大好きです(笑)
 adb shell getprop | findstr display
 (getpropで取れた文字列のなかから、displayという文字列を含む行を出力。)
 これだと3行でるので必要な物をさらに絞る

処理概要

INIT:画面サイズ取得、タップ基準位置決定
①銀狸まで一直線に進む
②タップして攻撃(数秒間)
③再挑戦ボタン位置をタップ(数秒間)
④再挑戦しますか→はいボタンの位置をタップ(数秒間)
⑤40秒待機
①へ戻る

ロリポップ!レンタルサーバ 

実機をPCに表示して操作してみました。

Vysorでトライしたのですがうまくできなかったので、他のを探してみました。

DOCOMOのMobizen (2016/3月末でサービス終了)
http://android.f-tools.net/Mobizen/mobizen-Tukaikata.html

ドコモのなので性能よさそうだなーと思いましたが、来月で終わってしまうので、微妙かな。



ロリポップ!レンタルサーバ 

探していたら、MirrorGoというのがありました。

有料だとWifiで接続できるみたいですね
でもUSB接続でやる予定なので無料版でやります。

無料版だと毎週30分だけしかできない・・・(汗)


まぁいっか!!!ゲームにお金かけたくないので無料版を使います!


えと、

仮想1台とMirrorGo1台の計2台を立ち上げて

MirrorGoではメイン垢、仮想ではサブ垢

①サブ垢(仮想)で助っ人募集
②メイン垢(MirrorGo)は協力→③MirrorGo切断→④クエ時にMirrorGo接続→①へ

操作が必要な時だけMirrorGoに接続するパターン。このループなら週30分で十分かな?


う~ん、このLOOPなら画面をわざわざ表示しなくてもよさそう。

という事で、さよなら実機画面、USB経由でコマンド送ります。
やり方はバッチファイル作って現状のツールからキックです。

とりあえず、ゲーム起動時に、コマンド受け付けてくれるか実験してみます。


ロリポップ!レンタルサーバ 

火曜日のルーン集め ボット

火曜日のルーン集めを追加しました。


ロリポップ!レンタルサーバ 


たまたまコッペリアを引き当てたのですが
コッペリアほどボット向きのキャラは居ないな~と思いました。
運がよかったです^^


えと、アンドロイドの白ロムが手に入ったので
「Vysor」を使ってボットのテストも並行して行ってこうと思います。
ロリポップ!レンタルサーバ 

2016年2月8日月曜日

月曜日 ルーン集め ボット 試作

前回のブログで書いたような構成でソースを作りなおしました。


クエスト用のテンプレートソースがあるので新規追加が楽ちんです。

なので、根気があれば全マップ、2人協力、4人協力、どれも作れます。



今日は「月曜日のルーン集め」のソースを作りました。

ロリポップ!レンタルサーバ 

①プレイして、マップを確認

②キャラ位置がなるべく保てる方法 → 助っ人に倒してもらう
③キャラをどの壁にぶつけるか考える

出来上がったソースで動かした動画は以下になります。



動画は、2週目まで撮ったものです。


「Vysor」というのでPCに実機画面を表示してキャラ操作も可能ですが
白ロムもってないので、手に入れたらそちらでも実行確認をしてみようと思います。

2016年2月7日日曜日

白猫ボットの設計①

白猫のボットを2個試作してみて

ソース構成と仕様がなんとなく定まってきたのでアップします。


ロリポップ!レンタルサーバ 


ソース構成は下記の計10本になります。
 メインとなるソース 1本
 INIファイルを作るソース 1本
 各種クエストのソース(ソウルラッシュ、各曜日) 8本


処理の流れは下記のようになります。



INIファイルに、ゲームの画面の位置、ゲーム画面のサイズ、キャラ速度など環境依存となる値
各種、グローバル的に使いたい値などを保持をさせ

各クエストの処理の最初にINIファイルを読み込んで使用する形にしました。

クエストのソースをコピーしてWhile-Wendの間を書き換えればどのマップにも使えます。



今のところはこんな感じです。

協力用に0~9のボタン押下などのソースも徐々に追加していこうと思います。
う~ん、でも、働く無人キャラの需要って、複アカの人だけかな。


ロリポップ!レンタルサーバ 


追記:2月17日
UWSCのソースはメイン処理の1本にしました。
新しい処理概要↓

UWSCでボット作る時のコツ(座標編)

UWSCでBOTを作る時ですが

作る人によって座標の指定方法がマチマチだと思います。


ロリポップ!レンタルサーバ 


私は、このやり方がベスト!というのがあるので記載します。
この方法だとどの端末に移植してもそのままBOTが使えます。

それは、ゲーム画面の位置を変数として保持しておき
ゲーム画面に対するクリック位置などの座標は相対座標で指定する仕組みにする事です。

(ソース例)
// ゲーム画面の位置
public W_POS_X
W_POS_X = STATUS(W_ID,ST_X)
public W_POS_Y
W_POS_Y = STATUS(W_ID,ST_Y)
print "画面の位置:" + W_POS_X + "," + W_POS_Y

(説明の画像)

w_pos_xとw_pos_yがあれば
GAME画面に対しての相対座標+w_pos_x,yで画面の絶対座標での指定になる事ができます。

わかりにくいかもしれませんが

BOTを作る時はUWSC機能の相対座標は使わずに
自分で相対座標指定の仕組みを作っておく事です。

もしかしたら私のただの拘りなのかもしれませんが
これにしてからは移植トラブルが物凄く減りました。
ロリポップ!レンタルサーバ 

ソウルラッシュ 自動化 試作

土日なのでソウルラッシュでBOTやってみました。


ロリポップ!レンタルサーバ 


作る前に考える事
-------------------
①プレイしてマップ調査

 ソウルラッシュのマップは
 □の部屋が4つづつ、の2マップとボスの部屋の計3マップ
 各部屋の、敵は倒さないと次の部屋に行けない。


②キャラ位置がなるべく保てる方法

 敵は助っ人に倒してもらう

③キャラをどの壁にぶつけるか考える
(オレンジのラインがキャラの歩く線)


四角い部屋なので簡単ですね。
1個目の部屋で真っ直ぐ上に行き、敵が撃破されるまでsleep
2個目の部屋で真っ直ぐ上に行き、自キャラを壁にあてて、敵が撃破されるのを待つ
  少し下に行き、右へまっすぐ歩く。
(略)
-----------------

コッペリアだと1週150秒くらいでクリアできました。

ロリポップ!レンタルサーバ 



2016年2月5日金曜日

白猫BOTを試作してみての感想

ボットを作ってみての感想です。



ロリポップ!レンタルサーバ 


えと、PCで作動させるボットを作る場合は

端末が変わると解像度依存により、タップ位置が変わってしまうようでした。
なので、タップ位置の補正値を設ける事はけっこう大事だと思いました。
ウィンドウの位置を補正値としてつかって、相対座標で指定するように作るといい感じでした。


全曜日のボットが作り終わる頃には
そこそこなテンプレートソースができるかなと思います。

良いボットができあがれば
設定ファイルを変えれば他のマップでも使えるかな?


白猫ボットに必要そうな処理を書いてみました。
http://shironekoboter.blogspot.jp/p/blog-page.html
メイン処理は書いてないので、moveとかskilとかを並べる必要があります。
ウィンドウ名に「android」という文字列を含んでる前提で書かれてるのでその箇所は各々の環境にあわせて直してください。
あと、sleepの間隔とか、適当なのでタップがうまくいかないかもしれません。適当に調整してください。
ソースのページ

追記
マップの角度も補正値として持った方がいいですね。

ロリポップ!レンタルサーバ 


2016年1月28日木曜日

木曜の緑突風 破滅級 樹海の支配者 お試しBOT作成手順

仮想環境でのゲーム起動
UWSCの入手
上記2個が完了している事が前提です。


ロリポップ!レンタルサーバ 

もしも白猫を自動化できたら何をしたいのか考えました。


多分、ルーン集め?かな?


という事で、今日は木曜日だったので

タイトルの通り、緑のルーン集めを作る方向にしました。



(チートではないのでBAN率は低いですが、サブキャラでお試し・・・)


ロリポップ!レンタルサーバ

1. ゲームをプレイして「樹海の支配者」のマップ、敵の位置、宝箱の位置を調べます。

①~⑫まで、敵の出現箇所と宝箱の位置をメモ



2. キャラをどう動かしていくか考えます。

  ①.敵を撃破しなくては通過できない → 敵をすべて倒す
  ②.宝箱をあけると③の敵が沸く → 箱を開けない OR 開ける
  ③.撃破しなくても通過できる → 敵を倒す OR 倒さない

           (略)

 100人いれば100通りの考えがあると思います。


3. 2で考えた動きを実現するにはどんなメソッドが必要か考える。

  最低限必要な事
   歩く、殴る

  あればベター
   スキル1~3

  無くても大丈夫だけどあると良いもの
   キャラ位置の判定
   敵位置の判定
   イベントスキップ
   失敗時のリタイア~クエストへの復帰


4. メソッドにどんな引数を使おうか考える。


   歩く→引数は、歩行時間
   殴る→引数は、殴る回数

   スキル→引数は、スキル番号


5. 実際にメソッドを作って、動作確認をする。

    (ソースは別ページを作って書きますのでお待ちください。)


6. 5で作ったメソッドを組み合わせてメイン処理にペタペタはりつけて、動作確認をする。




三行で書くと
プレイしてマップで必要な操作を考える
必要であろうメソッドを作って動作確認
メソッドを組み合わせてメイン処理を作る。 →必要な操作が書いてあるソース

必要であろうメソッドを作っておけば、あとはマップ単位で流用できるので楽ちんです。
あ、キャラの移動速度とかが違うのでキャラ単位でも違ってきますね。


 (動画は、後日アップしなおしますのでお待ちください)

----------------
木曜日に作業できなかったので金曜日の動画になります。

試作したBOTの動画です。座標がわかってないので壁にぶつけて位置補正してます。


ボットを作る時のコツですが
座標がわからない場合、キャラの位置がわからないので
キャラを壁にあてる事で、任意の位置に居る確率を高くします。(動画中でも壁にあたってる情けない姿があります。)
それでも、障害物にひっかかったりする事があるので、時間切れで再挑戦が必要となります。
あと、できれば、助っ人は無し、スキルも無しの方が障害物で躓く可能性が低くなると思います。
----------------

追記:2/8

試作2本目
ソウルラッシュ




ロリポップ!レンタルサーバ 


-----------------
試作3本目

月曜日のルーン



ぷにこんは、360/20単位で刻みました。

キャラは移動のみ
撃破は助っ人依存
クエストの修了判定はスレッドでやるといいかんじなのかな。

スマホゲーム 自動化への道 その②マクロを作ろう 続き

画面サイズがきまったら

必須の動きを考えます。


どのゲームにも共通して、クリック、ありますよね。
そういう処理をメソッド化しておくと、どのゲームにも使いまわしできます。

// ------------------------------------------
// クリックメソッド S
// ------------------------------------------
procedure singleC(tageX, tageY)

    SLEEP(0.3)
    MMV(tageX + RANDOM(7)-2, tageY + RANDOM(7)-2)
    BTN(LEFT, DOWN)
    SLEEP(0.3)
    BTN(LEFT, UP)
    SLEEP(0.3)

fend

// ------------------------------------------

イルーナ戦記とかでも使ってたクリックです。
ちょっとだけクリック一をずらしてるのはボットじゃないよアピール。


ロリポップ!レンタルサーバ


スマホゲーム 自動化への道 その②マクロを作ろう

マクロを作る前に。


UWSCでゲームを自動化する場合ですが

画面の座標を使うので、ウィンドウサイズをコロコロ変更するとマクロが動かなくなります。

なので、最初に、好みのウィンドウサイズを決めて下さい。




多重起動できるのですが、とりあえず
1個だけ起動している場合で、かつデフォルトの名前だった場合は
下記コードで画面サイズを変更できます。

id = GETID("Xamarin","HwndWrapper[AndroidPlayer")
ACW(id,0,0,500,800,0)


テキストに
白猫.UWSCというファイル名で保存してください。




白猫だとこのサイズがちょうどよさそうでしたので

私はこのサイズで作っていってみます。

スマホゲーム 自動化への道 その①マクロの用意

追記:2/10 実機も仮想も操作できるマクロを作るツール作ってみました → ここ

------

こんにちは。


前回までの作業で、自分の好きなゲームを起動することができたでしょうか?


私の場合は白猫プロジェクトです。


無事にPCでゲームを起動できたら、次のステップです。

▼ロリポップ!レンタルサーバー



Xamarin Android Player 起動

前回の続き

「Xamarin Android Player 」の起動です。


起動するとダウンロード可能なデバイス一覧が表示されます。

▼ロリポップ!レンタルサーバー

PCで白猫 アンドロイド仮想環境 Xamarin Android Player を使ってみる

こんにちは。みみたです。

Xamarin Android Player という仮想環境を使ってみようと思います。
ダウンロードはここから(開いた画面の最下部)

2016年1月27日水曜日

はじめまして。

こんにちは。はじめまして。

白猫プレイヤーのミミタです。



スマホゲームをボット化する場合ですが
必要な環境があります。

★ロリポップ!レンタルサーバー★