絵を描いたりネットいろいろ
スポンサーサイト
上記の広告は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
超はらへったしつかれた
夕飯たべて ネトゲして ゆゆさまかいて ねる
    0..
ちーとやbotのためのメモ
jtk

MapVirtualKey

SendInput

DirectInput

gdb デバッガ

スキャンコード


Rubyからいろいろやってたけど構造体や配列関連で面倒くさくて吹っ飛んだ

また時間できたときに次はC++からやる

さすがにnProは硬いのかなぁ


とかとか、
ここまで調べてて気づいちゃったので終了
つくれそうww

AIとかは無いから、本格的なBOT作るとしたらAIを0から作らないとなんだけどね
だから今の所はまだマクロと変わらないんだけど、
とりあえず某ネトゲでのJTKみたいな機能の少ないマクロじゃなくて
ちゃんとした自作のマクロを動かす手段はたった今出来上がった

わーい、やっとBotterになれたよー☆♪
まぁ私はBOTとかJTK頼らなくても十分強いので
少し動かして試して封印するでしょう

    0..
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:こうなってるけど
input_list2.get_tag_by_name('MESSAGE').text = "ぺろぺろ"

でも、いけた
elemetn表示のほうがミスってるのかもね
FORMに複数のtextarea あるときは、タグのnameから名前引っ張ってきて指定




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 " "



エンドレスバトルがレベル上がって飽きてきたので
さらに色々自動化をしちゃう
なにがたのしいの・・・


さいきん絵かいてない
ぁああぁぁぁあぁかかないとゆゆゆゆ
    0..
ruby if 複数行

p \
\
9

if true \
||
true
p 8

end


なにこれ
マニュアルのどこにも載ってなかった気がするんだけど
\で複数行に出来るようです

プログラミングのつまんね


つまんないと思う理由は
 言語 ライブラリ エディタ OS が効率でないから
    0..
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言語は、使いどころなんて本来どこにもないはずだった
ああ、はやく駆逐してあげないとね><
    0..
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






ちょっと、いくつか勝手に画像使わせていただきました

conp_cgi1_r.jpg



あとは
ファイルの削除機能とリロード?を、つけてみる
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





また少々画像を使わせていただいています

conp_cgi2_r.jpg



他にやったことは、ファイルの更新日時順に並べたり、とかですね

このアプロダにあと足りない機能は、
ファイルが一定数を超えたら、古いものから削除していく機能だけど

そういうのは、ここにかくよりも、
別プロセスでスケジュールたてるとか
サーバー起動時に別スレッドを起動しておくとかで



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 の作成でした  終
    0..
kakikomi