设为首页
收藏本站
本站论坛
   
3
3
   
  文章列表      

新浪VIVI自动提交与验证码识别全部源代码详解

首先到 新浪VIVI 注册一个用户名
新浪VIVI 的验证码有时候有,有时候没有,可能是为了防止机器人,不过本程序自动识别是否有验证码
其实在页面上做一些文章,例如提一些问题,或者表单使用随机名字等等,对模拟精灵没有任何作用。

 

第一步:验证码采样(没有找到5和0 验证码好象不会出现这两个字符)

1、打开模拟精灵2005,新建模拟程序,把下面的源代码复制到“源码编辑器-->脚本区块”
2、点击“生成模拟程序”按钮
3、重复运行下面的程序,并把生成的图片样本改为“图片上的字符.png”

img = image.new();
--下载图像,没有后缀名要显示指定*.bmp格式
img:getURL("http://VIVI.sina.com.cn/collect/createimage.php?type=collect&imagehash=1d10eee25be45e7ae" target=_blank>http://VIVI.sina.com.cn/collect/createimage.php?type=collect&imagehash=1d10eee25be45e7ae7e1dbe7081e3a07","*.png")

--附注:image库也有抓屏函数,可以直接在屏幕上截取验证码。
image.corp(img, 13 ,0 , 13 + 72 , 20 )
img:save("c:\\test\\test.png") --保存到硬盘

 


--折分图片,指定一行四列
img2,img3,img4,img5 = img:split(1,4);

 

img2:save("c:\\test\\0001.png")
img3:save("c:\\test\\0002.png")
img4:save("c:\\test\\0003.png")
img5:save("c:\\test\\0004.png")

 

image.del(img);

 


第二步:生成样本数据

 

1、打开模拟精灵2005,新建模拟程序,把下面的源代码复制到“源码编辑器-->脚本区块”
2、点击“生成模拟程序”按钮
3、运行模拟程序
4、点击“读取源代码按钮”,在“数据区块”中就是生成的样本数据,复制到你的程序中就可以了


codeKey ={};

-- 数字键名不能写在 {} 里面,注意字符串索引叫键名,与数字索引(也就是没有键名)是不同的
-- 你可以写 codeKey.a = true codeKey={a=true} 但是你不能写 codeKey.1 = true 或 codeKey = {1=true} 这是不符合语法的
-- 你可以象下面这样写,用下面这种写法还可以定义中文的变量名,例如_G["中文变量"] = true;

 

codeKey["1"] = true;
codeKey["2"] = true;
codeKey["3"] = true;
codeKey["4"] = true;
codeKey["6"] = true;
codeKey["7"] = true;
codeKey["8"] = true;

 

--k参数为键,v参数表示值 一个典型的table迭代器回调函数
loadCodeKey = function(k,v)
    local img = image.new();
    img:load("C:\\test\\"..k..".png")

 

    img:bpp(1);
    img:bpp(24);
    img:corp( 5, 5, 13,15 )

 

    img:save("C:\\test2\\"..k..".png")
    codeKey[k]= string.encode( img:getBytes("*.png") , ""); --因为转换到字符串还是二进制,所以用base64进行编码
    image.del(img);
end;

 

--遍历表codekey的所有元素,调用loadcodekey加载图片文件
table.foreach (codeKey, loadCodeKey);

 

--把所有图片保存到数据岛,
ape:saveTable(codeKey,"验证码样本")

 


三、全部源代码

 

1、打开模拟精灵2005,把下面的源代码复制到“源码编辑器”
2、点击“生成模拟程序”按钮
3、在“自定义属性”中设置新浪VIVI的用户名与密码


<?xml version="1.0" encoding="gb2312" ?>
<ApeML LID="CHS" MD="0" 抓屏模式="0" 名称="新浪VIVI自动提交程序" 作者="模拟精灵 2005" 信息窗口="true" 速度="10" 循环次数="10" 自定义属性="登陆密码 = 123,登陆用户名 = username,页面ID = 321">
    <!--创建时间:2005年11月12日-10:38-->
    <脚本区块 语言="LAScript" 名称="init登录" 延时="0" 启用="true" 编辑密钥="" 运行公钥="">
        <![CDATA[

--区块名字前添加"init"前缀则不会重复运行
--using("_G.std"); --从外部文件引用名字空间

 

--设置标题每行一个
local strTitle = [[西藏叛乱内幕
免费在线观看电影免费下载
〖美女图片〗~怎么看都清新
赤裸更圣洁---超级唯美的人体
新浪图像搜索引擎 性感
免费QQ短信
超恐怖!人皮杂技表演-就要看
顶级性感内衣秀上演致命诱惑
绝美图库--华声在线
[暴笑flash]拾金记--Vista[爱
CD乐鉴:彩虹乐队新专辑《AWAK
演艺圈里的性交易真相批露
极品MM全套(不看别后悔)
杜月笙曾捐1500套防毒面具给八
哪些女孩儿最吸引男人(图) 天
风骚性感少妇浴室自拍,泄春光
火影忍者自定义头像_QQ卡通头
▓☆◇◆◇ 小荡妇轻解罗衣露]]
_tabTitle = string.split( strTitle,"\r\n"); --拆分到table列表(数组)

 

local strTag = [[
新闻
体育
图片
影音
动漫
两性
美腿
搞笑
视频
娱乐
文化
IT
音乐
高考
军事
小说
游戏
]]
_tabTag = string.split( strTag,"\r\n");

 

_set = ape:loadSetting() --载入 自定义属性
stopPlay =  function()  
   ape:saveSetting(_set); -- 保存自定义属性  
end;

 


--创建web窗体
wb = web.new("http://VIVI.sina.com.cn/user/login.php");
wb:setSilent(true,true,true,true); --静默模式,所有信息框都别弹出来

 

--填用户名
local ele  = wb:getEle("username");
if(not ele)then
    win.messageBox("打开网页时出错");
    web.del(wb);
    do return false end;
end;

 

ele:setAttribute("value",_set["登陆用户名"])

 

--填密码
ele  = wb:getEle("password2");
ele:setAttribute("value",_set["登陆密码"]);

 

--自动登录
ele:submit();

 

wb:wait(); --等待提交成功
element.del(ele);
    
wb:show(true);

 


    ]]>
    </脚本区块>
    <脚本区块 语言="LAScript" 名称="init随机生成字符串" 延时="0" 启用="true" 编辑密钥="" 运行公钥="">
        <![CDATA[
string.random = function( n )--function表示这是一个函数,n是调用函数时输入到函数内部的一个参数。这里代表取几位长的字母组合
    local str = "精好荐呵提交收藏发看是这网新浪在有是发的"
    
    local from = 1;
    local to = string.len(str);
        
    local str2 = "";
    math.random(from,to); -- 先运行一次再次把随机数打乱
    
    local tab = {};
    local j = 0;
    
    math.random(from,to)
    for i=1,n,1 do--1,n表示从1循环到n,第二个1表示步进。
        j = math.random(from,to );--产生一个从1到26的随机数,调用math.random前要先初始化随机数种子

 


        if( true )then --中文字是两个字节 25指出中文字的字节长度加一(一个中文字等于两个字节)
            if(math.mod( j , 2) == 0)then --取到了后面的一个字节
                tab[i]=string.byte( str , j-1 )
                tab[i+1]=string.byte( str , j )
            else --取到了前面的一个字节
                tab[i]=string.byte( str , j )
                tab[i+1]=string.byte( str , j+1 )
            end;
            i = i +1;--for迭代器向前跳一位
        else --英文字
            tab[i] = string.byte( str , j )
        end;
    end;
    
    return string.char( unpack(tab) );--从tab表中取出第m个键,并和name连接
    -- string.char是自动把多个ascii值组成一个字符串,unpack是打散tab代替多个参数
end;
    

 


        
        ]]>
    </脚本区块>
    <脚本区块 语言="LAScript" 名称="初始化验证码样本" 延时="0" 启用="true" 编辑密钥="" 运行公钥="">
        <![CDATA[
--从数据区块读取base64编码的图片数据
codekey = ape:loadTable("验证码样本");
imgBinKey = {}; --这是一个图像数组,用来储存还原后的验证码样本的图片数据
--必须进行一个转换,因为codekey里面只是base64编码的普通字符串,而imgBinKey 将是真正的图片对象(二进制数据)

--还原到图片对象
toImage = function(k,v)
    local img9 = image.new();
    img9:setBytes( string.decode( v ,"") ,"*.png");
    imgBinKey[k] = img9;
end;

 

table.foreach(codekey,toImage);

 

        ]]>
    </脚本区块>
    <脚本区块 语言="LAScript" 名称="提交页面" 延时="0" 启用="true" 编辑密钥="" 运行公钥="">
        <![CDATA[

 

local n = math.mod( ape:runCount() , table.getn(_tabTitle) );
if(n==0)then n = 1 end;

 

local n2 = math.mod( ape:runCount() , table.getn(_tabTag) );
if(n2==0)then n2 = 1 end;

 

local title = _tabTitle[ n ]..string.random(3);
title = web.encodeURL(title)
    
_set["页面ID"] = _set["页面ID"] + 1;
local url = "http://www.yhhe.net/".._set' target=_blank>http://www.yhhe.net/".._set["页面ID"]..".html"; --把404错误页指向真实网址
local VIVI = "http://VIVI.sina.com.cn/collect/icollect.php?pid=www.yhhe.net&title="..title.."&url="..url' target=_blank>http://VIVI.sina.com.cn/collect/icollect.php?pid=www.yhhe.net&title="..title.."&url="..url

 

wb:go(VIVI);
wb:wait();

 

local ele = wb:getEle("desc");
ele:setTextin(title..string.random(3)); --多线文本框用 ele:setTextin() 函数修改文本

 

ele = wb:getEle("tag");
ele:setAttribute("value",_tabTag[n2])
    
elers = wb:getEle("rs");
eleimagehash = wb:getEle("imagehash");

 

if( elers and eleimagehash) then --有验证码
   local strhash  = eleimagehash:getAttribute("value")

 

    --下载验证码图片
    imgD = image.new();
    if (imgD:getURL("http://VIVI.sina.com.cn/collect/createimage.php?type=collect&imagehash="..strhash,"*.png' target=_blank>http://VIVI.sina.com.cn/collect/createimage.php?type=collect&imagehash="..strhash,"*.png") ~= true) then
        win.messageBox("下载图像失败","")
        image.del(imgD)
        do return false end;
    end;
    
    imgD:corp( 13 ,0 , 13 + 72 , 20 )
    --使用split函数分割图片
    img2,img3,img4,img5 = imgD:split(1,4);
    
    function test(imgX)
        imgX:bpp(1);
        imgX:bpp(24);
        imgX:corp( 5, 5, 13,15 )
        
    
        local limit = 10000000000;
        chr = "";
        win.messagePrint("正在检测图片,请稍候....")
        
        testimg = function(k,v)
            local n = imgX:testXX(imgBinKey[k]);
            if(n<limit)then
                limit = n;
                chr = k.."";
            end;
        end;
        table.foreach(imgBinKey,testimg);
        return chr;
    end;

 

    
    
    local strrs = test(img2)..test(img3)..test(img4)..test(img5);
    imgD:paint(100,100,200 ,50 )
    elers:setAttribute("value",strrs)
end;

 

-- 选择单选按钮中的第一个"公开"
ele,ele2 = web.getEle(wb,"ispub");
ele:setAttribute("checked","true")

 

ele = wb:getEle("Submit2");

 

--如果弹出对话框,按ID为7的按钮
web.msgProc = function(msg,hwnd) return 7; end; --[[回调函数,参数(对话框消息,web窗体句柄),返回值(对话框弹出后自动发送的按钮)]]

 

ele:submit();
wb:wait()
    
        ]]>
    </脚本区块>
    <数据区块>
        <验证码样本>
            <item key="1" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAMklEQVQImb2OQQoAMAjDUv//53rYEMc821sTKJVtAJAEVI1Oe2KkV9iuhUeM2RD8fw5M6dMSCWcCZjAAAAAASUVORK5CYII=" ktype="string" vtype="string" />
            <item key="2" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAOElEQVQImX3MQRIAMARDUXH/O/9ujKKmdl6CAYCViTW1NgC1lpkUovEnM18V8FXbRdUbDI3g1d8ciIgp+KeUL44AAAAASUVORK5CYII=" ktype="string" vtype="string" />
            <item key="3" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAO0lEQVQImY2OSQ4AIAgDqeH/Xx4PJIiiiT3RDpsBtgsAlCYKSWHVJ4KNawr4EaW8dlX8fWPh17vWVwWY3c8nAhuBnZsAAAAASUVORK5CYII=" ktype="string" vtype="string" />
            <item key="4" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANElEQVQImY2OSQoAIBDD0vn/n+tBcKGDmGMKJbLNgSTAdqWdVGv3sB6uIS1QrX2hr9ymKhn2lxURTzVrTwAAAABJRU5ErkJggg==" ktype="string" vtype="string" />
            <item key="6" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAOUlEQVQImY2PwQoAQAQF523+/5ffHqRsUTsXYgTZBiRRZKUC2O65Hgtyem4k0cVZ+toBHDbWc7cHL07xO98shs5PAAAAAElFTkSuQmCC" ktype="string" vtype="string" />
            <item key="7" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANklEQVQImXWOQQoAMAjDov//c3dQGFj1mFgIHBeSJooA0tG+KCdpWdRrrvSLQVs4BTrDo8/cB36VGBCIDRIBAAAAAElFTkSuQmCC" ktype="string" vtype="string" />
            <item key="8" value="iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAIAAAAGpYjXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAN0lEQVQImWP8//8/AwMDIyMjAwxARGAUA8P///+R2YwoqhgYELpx6qCeHUwoFiIBJjQ+RAU+ywGbEj7gy8pwpgAAAABJRU5ErkJggg==" ktype="string" vtype="string" />
        </验证码样本>
    </数据区块>
</ApeML>

 


 
 
   
 
网上赚钱申请指南
 

友情链接
个人主页
 
 
 
 

wel come to . 欢迎光临
宇宙浪仔