acme minechan
DESCRIPTION
Perlで無理ゲーム攻略 (How to play Win32::GuiTest)http://yapcasia.org/2011/talk/32某MMORPGでゲーム中にPerlの同時起動を遮断する機能が追加されたことがありました。Win32::GuiTest や Win32::Screenshot などのモジュールを利用して、Windows上で動作するゲームを自動でプレイするPerlプログラムを作成する方法について解説します。Once upon a time, perl.exe was banned during a game by MMORPG.I will explain how to create the Perl bot program which playsautomatically games on Windows using some modules such asWin32::GuiTest and Win32::Screenshot.TRANSCRIPT
![Page 2: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/2.jpg)
Once upon a time
昔むかし
![Page 3: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/3.jpg)
There was a MMORPG
あるところに MMORPG が
![Page 4: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/4.jpg)
perl.exe was banned
Perl.exe を 遮断しました
![Page 5: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/5.jpg)
http://www.ragnarokonline.jp/news/information/notice/item/7732
![Page 6: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/6.jpg)
Perl.exe was banned…
![Page 7: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/7.jpg)
Perl.exe was banned…
![Page 8: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/8.jpg)
![Page 9: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/9.jpg)
Why? どうして?
![Page 10: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/10.jpg)
RMT (Real Money Trading) on MMORPG
Virtual Money Real Money
![Page 11: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/11.jpg)
Making Bot (Computer game bot) with Perl
![Page 12: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/12.jpg)
Hardware Bot
![Page 13: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/13.jpg)
Hardware Bot
![Page 14: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/14.jpg)
Making Software Bot
1. Network emulation
packet, socket, LWP (Perl)
2. Web Application
Selenium Core (JavaScript)
Selenium IDE (Firefox extension)
Selenium RC (Java/Python)
3. Windows Application
Win32::GuiTest (Perl)
Win32::Screenshot (Perl)
![Page 15: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/15.jpg)
s.a. @turugina 日常業務でperlを使おう
http://yapcasia.org/2011/talk/109
![Page 16: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/16.jpg)
Demo
![Page 17: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/17.jpg)
![Page 18: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/18.jpg)
(1) Win32::GuiTest
SendKeys($keys[,$delay])
use Win32::GuiTest qw(SendKeys); system("start notepad.exe"); # & sleep(1); SendKeys("foo{ENTER}"); SendKeys("bar{ENTER}"); SendKeys("bar{BS}z{ENTER}");
![Page 19: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/19.jpg)
SendKeys($keys)
Name Action {BACKSPACE} Backspace {BS} Backspace {BKSP} Backspace {BREAK} Break {CAPS} Caps Lock {DELETE} Delete {DOWN} Down arrow {END} End {ENTER} Enter {ESCAPE} Escape {HELP} Help key {HOME} Home {INSERT} Insert {LEFT} Left arrow {NUMLOCK} Num lock {PGDN} Page down {PGUP} Page up
Name Action {PRTSCR} Print screen {RIGHT} Right arrow {SCROLL} Scroll lock {TAB} Tab {UP} Up arrow {PAUSE} Pause {F1} Function Key 1 ... ... {F24} Function Key 24 {SPC} Spacebar {SPACE} Spacebar {SPACEBAR} Spacebar {LWI} Left Windows Key {RWI} Right Windows Key {APP} Open Context Menu Key
![Page 20: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/20.jpg)
(2) FindWindowLike, GetWindowRect
GetWindowText, GetClassName
use Win32::GuiTest qw(:ALL); system("start calc.exe"); sleep(1); my @id = FindWindowLike(undef,"^電卓","",undef,1);
my $id = $id[0]; print GetWindowText($id), "¥n"; print GetClassName ($id), "¥n"; my ($x1, $y1, $x2, $y2) = GetWindowRect($id); print "($x1, $y1)->($x2, $y2)", "¥n";
![Page 21: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/21.jpg)
(3) Win32::Screenshot
CaputureRect #=> Image::Magick object
use Win32::Screenshot qw(CaptureRect); my $img = CaptureRect(20, 10, 800, 500); print $img; # Image::Magick=ARRAY(0xbeef) $img->Write("x.png"); # save system("start x.png"); # view
![Page 22: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/22.jpg)
(4) Win32::GuiTest & Win32::Screenshot
Capture only “calc.exe” window
use Win32::GuiTest qw(:ALL); use Win32::Screenshot qw(CaptureRect); system("start calc.exe"); sleep(1); my @id = FindWindowLike(undef,"^電卓","",undef,1);
my ($x1, $y1, $x2, $y2) = GetWindowRect($id[0]); my $img = CaptureRect($x1,$y1, $x2-$x1,$y2-$y1); $img->Write("x.png"); # save system("start x.png"); # view
![Page 23: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/23.jpg)
![Page 24: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/24.jpg)
(5) {Image::Magick}->Get("signature")
Image binary SHA-256 digest string
use Win32::Screenshot qw(CaptureRect); my $img = CaptureRect(20, 10, 800, 500); $img; # Image::Magick=ARRAY(0xbeef) print $img->Get("signature"),"¥n"; # SHA-256 $img = new Image::Magick; $img->Read("x.png"); print $img->Get("signature"),"¥n"; # SHA-256
![Page 25: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/25.jpg)
![Page 26: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/26.jpg)
(6) Win32::GuiTest でマウスを操作する
MouseMoveAbsPix($x, $y)
use Win32::GuiTest qw(:ALL); for ($x = 0; $x < 900; $x += 2) { $y = sin($x / 60) * 300 + 400; MouseMoveAbsPix($x, $y); }
![Page 27: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/27.jpg)
(7) Win32::GuiTest でマウスをクリックする
SendMouse($command)
use Win32::GuiTest qw(:ALL); for (1..5) { SendMouse("{LEFTCLICK}"); sleep(1); SendMouse("{RIGHTCLICK}"); sleep(1); }
![Page 28: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/28.jpg)
Win32::GuiTest::SendMouse($command)
{LEFTDOWN} left button down {LEFTUP} left button up {MIDDLEDOWN} middle button down {MIDDLEUP} middle button up {RIGHTDOWN} right button down {RIGHTUP} right button up {LEFTCLICK} left button single click {MIDDLECLICK} middle button single click {RIGHTCLICK} right button single click {ABSx,y} move to absolute coordinate {RELx,y} move to relative coordinate
![Page 29: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/29.jpg)
![Page 30: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/30.jpg)
応用問題 practical lesson
![Page 31: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/31.jpg)
無理ゲー攻略 mission impossible
![Page 32: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/32.jpg)
![Page 33: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/33.jpg)
![Page 34: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/34.jpg)
Acme::MineChan
Minesweeper を ちゃんと解く。
マイン ちゃん
![Page 35: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/35.jpg)
Demo
![Page 36: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/36.jpg)
画像ファイルだけ、座標データは不要
![Page 38: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/38.jpg)
FAQ. 役に立つの?
新しいスクリーンセーバーとして鑑賞する
Fun of the New Screen Saver
タイピングソフトでハイスコアを出す
Scoring champion for Key-Typing software
Windowsアプリの自動テスト化
Automation Testing for Win32 Applications
セキュリティ脆弱性検査
Fuzzing
その他 etc.
![Page 39: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/39.jpg)
How to Debug
![Page 40: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/40.jpg)
40
![Page 41: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/41.jpg)
暴走 runaway
![Page 42: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/42.jpg)
I Cannot control keyboard and mouse!
![Page 43: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/43.jpg)
Oh…
![Page 44: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/44.jpg)
Press Ctrl+C
![Page 45: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/45.jpg)
infinite loooooooooooooop!!!(無限ループ)
![Page 46: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/46.jpg)
![Page 47: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/47.jpg)
I cannot use keyboard and mouse!!!
![Page 48: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/48.jpg)
I want to kill
![Page 49: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/49.jpg)
How to Kill the process on Win32
XP, 2003 Server …
New command line tools
tasklist
プロセスを一覧表示する
taskkill /F /IM notepad.exe
プロセスを kill する
成功: プロセス "notepad.exe" (PID 777) は強制終了されました。
![Page 50: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/50.jpg)
How to kick?
I cannot use keyboard and mouse…
![Page 51: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/51.jpg)
![Page 52: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/52.jpg)
USB! USB!
![Page 53: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/53.jpg)
Perl Killer USB Memory!
autorun.inf
[Autorun] open=taskkill /F /IM perl.exe
![Page 54: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/54.jpg)
Insert USB Memory…
![Page 55: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/55.jpg)
Successful!
![Page 56: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/56.jpg)
Assign Desktop Shortcut Key (Ctrl+Alt+?)
KILLPERL.BAT Shortcut Desktop
@echo off taskkill /F /IM perl.exe
![Page 57: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/57.jpg)
Ctrl + Alt + K
![Page 58: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/58.jpg)
Perl is dead!
![Page 59: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/59.jpg)
以上
![Page 60: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/60.jpg)
all your minesweeper
are belong to us!
![Page 61: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/61.jpg)
61
![Page 62: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/62.jpg)
参考文献
Win32::GuiTest で Windows の GUI アプリをハックしよう(あまちゃん)
http://perl-users.jp/articles/advent-calendar/2008/13.html
Win32::GUITest と Win32::Clipboard で GUI 操作を自動化する(xaicron)
http://perl-users.jp/articles/advent-calendar/2010/win32/8
How To Get a Window Handle Without Specifying an Exact Title
http://support.microsoft.com/kb/147659/en
Minesweeper Clone
http://www.minesweeper.info/wiki/Minesweeper_Clone
アプリケーションをショートカット キーで起動する
http://www.microsoft.com/japan/athome/magazine/ucontents/users/tips/
windows/041.aspx
@turugina 日常業務でperlを使おう
http://yapcasia.org/2011/talk/109
@keroyonn_ Perlで次世代ゲーム開発 あらため Perl で次世代CUIゲーム開発
http://yapcasia.org/2011/talk/121
![Page 63: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/63.jpg)
謝辞 acknowledgement
![Page 66: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/66.jpg)
![Page 67: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/67.jpg)
![Page 69: Acme minechan](https://reader034.vdocuments.net/reader034/viewer/2022051514/548868ffb47959e20c8b5721/html5/thumbnails/69.jpg)
CPAN++