QQ 메일박스 조작 시뮬레이션

5104 단어 linux 명령
기술을 배우는데 어떻게 서버를 사용할 수 없습니까? 아리운 서버는 현재 20% 할인 혜택을 받고 있으며, 더 많은 쿠폰을 한정 지급하고 있습니다.https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=7czske1k&utm_source=7czske1k
프로젝트는 프로그램으로 QQ메일을 조작해서 몇 가지 작업을 수행해야 한다. 현재python으로 QQ메일의 조작 인터페이스를 실현한다.
로그인
아날로그 메일을 통해서.qq.com 로그인의 http 요청은 로그인 작업을 실현하는데 주로 로그인 작업에 필요한 SID, 즉session id를 얻는 것이다. 이 절차가 가장 관건적이고 과정도 비교적 복잡하다. 다음은 하나하나 설명한다.
단계 1 메일박스 로그인 페이지를 불러오고 단계 1 에 필요한 xlogin 주소를 가져옵니다
로그인한 form 앞에 iframe 탭이 있습니다. 이 탭은 한 주소에 방문하여 쿠키를 얻습니다. 첫 번째 단계는 이 주소를 얻는 것입니다. 방문한 후에 되돌아오는 쿠키를 저장하는 것입니다. 바로 아래의 물건입니다.
2단계 check 인터페이스에 접근하여 인증 코드가 필요한지 확인
일부 QQ번호는 로그인 지역을 바꾸거나 여러 번 틀리면 인증번호를 입력해야 할 수도 있다.로그인 페이지에서 QQ번호를 입력한 후 js 코드는 아래의 주소에 방문하여 인증코드가 필요한지 확인한다(XXXX는 QQ번호이고 YYYY는 방문 경로의 번호일 수 있으며 단계는 찾을 수 있고 ZZZZZ도 단계1의 쿠키이다).
"https://ssl.ptlogin2.qq.com/check?regmaster=&pt_tea=1&pt_vcode=0&uin=XXXX&appid=YYYY&js_ver=10131&js_type=1&login_sig=ZZZZ&u1=https%3A%2F%2Fen.mail.qq.com%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26vm%3Dwpt%26ft%3Dloginpage%26target%3D&r=0.4220805915914432"

되돌아오는 결과는 다음과 같다. 괄호 안의 1위가'1'이면 인증코드가 필요하다.'0'이면 2위는 뒤에 있는 각 인터페이스에 사용할 인증코드이고 3위는 QQ번호의 16진법으로 4위 뒤에 있는 인터페이스도 사용해야 하며 5위는 아직 명확하지 않다.
ptui_checkVC('0','!TIH','\x00\x00\x00\x00\xa4\x3f\xcf\xb1','43bb5c434b0bfd3e7efc71a4deca8de60fc877e5688b5a6a088eeed858d79ff00d7e70e7e795f4eef98dbd8c4cd0110db7938b5833bc4595','0');

3단계https의 로그인 인터페이스 접근
이것은 가장 번거로운 단계이다. 이 단계는 계정 비밀번호를 입력한 후 방문하는 첫 번째 인터페이스에 대응한다. 텐센트와 프로그램은 이 단계에서 JS로 비밀번호를 다중 암호화했다. RSA 암호화를 포함하여 미친 듯이 행동했다.그래서 이 단계는 반드시 이 일련의 암호화 알고리즘을 실현해야 한다.원래python으로 js에 대해 한 세트를 실현하려고 했는데, 한 단락을 썼는데, 포기하고 작업량이 너무 많았다.뒤에서python에서 js 코드를 실행하는 방법을 찾았고python-spidermonkey를 찾았습니다.
이어서 c_login_2.js의 코드를 꺼내서EncryptionRSA 모듈을 찾아내서(일부 도구로 포맷하고 역장님 집에 있음) 안에 DOM이 필요한 부분을 제거하고(spidermonkey에서DOM을 지원하는 방법을 찾지 못했다).마지막으로 밑에 이런 코드를 만들어볼게요.
//       ,    
...
en_password = $.Encryption.getEncryption("xxxx_password", "xxxx_salt", "xxxx_vcode",  xxxx_is_save);
en_password;

위의 전체 코드를 문자열로 삼아python에서 호출합니다.여기의salt는 바로 위에서 16진으로 표시한 QQ번호다.
#!/usr/bin/env python
# encoding: utf-8
import spidermonkey

def get_en_password(password, salt, vcode):
    sm_rt = spidermonkey.Runtime()
    sm_cx = sm_rt.new_context()
    script = lib.js_content.content.replace("xxxx_password", password)
    script = script.replace("xxxx_salt", salt).replace("xxxx_vcode", vcode)
    script = script.replace("xxxx_is_save", "false")
    return sm_cx.eval_script(script)

위의 함수를 통해 암호화된 비밀번호를 얻고 앞에서 얻은 쿠키의 정보와 통합하여 https://ssl.ptlogin2.qq.com/login 인터페이스에 접근하여 네 번째 단계에서 방문할 주소와 쿠키를 획득합니다.(이건 완전히 난관 타개 게임이야.)비슷한 결과를 얻어 네 번째 단계로 들어간다.
"ptuiCB('0','0','https://ssl.ptlogin2.mail.qq.com/check_sig?pttype=1&uin=2755645361&service=login&nodirect=0&ptsigx=0b2c4d8054a80b793c58fda08b89dfc6b6921442063ba599053f23ea9189c853827376c48101859e5031faddcd98b83a76d85ddb860ce5c67b82e0b9943fcf86&s_url=https%4A%2F%2Fen.mail.qq.com%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26vm%3Dwpt%26ft%3Dloginpage%26target%3D%26account%3D2755645361&f_url=&ptlang=1033&ptredirect=101&aid=522005705&daid=4&j_later=0&low_login_hour=0&regmaster=0&pt_login_type=1&pt_aid=0&pt_aaid=0&pt_light=0&pt_3rd_aid=0','1','Sign-in successful!', '⊥qz●‰');"

4단계 로그인 정보 확인(대략)
이 단계는 세 번째 결과 열에 있는 주소를 방문하는 것입니다.간단해 보이지만 여기 구덩이가 있어요. 매개 변수 중nodirect=0. 즉, 방문한 후에 방향을 바꾸면 원하는 쿠키와 결과를 찾을 수 없어요. 두 시간 넘게 걸려서 발견했어요.nodirect=0nodirect=1로 변경하고 방문하면 필요한 쿠키를 얻을 수 있습니다.
5단계는 SID를 얻기 위한 최종 소개 페이지에 액세스합니다.
드디어 보스 앞에 갔네. 쉽지 않네.이 단계도 사실 간단합니다. 한 단계에 찾은 쿠키 방문https://mail.qq.com/cgi-bin/login?vt=passport&vm=wpt&ft=loginpage&target=&account=XXXX을 추가하면 됩니다.
그러나 여기서 쿠키에 대응하는 주소를 주의해야 한다. mail.qq.comqq.com의 쿠키는 중복된 것이므로 qq를 방지해야 한다.com의 쿠키가 메일을 덮어씁니다.마지막으로 쿠키와sid를 한 무더기 받아서 로그인 완료.

좋은 웹페이지 즐겨찾기