某刷课

接的单子,老板大气给了200后不见踪影

无任何难度,android rsa,第二次加入了人脸识别,幌子,直接用实名的人脸绕过


from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64,requests

KEY='MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3Vsn6GuSivbc0mh1QFDjFVMdkb7lcAfsGdw6WuR0yM4GBP5MCJr301VX5aQucOKmpnpR4mhMSaCG0AVbK9VBNlghFcihfn3u4uMPGtqtXzKSJNZmLrzrS7Xd0ecUcAGHAnpEnXXgoUoYrAkthwKTBDayEIygQBrq+nMX53gST9QIDAQAB'
def RSA_encrypt(clear):
    if clear=='':
        return '' 
    rsa_key = RSA.import_key(base64.b64decode(KEY))
    cipher = PKCS1_v1_5.new(rsa_key)
    return base64.b64encode(cipher.encrypt(str(clear).encode('utf-8'))).decode()

def course_list():
    url='http://app.lfanpei.com/api/index/apiSafeLearning/learningCourseDetail'
    data={'apiToken':'','classId':classid,'courseId':courseId}
    data={k:RSA_encrypt(v) for k,v in data.items()}
    data['apiToken']=TOKEN
    #print(data)
    result=requests.post(url,data=data)
    # print(result.text)
    cl=[]
    for i in result.json()['data']['apiSafeCourseDetail']['safeCourseChaptersList']:
        for j in i['apiSafeCourseviewList']:
            if j['faceContrastTimes']!=1:
                face_Comparison()
                return 0
            if j['viewOver']!=1:  # 1 为已完成的
                cl.append([j['viewId'],TIME,j['courseViewHours'],j['viewTitle']])
            else:
                print('已完成',j['viewTitle'])

    return cl

def learm_update():
    url='http://app.lfanpei.com/api/video/apiSafeView/saveVideoPlayProgress'
    
    data={'apiToken':'','classId':classid,'courseId':courseId,'viewfileId':viewfileid,'curPercent':'100','curChapter':'0','viewTime':TIME,'curView':'1','viewOver':'1'}
    data={k:RSA_encrypt(v) for k,v in data.items()}
    data['apiToken']=TOKEN
    result=requests.post(url,json=data)
    print('\t'+result.text)
    if '不符' in result.text:
        print('--------------- id ',viewTitle,courseViewHours)
        print('exit-----------')
        exit()
def learm_begin():
    url='http://app.lfanpei.com/api/video/apiSafeView/updateVideoBeginTime'
    data={'apiToken':'','classId':classid,'courseId':courseId,'viewfileId':viewfileid,'ip':'127.0.0.1'}
    data={k:RSA_encrypt(v) for k,v in data.items()}
    data['apiToken']=TOKEN
    result=requests.post(url,data=data)
    print('\t'+result.text)
def learm_list():
    data = {'apiToken': TOKEN}
    result = requests.post('http://app.lfanpei.com/api/index/apiSafeLearning/oneClickLearningIndex', data=data)
    # print(result.text)
    ll=[]
    for i in result.json()['data']['learningIndexData']['classmateLearningList']:
        ll.append([i['classId'],i['name']])
        # print(i['classId'],i['name'])

    return ll

# 人脸图片对比
def face_Comparison():
    c=requests.get(get_face_img()).content
    files={'headPictureFile':c}
    data={'apiToken':'',
        'buisnessId':classid,
        'buisnessType':1,
        'viewId':courseid,
        'courseId':courseId
    }
    data={k:RSA_encrypt(v) for k,v in data.items()}
    data['apiToken']=TOKEN
    result=requests.post('http://app.lfanpei.com/api/liveCheck/apiSafeFace/faceComparison',data=data,files=files)
    print(result.text)
def get_face_img():
    url='http://app.lfanpei.com/api/user/apiSafeUserInfo/queryUserClassInfo'
    data={'apiToken':'','classId':classid}
    data={k:RSA_encrypt(v) for k,v in data.items()}
    data['apiToken']=TOKEN
    result=requests.post(url,data).json()
    # print(result)
    return result['data']['apiClassInformationPo']['apiUserDataSubmit']['picture']


# 暂时无用
# def get_classid():
#     url='http://app.lfanpei.com/api/user/apiSafeUserInfo/dataRevision'
#     result=requests.post(url,data={'apiToken':TOKEN}).json()
#     return result['data']['classList'][0]['class_id']
TOKEN='Api eyJhbGciOiJIUzUxMiJ9.eyJhcGlfbG9naW5fdXNlcl9rZXkiOiIzODgwOCNhNzUwMzljYy1mYjUyLTRjZWUtYjY5Ny0zMzRlMTI2YjNjNmIifQ.yQpzqsx1xP4AEmPh_goIQJY61mVTcGWS3Wdqx5FRAgrC89Mm5g_-OYWSTK_kR0bTELxxyoRvDkhxV1n-iOpweQ'
courseId='1603'
classid='279'
viewfileid='3410'
# 设置一个时间 200000——6000000
TIME='510000'
# face_Comparison()


# learm_begin()
# learm_update()


# print(get_face_img())


learm_type=1  # 1->一键学习
if __name__ == '__main__':
    if learm_type:
        for classid,learm_title in learm_list():
            print('当前学习classid',classid,learm_title)
            for viewfileid,TIME,courseViewHours,viewTitle in course_list():
                print(viewfileid,TIME,courseViewHours,viewTitle)
                # print('\t当前课程courseid',courseid,viewTitle,courseViewHours)
                learm_begin()
                learm_update()
    else:
        if TOKEN and courseid:
            for courseid,TIME,courseViewHours,viewTitle in course_list():
                print('当前课程courseid',courseid,viewTitle,courseViewHours)
                learm_begin()
                learm_update()


# eyJhbGciOiAiTm9uZSJ9.eyJhcGlfbG9naW5fdXNlcl9rZXkiOiAiMzc0ODAjODAzYzk3MTItZTYwOC00YTM4LWE1ZjgtNGE5ZGQzNDQxYjA3In0K.