파충류를 통해 시나웨이보 데이터를 얻고 로그인을 시뮬레이션하는 것은 필수적이다.
1. POST 요청을 제출하기 전에 앞서 언급한 간단한 servertime 과 nonce 만 얻는 대신 servertime, nonce, pubkey, rsakv 의 네 가지 매개 변수를 얻어야 합니다
1. 1 암호화 방식의 변경으로 인해 RSA 모듈을 사용하겠습니다. RSA 공개 키 암호화 알고리즘에 대한 소개는 네트워크의 관련 내용을 참조하십시오. Rsa 모듈 다운로드 및 설치:
다운로드: /signup/signin.php) js /js/sso/ssologin.js 의 주소를 찾을 수 있는 소스 코드
1.3 로그인
로그인의 첫 번째 단계는 자신의 사용자 이름 (username) 을 추가하고 prelogin_url 의 링크 주소를 요청하는 것입니다.
Prelogin _ URL ='/SSO/prelogin.php? Entry = SSO& callback = sinassocontroller.prelogincallback & 기본값 =% s & amprsakt = mod& client = SSO login.js (v1.4.4)% username
Get 메서드를 사용하여 다음과 유사한 내용을 가져옵니다.
Sinassocontroller.prelogincallback ({"retcode": 0, "servertime":136204/kloc- "pcid": "gz-6664c 3d ea 2 bfda a3c94e8734c9e2c9e6a1f", "nonce":"IRYP4N", "pubbs
그런 다음 원하는 servertime, nonce, pubkey, rsakv 를 추출할 수 있습니다. 물론 pubkey 와 rsakv 의 값은 코드에 쓸 수 있으며 고정 값입니다.
2. 이전에는 사용자 이름이 BASE64 에 의해 계산되었습니다.
코드 복사 코드는 다음과 같습니다.
사용자 이름 _ = urllib.quote (사용자 이름)
Username = base64.encodestring (username) [:-1]
암호는 SHA 1 3 회 암호화를 사용하며 servertime 및 nonce 값을 추가하여 간섭을 일으킵니다. 즉 SHA 1 암호화를 두 번 한 후 결과에 servertime 및 nonce 값을 더한 다음 SHA 1 을 계산합니다.
최신 RSA 암호화 방법에서는 사용자 이름이 여전히 이전과 같이 처리됩니다.
비밀번호 암호화 방법은 원본과 다릅니다.
2. 1 먼저 RSA 공개 키를 생성합니다. 공개 키의 두 매개 변수는 모두 시나웨이보에 지정된 고정 값이지만 모든 문자열은 16 진수 16 입니다. 첫 번째는 첫 로그인 단계의 푸키입니다. 두 번째는 js 암호화 파일의' 1000 1' 입니다.
이 두 값은 16 에서 10 으로 변환되어야 하지만 코드에도 쓸 수 있습니다. 여기에 1000 1 을 직접 65537 로 씁니다. 코드는 다음과 같습니다.
코드 복사 코드는 다음과 같습니다.
RsaPublickey = int(pubkey, 16)
Key = rsa.publickey (rsapublickey, 65537) # 공개 키를 만듭니다.
Message = str (servertime)+'\ t'+str (nonce)+'\ n'+str (password) # 일반 텍스트 js 암호화 파일을 패치하여 얻을 수 있습니다.
Passwd = rsa.encrypt (메시지, 키) # 암호화
Passwd = binascii.b2a _ hex (passwd) # 암호화된 정보를 16 base 로 변환합니다.
2.2 요청 전달 URL:log in _ URL = '/SSO/log in. PHP?' Client = ssologin.js (v1.4.4)' 입니다
보낼 헤더 정보
코드 복사 코드는 다음과 같습니다.
PostPara = {
항목':' 웨이보',
게이트웨이':' 1',
:' 에서 왔습니다.
저장 상태':' 7',
사용자 티켓':' 1',
Ssosimplelogin':' 1' ,
Vsnf':' 1',
Vsnval ":",
Su': 사용자 이름을 인코딩합니다.
서비스':' 미니 블로그' ,
서버 시간': 서버 시간,
현재': 현재,
Pwencode': 'rsa2',
Sp': encodedPassWord,
인코딩':' UTF-8',
예측 테스트':' 1 15',
Rsakv': rsakv,
Url': '/ajaxlogin.php? Framelogin =1& Callback = parent.sinassocontroller.feedback URL callback' ,
Returntype':' 메타'
}
Rsakv 가 요청에 추가되고 pwencode 값이 rsa2 로 변경됩니다. 그렇지 않으면 이전과 동일합니다.
조직 매개변수, 게시 요청 로그인이 성공했는지 확인하려면 문장 위치를 참조할 수 있습니다. 대체 ("/ajaxlog.php? Framelogin =1& 콜백 = parent.sinassocontroller.feedback URL callback & Retcode= 10 1. Reason =% b5% C7% C2% BC% C3% FB% bb% F2% C3% DC% C2% EB% B4% ed% ce% F3 "입니다
Retcode= 10 1 이면 로그인이 실패합니다. 로그인에 성공하면 결과는 비슷하지만 retcode 값은 0 입니다.
3. 로그인이 성공하면 본문에 있는 대체 정보의 URL 이 다음에 사용할 URL 입니다. 그런 다음 GET 방법을 사용하여 서버에 위 URL 에 대한 요청을 보내고 이 요청에 대한 쿠키 정보를 저장합니다. 즉, 로그인 쿠키가 필요합니다.