絵を描いたりネットいろいろ
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
新しい記事を書く事で広告が消せます。
非公開_bot_
この記事はブロとものみ閲覧できます
ちーとやbot2
一応、bot
かなりひどい方法ではあるけれど、
とりあえず作れた
それの情報は非公開です
こういうのは、公開したところからセキュリティホール塞がれるものだからね
でも作り方がひどいから100%の満足にはいってない
でもまぁ、とりあえずBOT
キーマウスのところは突破したから
あとはメモリMAPから、いろんな情報を引き出すしかないけど
Ollydebugは起動した瞬間にnProさんがWindowsに何か仕掛けて
ゲームを隠したり、windowsを再起動させるしかないような状況にされるみたいなので、
そういう風にならないデバッガを見つけるか、自作するしかない
プロセス名だけみて、そうしてるんだったら回避余裕なんだけどな
つかOllydebugの使い方イミフだし、別にいらないよ
うさみみハリケーンはどうだったっけ
キーマウスメッセージ送受信のところが、ちょい酷いから
botをまともに作るんだったら、
DirectInputのメッセージ送受信のところをどうやって突破するか
HKLM\Software\Microsoft\DirectInput\Emulation
Emulation キーは DWORD 型
0x08 (キーボード用)
0x10 (マウス用)
0x18 (マウスおよびキーボード用)
HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
DirectInput
よくわかんないけど、
このあたりの設定だけでいけるなら簡単だけど、どうかね
また今度試す眠い
うぇwwwうぇwww
超はらへったしつかれた
夕飯たべて ネトゲして ゆゆさまかいて ねる
かなりひどい方法ではあるけれど、
とりあえず作れた
それの情報は非公開です
こういうのは、公開したところからセキュリティホール塞がれるものだからね
でも作り方がひどいから100%の満足にはいってない
でもまぁ、とりあえずBOT
キーマウスのところは突破したから
あとはメモリMAPから、いろんな情報を引き出すしかないけど
Ollydebugは起動した瞬間にnProさんがWindowsに何か仕掛けて
ゲームを隠したり、windowsを再起動させるしかないような状況にされるみたいなので、
そういう風にならないデバッガを見つけるか、自作するしかない
プロセス名だけみて、そうしてるんだったら回避余裕なんだけどな
つかOllydebugの使い方イミフだし、別にいらないよ
うさみみハリケーンはどうだったっけ
キーマウスメッセージ送受信のところが、ちょい酷いから
botをまともに作るんだったら、
DirectInputのメッセージ送受信のところをどうやって突破するか
HKLM\Software\Microsoft\DirectInput\Emulation
Emulation キーは DWORD 型
0x08 (キーボード用)
0x10 (マウス用)
0x18 (マウスおよびキーボード用)
HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
DirectInput
よくわかんないけど、
このあたりの設定だけでいけるなら簡単だけど、どうかね
また今度試す眠い
うぇwwwうぇwww
超はらへったしつかれた
夕飯たべて ネトゲして ゆゆさまかいて ねる
ちーとやbotのためのメモ
jtk
MapVirtualKey
SendInput
DirectInput
gdb デバッガ
スキャンコード
Rubyからいろいろやってたけど構造体や配列関連で面倒くさくて吹っ飛んだ
また時間できたときに次はC++からやる
さすがにnProは硬いのかなぁ
とかとか、
ここまで調べてて気づいちゃったので終了
つくれそうww
AIとかは無いから、本格的なBOT作るとしたらAIを0から作らないとなんだけどね
だから今の所はまだマクロと変わらないんだけど、
とりあえず某ネトゲでのJTKみたいな機能の少ないマクロじゃなくて
ちゃんとした自作のマクロを動かす手段はたった今出来上がった
わーい、やっとBotterになれたよー☆♪
まぁ私はBOTとかJTK頼らなくても十分強いので
少し動かして試して封印するでしょう
MapVirtualKey
SendInput
DirectInput
gdb デバッガ
スキャンコード
Rubyからいろいろやってたけど構造体や配列関連で面倒くさくて吹っ飛んだ
また時間できたときに次はC++からやる
さすがにnProは硬いのかなぁ
とかとか、
ここまで調べてて気づいちゃったので終了
つくれそうww
AIとかは無いから、本格的なBOT作るとしたらAIを0から作らないとなんだけどね
だから今の所はまだマクロと変わらないんだけど、
とりあえず某ネトゲでのJTKみたいな機能の少ないマクロじゃなくて
ちゃんとした自作のマクロを動かす手段はたった今出来上がった
わーい、やっとBotterになれたよー☆♪
まぁ私はBOTとかJTK頼らなくても十分強いので
少し動かして試して封印するでしょう
ruby win32ole IE操作 あと rubyからwsh
なんかちょうどいいのあったので、
でも古かったから、ちょっと手直しして動くようにした
http://www.tech-notes.dyndns.org/win32ole/ie_lib_document.html
require 'win32ole'
class IE_Wrapper
def initialize(raw_object, ie_obj=nil)
@ie = ie_obj
@raw_object = raw_object
end
def raw
@raw_object
end
private
def method_missing(m_id, *params)
missing_method_name = m_id.to_s
# downcase method name
if methods.include?(m_id.to_s.downcase)
send(m_id.to_s.downcase.intern, *params)
else
begin
@raw_object.send(m_id, *params)
rescue
raise $!,$!.message, caller
end
end
end
def inspect()
self.class
end
def set_ie(ie_obj)
@ie = ie_obj
end
COMPLETE_STATE = 4
def wait_until_stable(ie)
return unless ie
while ie.busy == true
sleep 0.5
end
loop do
break if ie.readyState == COMPLETE_STATE
sleep 0.5
end
end
end
# ========================
# IE
# ========================
class IE < IE_Wrapper
def initialize(visible_flag = true)
@raw_object = WIN32OLE.new("InternetExplorer.Application")
@ie = @raw_object
if visible_flag
@ie.visible = true
end
end
def document()
doc = Document.new(@ie.document, @ie)
end
def navigate(url)
@ie.navigate(url)
wait_until_stable(@ie)
end
def wait_stable()
wait_until_stable(@ie)
end
# ========================
# IE.Document
# ========================
class Document < IE_Wrapper
def frames(index=nil)
if index
return(nil) if index >= @raw_object.frames.length
Frames.new(@raw_object.frames, @ie)[index]
else
Frames.new(@raw_object.frames, @ie)
end
end
def all()
TagElementCollection.new(@raw_object.all, @ie)
end
def tags(tag_name)
TagElementCollection.new(@raw_object.all.tags(tag_name), @ie)
end
def head()
TagElementCollection.new(@raw_object.all.tags("HEAD"), @ie)[0]
end
def body()
TagElementCollection.new(@raw_object.all.tags("BODY"), @ie)[0]
end
end
# ========================
# TAG Element Collection
# ========================
class TagElementCollection < IE_Wrapper
def [](index)
if index.class == Fixnum
return(nil) if index >= @raw_object.length
TagElement.new(@raw_object.item(index), @ie)
elsif index.class == Range
raise "Range Not Support for TagElementCollection#[]"
end
end
def size
@raw_object.length
end
def each
@raw_object.each {|tag_element|
yield TagElement.new(tag_element, @ie)
}
end
def get_tag_by_title(target_str)
get_tag_by_key(target_str, "VALUE")
end
def get_tag_by_value(target_str)
get_tag_by_key(target_str, "VALUE")
end
def get_tag_by_text(target_str)
get_tag_by_key(target_str, "INNERTEXT")
end
def get_tag_by_name(target_str)
get_tag_by_key(target_str, "NAME")
end
def get_tag_by_option(target_str)
get_tag_by_key(target_str, "INNERHTML")
end
def inspect()
element_inspect_list = []
self.each {|tag_element|
element_inspect_list.push tag_element.inspect
}
"#{self.class},#{element_inspect_list.join('/')}"
end
private
def get_tag_by_key(target_str, key_type)
tag_list = []
@raw_object.each {|tag_element|
case key_type
when "INNERTEXT"
key_string = tag_element.innerText.gsub(/\s/, "")
when "VALUE"
key_string = tag_element.value.gsub(/\s/, "")
when "NAME"
key_string = tag_element.name
when "INNERHTML"
key_string = tag_element.innerHTML.gsub(/\s/, "")
else
return nil
end
if key_string =~ /#{target_str}/
tag_list.push TagElement.new(tag_element, @ie)
end
}
case tag_list.size
when 0
return nil
when 1
return tag_list[0]
else
return tag_list
end
end
end
# ========================
# TAG Element
# ========================
class TagElement < IE_Wrapper
def tagname
@raw_object.tagName
end
def text=(set_text)
case tagName
when "SELECT"
option_list = tags("OPTION")
option_list.each {|option_element|
if option_element.innerText == set_text
option_element.selected = true
break
end
}
else
@raw_object.value = set_text
end
end
def inspect()
case tagName
when "SELECT"
innerHTML = replace_cr_code(self.innerHTML)
"#{self.class}:<#{tagName}>:[#{self.innerHTML}]"
when "INPUT", "IMG", "A"
outerHTML = replace_cr_code(self.outerHTML)
"#{self.class}:<#{tagName}>:[#{self.outerHTML}]"
when "TR", "TD"
innerText = replace_cr_code(self.innerText)
"#{self.class}:<#{tagName}>:[#{innerText}]"
else
"#{self.class}:<#{tagName}>"
end
end
def to_s
@raw_object.value
end
def click
@raw_object.click
wait_until_stable(@ie)
end
def tags(tag_name)
TagElementCollection.new(@raw_object.all.tags(tag_name), @ie)
end
def all
TagElementCollection.new(@raw_object.all, @ie)
end
private
def replace_cr_code(text)
replcae_text = text.gsub(/\r/, '\r')
replcae_text.gsub!(/\n/, '\n')
return replcae_text
end
end
# ========================
# IE.Document.Frames
# ========================
class Frames < IE_Wrapper
def [](index)
return(nil) if index >= @raw_object.length
Frame.new(@raw_object.item(index), @ie)
end
def size
@raw_object.length
end
def each
index = 0
while index < @raw_object.length
raw_frame = @raw_object.item(index)
ie_frame = Frame.new(raw_frame, @ie)
yield(ie_frame)
index += 1
end
end
end
# ========================
# IE.Document.Frames.item(n)
# ========================
class Frame < IE_Wrapper
def document
Document.new(@raw_object.document, @ie)
end
end
end
ie = IE.new false
# true だとIE可視化で起動
#ie.navigate("http://www.google.com/")
ie.navigate("http://hayabusa.2ch.net/test/read.cgi/news4vip/1328169422/l50")
input_list = ie.document.body.tags("input")
input_list.each {|element|
p element
}
input_list.get_tag_by_name('FROM').text = "歳納京子ちゃんぺろぺろ"
input_list.get_tag_by_name('mail').text = "sage"
input_list2 = ie.document.body.tags("textarea")
input_list2.each {|element|
p element
}
input_list2.get_tag_by_name('').text = "ぺろぺろ"
input_list.get_tag_by_title("書き込む").click
これはIEのクッキーそのまま使う感じなので
mechanizeとはまた違うね
2chへの書き込みも余裕になった
これ p element
で表示してるときは
IE::TagElement:
wsh
-------------------------------
require 'win32ole'
wsh = WIN32OLE.new('WScript.Shell')
wsh.SendKeys "{TAB}"
wsh.SendKeys " "
sleep 1
__END__
Set objShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep 1000
objShell.SendKeys "{TAB}"
objShell.SendKeys " "
エンドレスバトルがレベル上がって飽きてきたので
さらに色々自動化をしちゃう
なにがたのしいの・・・
さいきん絵かいてない
ぁああぁぁぁあぁかかないとゆゆゆゆ
ruby if 複数行
p \
\
9
if true \
||
true
p 8
end
なにこれ
マニュアルのどこにも載ってなかった気がするんだけど
\で複数行に出来るようです
プログラミングのつまんね
つまんないと思う理由は
言語 ライブラリ エディタ OS が効率でないから
Goのソースコードと、あとこれからの事をいくつか
なんか、あったので
http://code.google.com/p/go/source/browse/#hg
ああもう、
これはやっぱダメかな
C言語を、最後の最後に正しい形にしたかったっていう
気持ちは伝わってきたけど
この言語を出すなら、せめてC++でた直後かC++より前に出さないと
C++がもう既にかなり成長したからGoがC++よりも使われるようになる未来は、
来るかどうかわからない
Go言語のこれは、
x := 7
var x = 9
var x int
全ての静的言語で見習うべきだけど、Goの利点は今の所はこれと
行末の「;」ないって事だけ
ゆっくり見守るしかないけど
Goのソースは見た目が未だにCで出来ている
ちょっと、時代がもう違うと思う
関数( 引数 )
じゃなくて
変数オブジェクト.関数.関数
って形にしないと
オブジェクト指向は上手くいかない
関数( 引数 ) とか
関数( 関数( 引数 ) ) こういうのは、関数型言語の書き方だと思う
正直、Ruby以外の言語は関数型言語の書き方で、オブジェクト指向をやろうとしてると思う
一応
var.function().function().function()
ってソースはC#あたりでもあったりするけど、やっぱり括弧が冗長なんだよね
var.function.function.function じゃないと、だめぽい
あと、特に重要なのがイテレータ
イテレータを、「イテレータを作ってforで廻す」みたいな発想の言語ばっかりだと思う
forにbegin(),end()指定したり、 foreachとか ね
Rubyみたいに制御文を増やそうよ
each とか map とか reject とかさ
そうしないと
開発効率はあがらないよ
制御文っていうか、「ループ制御も出来るイテレータ型を返すメソッド」ですね
重要なのは、そこの設計
C#は、根幹から書き換えないと、もうそゆこと出来ないから
もうだめかな
rubyさえ伸びれば
他の言語なんて、それほど使われなくなると思うんだけどね
いかにして
rubyの速度でも十分だっていう事と、rubyが開発効率のでる言語だという事を知らしめるかだと思う
そうすればC#,JAVAなど敵ではない
今後もrubyよりもさらに上の言語が出てくるとは思うけど、
現時点ではかなり、他言語と比較して上をいってる言語だから
とりあえずはこの言語が広まるんだったら、しばらく文句は出ないと思う
ていうかPHPユーザーとかって、よくPHPのソースコードかいていられるな位には思う
なんで、かいていられるんだろう。ruby狂になってる自分じゃ精神的に無理
この自分の見識がズレているとは思わないから
少なくともWebアプリケーションは、RubyのほうがPHPより速度が遅いとしても
Rubyで書き換えられていくと思う
PHPにちょっと未来は見えないから
だから、Webアプリの世界はほうって置いてもPHP死んでくれると思って
あとはJAVAをどうやってどかすかだよね
JAVA程の速度はいらないアプリケーションも沢山ある
pcのスペックは年々上がるので
年々JAVAは使われなくなり、Rubyが使われるようになる
はずなんです
あとはGUIアプリ製作用のフレームワークと、rubyの速度でも十分ですよっていう印象付けかな
それと静的VM言語っていらないと思うよ
C#,JAVAのことですよ
静的型付けしてネイティブ吐くのか、
動的型付けでVMで動かすのかどっちかにしろと、中途半端な速度でどっちつかずの言語はいらないって
静的型付けネイティブで唯一まともに使えるのが、あのとんでもなく仕様の広いC++しかないから
C++扱える技術者不足でC#,JAVA使われているけど、
マジで静的VM言語は、使いどころなんて本来どこにもないはずだった
ああ、はやく駆逐してあげないとね><
http://code.google.com/p/go/source/browse/#hg
ああもう、
これはやっぱダメかな
C言語を、最後の最後に正しい形にしたかったっていう
気持ちは伝わってきたけど
この言語を出すなら、せめてC++でた直後かC++より前に出さないと
C++がもう既にかなり成長したからGoがC++よりも使われるようになる未来は、
来るかどうかわからない
Go言語のこれは、
x := 7
var x = 9
var x int
全ての静的言語で見習うべきだけど、Goの利点は今の所はこれと
行末の「;」ないって事だけ
ゆっくり見守るしかないけど
Goのソースは見た目が未だにCで出来ている
ちょっと、時代がもう違うと思う
関数( 引数 )
じゃなくて
変数オブジェクト.関数.関数
って形にしないと
オブジェクト指向は上手くいかない
関数( 引数 ) とか
関数( 関数( 引数 ) ) こういうのは、関数型言語の書き方だと思う
正直、Ruby以外の言語は関数型言語の書き方で、オブジェクト指向をやろうとしてると思う
一応
var.function().function().function()
ってソースはC#あたりでもあったりするけど、やっぱり括弧が冗長なんだよね
var.function.function.function じゃないと、だめぽい
あと、特に重要なのがイテレータ
イテレータを、「イテレータを作ってforで廻す」みたいな発想の言語ばっかりだと思う
forにbegin(),end()指定したり、 foreachとか ね
Rubyみたいに制御文を増やそうよ
each とか map とか reject とかさ
そうしないと
開発効率はあがらないよ
制御文っていうか、「ループ制御も出来るイテレータ型を返すメソッド」ですね
重要なのは、そこの設計
C#は、根幹から書き換えないと、もうそゆこと出来ないから
もうだめかな
rubyさえ伸びれば
他の言語なんて、それほど使われなくなると思うんだけどね
いかにして
rubyの速度でも十分だっていう事と、rubyが開発効率のでる言語だという事を知らしめるかだと思う
そうすればC#,JAVAなど敵ではない
今後もrubyよりもさらに上の言語が出てくるとは思うけど、
現時点ではかなり、他言語と比較して上をいってる言語だから
とりあえずはこの言語が広まるんだったら、しばらく文句は出ないと思う
ていうかPHPユーザーとかって、よくPHPのソースコードかいていられるな位には思う
なんで、かいていられるんだろう。ruby狂になってる自分じゃ精神的に無理
この自分の見識がズレているとは思わないから
少なくともWebアプリケーションは、RubyのほうがPHPより速度が遅いとしても
Rubyで書き換えられていくと思う
PHPにちょっと未来は見えないから
だから、Webアプリの世界はほうって置いてもPHP死んでくれると思って
あとはJAVAをどうやってどかすかだよね
JAVA程の速度はいらないアプリケーションも沢山ある
pcのスペックは年々上がるので
年々JAVAは使われなくなり、Rubyが使われるようになる
はずなんです
あとはGUIアプリ製作用のフレームワークと、rubyの速度でも十分ですよっていう印象付けかな
それと静的VM言語っていらないと思うよ
C#,JAVAのことですよ
静的型付けしてネイティブ吐くのか、
動的型付けでVMで動かすのかどっちかにしろと、中途半端な速度でどっちつかずの言語はいらないって
静的型付けネイティブで唯一まともに使えるのが、あのとんでもなく仕様の広いC++しかないから
C++扱える技術者不足でC#,JAVA使われているけど、
マジで静的VM言語は、使いどころなんて本来どこにもないはずだった
ああ、はやく駆逐してあげないとね><
Ruby-CGI-uploder 作り 2
前回のソースコードからやったことは3つ
ファイルサイズを、とりあえず100kByteに制限
例外を使って処理をまとめた
アップロードできる拡張子を、jpgとpngに制限
#!/usr/local/bin/ruby
require 'cgi'
print "Content-type: text/html\n\n";
print <<-TEXT
<html><head><title> test_uploder </title></head>
<body>
<form method="POST" enctype="multipart/form-data">
file <input type="FILE" name="file">
<input type="submit" value="upload">
</form>
</body></html>
TEXT
#------------------------------------------------------------
folder = "cgi_up"
cgi = CGI.new
value = cgi.params["file"].first
begin
raise "file to nil" if value.nil?
raise "kakutyousi_err" unless File.extname( value.original_filename ) =~ /\.jpg$|\.png$/
raise "size over" if 100_000 < value.size
mkfile = Dir.getwd + "/#{folder}/" + value.original_filename.gsub(/[^\w!\#$%&()=^~|@`\[\]\{\};+,.-]/u, '_')
open( mkfile , "wb") do |f|
f.write value.read
end
print "upload is " , mkfile
rescue => ev
print ev
end
print '<hr color="#88ccaa" size="5" width="350" align="left">'
Dir["#{folder}/*.{jpg,png}"].each.each_with_index do | m , i |
size = File.size m
m = File.basename m
print "<img src='#{folder}/#{m}' height='200'> "
# print "#{i} _ <a href=#{folder}/#{m}>#{m}</a> _ #{size} byte <br>\n"
end
ちょっと、いくつか勝手に画像使わせていただきました
あとは
ファイルの削除機能とリロード?を、つけてみる
delete_numのところに数字を入れてdeleteを押すと削除される
#!/usr/local/bin/ruby
require 'cgi'
print "Content-type: text/html\n\n";
print <<-TEXT
<html><head><title> test_uploder </title></head>
<body>
<form method="POST" enctype="multipart/form-data">
file <input type="FILE" name="file">
<input type="submit" value="upload">
</form>
<form method="POST" enctype="multipart/form-data">
delete_num <input type="input" name="del_file">
<input type="submit" value="delete">
</form>
<a href="#{File.basename __FILE__}"> reload </a>
</body></html>
TEXT
#------------------------------------------------------------
folder = "cgi_up"
cgi = CGI.new
value = cgi.params["file"].first
begin
raise "file to nil" if value.nil?
raise "kakutyousi_err" unless File.extname( value.original_filename ) =~ /\.jpg$|\.png$/
raise "size over" if 300_000 < value.size
mkfile = Dir.getwd + "/#{folder}/" + value.original_filename.gsub(/[^\w!\#$%&()=^~|@`\[\]\{\};+,.-]/u, '_')
open( mkfile , "wb") do |f|
f.write value.read
end
print "upload is " , mkfile
rescue => ev
print ev
end
print " _ "
value = cgi.params["del_file"].first
begin
raise "" if value.nil?
file = Dir["#{folder}/*.{jpg,png}"][ value.to_i ]
raise "delete_err" if file.nil?
File.unlink file
puts "delete is " , file
rescue => ev
print ev
end
print '<hr color="#88ccaa" size="5" width="350" align="left">'
Dir["#{folder}/*.{jpg,png}"].sort do | a , b |
File.mtime(b) <=> File.mtime(a)
end.each_with_index do | m , i |
size = File.size m
m = File.basename m
print "<img src='#{folder}/#{m}' height='200'> "
print "#{i} _ <a href=#{folder}/#{m}>#{m}</a> _ #{size} byte <br>\n"
end
また少々画像を使わせていただいています
他にやったことは、ファイルの更新日時順に並べたり、とかですね
このアプロダにあと足りない機能は、
ファイルが一定数を超えたら、古いものから削除していく機能だけど
そういうのは、ここにかくよりも、
別プロセスでスケジュールたてるとか
サーバー起動時に別スレッドを起動しておくとかで
n = Dir["#{folder}/*.{jpg,png}"].size - 50
if n > 0
Dir["#{folder}/*.{jpg,png}"].sort do | a , b |
File.mtime(b) <=> File.mtime(a)
end.reverse.take( n ).each do | m |
File.unlink m
end
end
定期的にこんな感じのスクリプトを実行してやったりする手もあります
べつにアップロードされすぎて容量いっぱいになったら
どうせHDDへ書き込みをしようとしたときに、エラーが出るはずなので
パソコンが壊れたりすることはありません
ruby uploader の作成でした 終