获取接口信息
- 逆向apk,可能加密了
- Fiddler 4抓包
- 其他
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,下午验证了一下,可行,再细化一下
- Maven生成可以直接运行的jar包的多种方式
- Asprise Ocr 15.3 完美破解版,完美解决试用期弹出对话框的问题,同时去除了单词使用100次调用的问题
- curl -o
# 将文件下载到本地并命名为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”“