zoukankan      html  css  js  c++  java
  • Shell脚本模拟用户行为刷App积分,学习娱乐之用,再加图像数字识别验证码登录

    获取接口信息

    1. 逆向apk,可能加密了
    2. Fiddler 4抓包
    3. 其他

    App或网站的积分规则

    这里写图片描述

    网站登录行为中,如果添加验证码的话,很麻烦,这里先跳过。

    效果图

    这里写图片描述
    这里写图片描述这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

    这里写图片描述

    为减少用户账号的异常特征,收藏、订阅、评论之后都删除,日志记录没办法了
    积分可以兑换,有个排名,也是一个接口调用而已,仅供个人学习、研究之用,请勿用于商业用途。

    实现过程

    模拟App登录

    已经确定登录的URL和参数USERNAME&PASSWORD,POST提交,返回一个json,包含token,以下的操作均使用token代替用户名和密码作为参数

    USERNAME=xxxxxx
    PASSWORD=xxxxxx
    login_url=xxxxx
    #模拟登录
    echo '++++++++++++++++++++++++++++登录++++++++++++++++++++++++++++++++++++++'
    data=`curl -d "USERNAME=$USERNAME&PASSWORD=$PASSWORD" "$login_url"`

    使用curl -d模拟POST提交,使用jq解析json格式的data,并替换掉两边的双引号

    token=`echo $data|jq '.data'|sed 's/"//g'`
    search_url=xxxxxx
    #模拟获取文章
    echo '++++++++++++++++++++++++++++获取文章++++++++++++++++++++++++++++++++++++++'
    contents=`curl -d "&accessToken=$token&cuPage=1&adcode=xxxx" "$search_url"`
    
    #设置操作的文章数
    for_times=15
    for((ii=0;ii<$for_times;ii++));
    do
        jj=`expr $ii + 1`
        content_title_arr[$ii]=`echo $contents|jq '.data.abc['$jj'].title'`
        content_websitename_arr[$ii]=`echo $contents|jq '.data.abc['$jj'].websitename'`
        content_id_arr[$ii]=`echo $contents|jq '.data.abc['$jj'].articleId'`
        content_type_arr[$ii]=`echo $contents|jq '.data.abc['$jj'].type'`
    done
    #获取文章中相应字段
    echo '++++++++++++++++++++++++++++处理所需字段++++++++++++++++++++++++++++++++++++++'
    for((i=0;i<${#content_id_arr[*]};i++))
    do
        content_id_arr[$i]=`echo ${content_id_arr[$i]} |sed 's/"//g'`
        content_type_arr[$i]=`echo ${content_type_arr[$i]} |sed 's/"//g'`
        content_title_arr[$i]=`echo ${content_title_arr[$i]} |sed 's/"//g'`
        content_title_arr[$i]=`echo ${content_title_arr[$i]} |sed 's/[ //g'`
        content_title_arr[$i]=`echo ${content_title_arr[$i]} |sed 's/ ]//g'`
        content_websitename_arr[$i]=`echo ${content_websitename_arr[$i]} |sed 's/"//g'`
    done
    
    #模拟阅读文章
    echo '+++++++++++++++++++++++++++阅读文章+++++++++++++++++++++++++++++++++++'
    #for((i=0;i<1;i++))
    for((i=0;i<${#content_type_arr[*]};i++))
    do
        content_detail=`curl -d "articleId=${content_id_arr[$i]}&TYPE=${content_type_arr[$i]}&accessToken=$token" "$content_detail_url"`
        index=$((i+1))
        echo '++++++++++++++++++++++++++++阅读文章:第'$index'篇    '${content_title_arr[$i]}
    done
    

    其它接口类似

    完善


    使用crontab设置一个定时任务

    这里写图片描述

    在以上各个字段中,还可以使用以下特殊字符:
    星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
    逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
    中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
    正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。


    sleep 1 睡眠1秒
    sleep 1s 睡眠1秒
    sleep 1m 睡眠1分
    sleep 1h 睡眠1小时


    直接把用户名和密码明文写sh里不太好,简单可逆加密,遇到技术好的还是藏不住

    一步加密代码:
    echo "ibase=16; $(echo "gtalk@gmail.com" |xxd -ps -u)" |bc
    得到:137514765985002236391382606438443478282
    
    解密代码:
    dc -e 137514765985002236391382606438443478282P
    得到:gtalk@gmail.com

    curl -d 显示的信息太多,修改为进度条样式:
    curl  -# -d

    修改后的脚本(u,p,r为错误占位值)

    #!/bin/bash
    u='393938972265586578744682'
    p='30765298571722054944135433354'
    r='167852555465201814248138704241983574790873686482887295919533834'
    login_url=`dc -e ${r}P`'login/v1/loginCheck.do'
    search_url=`dc -e ${r}P`'search/v1.do'
    content_detail_url=`dc -e ${r}P`'search/v1/getContentById.do'
    N=`dc -e ${u}P`
    B=`dc -e ${p}P`
    #模拟登录
    echo '++++++++++++++++++++++++++++登录'
    data=`sleep 1s;curl -# -d "USERNAME=$N&PASSWORD=$B" "$login_url"`
    token=`echo $data|jq '.data'|sed 's/"//g'`
    #模拟获取文章
    echo '++++++++++++++++++++++++++++获取文章'
    contents=`sleep 1s;curl -# -d "accessToken=$token&cuPage=1&adcode=370102" "$search_url"`

    上面的积分中,网站登录积分在shell实现较复杂,上网搜一圈,初步思路是Asprise-OCR-Java识别验证码,curl -D /curl -b 保存cookies/调用cookies 维持同一个session,下午验证了一下,可行,再细化一下

    1. Maven生成可以直接运行的jar包的多种方式
    2. Asprise Ocr 15.3 完美破解版,完美解决试用期弹出对话框的问题,同时去除了单词使用100次调用的问题
    3. curl -o
    4. # 将文件下载到本地并命名为mygettext.html
      curl -o mygettext.html http://www.abc.com/ual/gettext.html
    sleep_time=1s
    #模拟PC登录
    #1.获取cookies
    pc_result_data_1=`sleep $sleep_time;curl -# -D pccookies $URL/login.do?redirectUrl=$URL/`
    #2.保存验证码图片
    pc_result_data_2=`sleep $sleep_time;curl -# -b pccookies -o code.png $URL/validateImg.do?d=0.48115387154622147`
    #3.删除已存在的储存验证码txt
    code_txt='code.txt'
    path_=`pwd`
    if [  -f "$code_txt" ]; then
        rm -f ${path_}/code.txt
    fi
    #4.识别验证码图片
    export LD_LIBRARY_PATH=/usr/local/games/score;
    pc_result_data_3=`sleep $sleep_time;java -jar Recognize-1.0-SNAPSHOT-jar-with-dependencies.jar ${path_}/code.png`
    echo $pc_result_data_3
    #5.模拟PC登录
    N=`dc -e ${u}P`
    B=`dc -e ${p}P`
    code=`cat code.txt`
    if [[ "$code" =~ "*" ]];then
        code_arr[0]=`echo $code|sed 's/*/9/g'`
        code_arr[1]=`echo $code|sed 's/*/0/g'`
    else
        code_arr[0]=$code
    fi
    for((ii=0;ii<${#code_arr[*]};ii++));
    do
        pc_result_data_4=`sleep $sleep_time;curl -# -b pccookies  -d "userId=$username_base64&password=$password_base64&remember=true&validCode=$code_arr[$ii]&redirectUrl=$URL/" "$URL/loginCheck.do"`
        pc_result_data_5=`sleep $sleep_time;curl -# -b pccookies "$URL/main.do"`
    done

    问题1:

    >>> UnsatisfiedLinkError occurs. To fix it, visit http://asprise.com/ocr/fix-link-error?os=Linux
    Dependency information:     linux-vdso.so.1 =>  (0x00007fffd3532000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fdb4f73b000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fdb4f532000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fdb4f22c000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fdb4efa8000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fdb4ec13000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fdb51bbf000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fdb4e9fd000)
    LD_LIBRARY_PATH=/usr/local/games/score
    java.library.path=/usr/local/games/score:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
    OS: Linux 2.6.32-431.el6.x86_64 amd64
    Linux host-10-20-5-112 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
    JVM: 1.7.0_67-b01 64bit by Oracle Corporation
    
    java.lang.UnsatisfiedLinkError: /tmp/libaocr_x64.so: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /tmp/libaocr_x64.so)
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1851)
        at java.lang.Runtime.load0(Runtime.java:795)
        at java.lang.System.load(System.java:1062)
        at com.asprise.ocr.util.OcrLibHelper.loadOcrLib(OcrLibHelper.java:64)
        at com.asprise.ocr.Ocr.<clinit>(Ocr.java:474)
        at com.gch.Test01Recognize.recognize(Test01Recognize.java:36)
        at com.gch.Test01Recognize.main(Test01Recognize.java:30)
    
    >>> Relax, it's easy to fix: http://asprise.com/ocr/fix-link-error?os=Linux
    Exception in thread "main" java.lang.UnsatisfiedLinkError: com.asprise.ocr.Ocr.doSetup(Z)I
        at com.asprise.ocr.Ocr.doSetup(Native Method)
        at com.asprise.ocr.Ocr.setUp(Ocr.java:508)
    

    解决:下载 libstdc++.so.6
    export LD_LIBRARY_PATH=/usr/local/libstdc++.so.6文件地址;

    问题2:NOTICE: Asprise OCR - strictly for evaluation only. All Rights Reserved (C) asprise.com NOTICE: this evaluation version replaces all recognized ‘q’, ‘x’, ‘0’, and ‘9’ occurrences with asterisk (‘*’).
    解决:破解或者echo $code|sed ‘s/*/9/g 替换
    问题3:登录后没有登录分数,排查后发现积分拦截的路径不是loginCheck.do,而是登录成功后main.do

     pc_result_data_4=`sleep $sleep_time;curl -# -b pccookies  -d "userId=$username_base64&password=$password_base64&remember=true&validCode=$code_arr[$ii]&redirectUrl=$URL/" "$URL/loginCheck.do"`

    解决:
    pc_result_data_5=sleep sleep_time;curl -# -b pccookies "URL/main.do”“


    总结起来就是接口地址参数收集,返回json解析,使用shell实现而已
    仅供个人学习、研究、娱乐之用

  • 相关阅读:
    创建索引锁的表
    安装STS报错(三)
    安装STS报错(二)
    安装STS报错(一)
    Linux Top使用说明
    平实给力的写作指导入门手册——leo鉴书57
    Flex中配置FusionCharts
    Java Web项目中缺少Java EE 6 Libraries怎么添加
    Java Web项目结构
    MyEclipse中修改项目运行地址栏中项目名称
  • 原文地址:https://www.cnblogs.com/llhl/p/9648648.html
Copyright © 2011-2022 走看看