손수 너에게 아이돌에게 표를 긁는 것을 가르쳐 주겠다.아이돌 왔어요?프로그래머가 왔다!Charles 실전
OK, 우리는 스타를 쫓는 그 즐거움을 모를 수도 있지만, 당신들을 즐겁게 할 수 있다면.그럼 우리도 좋아요.
다음은 당신의 덕질 짝에게 어떻게 잘 보이는지 실전에서 보여 드리겠습니다.
(안드로이드 핸드폰에서만 테스트를 해봤지만 아이폰은 일리가 있을 거예요)
핸드폰에서 가방 데이터를 캡처하다
Charles를 켜고 핸드폰으로 연결하세요.
이럴 때 이런 화면을 볼 수 있어요.
왼쪽 요청의 주소가https에서 온 것을 볼 수 있습니다. 암호화되었고, 우리의 요청 API도 unknown으로 바뀌었습니다.만약 우리가 SSL의 내용을 얻으려면 휴대전화에 인증서를 설치하고 권한을 가져야 한다.
메뉴에서 Help => SSL Proxying => Install Charles Root 을 선택합니다.자신의 장치에 따라 선택하다.휴대전화라면 네 번째를 선택한다.그림과 같다.
그리고 이게 뜨더라고요.
핸드폰에서 크롬 브라우저(시스템의 기본 브라우저는 인증서를 식별할 수 있어 설치할 수 없음)로chls에 접근합니다.pro/ssl에서 인증서를 다운로드할 수 있으며 알림에 따라 설치한 후.전에 unknown의 API가 보이게 되었습니다!
이후 핸드폰에서 한 걸음 한 걸음 조작하면 여기서 힌트를 받는다.
시뮬레이션 요청
우리가 원하는 데이터를 얻은 후에 우리는 어떻게 해야 합니까?내가 사용하는 이 작은 프로그램으로 말하자면, 2분마다 한 번씩 꽃을 훔칠 수 있고, 한 번에 다섯 명을 훔칠 수 있다.그런데 저는 매일 출근해서 시시각각 핸드폰을 꺼내서 아이돌에게 투표를 한다고요?안 좋을 것 같은데?
이럴 때 핸드폰에서 먼저 투표를 하면 캐롤스의 왼쪽 메뉴 표시줄에서 요청을 받을 수 있다.이 때 시뮬레이션을 하려면 오른쪽 단추를 눌러서 Repeat을 선택해야 합니다.중복 투표를 할 수 있다.
오른쪽 콘텐츠를 클릭하면 두 개의 인자를 볼 수 있습니다. 하나는 Openid입니다. 이것은 이 프로그램의 유일한 인코딩입니다. 이것은 이 프로그램의 신분증에 해당합니다.또 하나는mid, 훔친 스타의 번호다.
네가 스타 5명을 훔쳐서 API를 5번 기록하고 2분마다 이 API를 요청하면 어떤 꽃도 놓치지 않을 수 있다.
찰스 계속 켜야 되나?
답은 당연히 부정적이지!이럴 땐 포스트맨이라는 다른 도구가 필요해.HTTP 요청을 시뮬레이션할 수 있는 도구입니다.요청한 API 주소를 입력하고, 설정 파라미터와 헤더 등을 입력하면 발송에 성공할 수 있습니다.
쉬운 방법 없을까요?있다!Charles 에서 요청 지점을 마우스 오른쪽 버튼으로 클릭하고 Copy cURL Request 를 선택합니다.
그리고 포스트맨에서 가장 위에 있는 Import를 클릭하세요.복사한 주소를 붙여넣기 위해 Paste Raw Text를 선택합니다.
그리고 오른쪽 창에 시뮬레이션된 요청이 생성됩니다. Send를 클릭하세요!훔치기 성공!
한 걸음 더 나아가 모든 것을 자동화하다.
이때, 너는 내가 왜 반드시 2분 간격으로 한 번 시켜야 한다고 생각하니?나는 프로그램을 자동화할 수 없습니까?
여기서 nodejs를 예로 들자.cURL 명령을 실행하여 API를 호출합니다.
var exec = require('child_process').exec;
var sys = require('sys');
const hasFlowers = [];
// , mid 。
const idolsIds = [];
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
async function createCurlRequestLink() {
const startTime = new Date();
// OpenId
const openid = 'XXXX';
await asyncForEach(idolsIds, async (number) => {
// for(let number = 1150; number<=3000; number++){
const a = `curl XXXXXXX '{\"openid\":\"${openid}\",\"mid\":${number}}' --compressed`;
await sleep(280);
exec(a, (error, stdout, stderr) => {
try {
console.log(stdout);
const json = JSON.parse(stdout);
if (json.status > 0) {
hasFlowers.push(number);
console.log(` : ${hasFlowers.length * 8}`);
}
} catch (err) {
console.log(err);
}
});
});
const endTime = new Date();
console.log(` : ${(endTime - startTime) / 1000}`);
}
createCurlRequestLink();
// 2
setInterval(createCurlRequestLink, 120000);
그리고 노드 파일 이름으로 그것을 실행할 수 있습니다.
서버에 버리고 백그라운드 프로세스에 화면을 놓고 뛰어라.
부지불식간에 수십만 위안의 꽃을 이미 손에 넣었다!
원리는 무엇입니까?개발자는 보호할 수 없나요?
애플릿이든 앱이든 모두 당신의 핸드폰에 있습니다.그것은 원격 서버와 데이터 상호작용을 해야 한다. 즉 API 요청이다.본질적으로 우리는 단지 시뮬레이션 요청을 한 번 했을 뿐, 너의 휴대전화를 클릭한 것과 같다.방금 전까지만 해도 우리는 합리적인 조작 범위 내에서 허가를 받았다.어떤 부정행위도 하지 않고 단지 꽃을 훔치는 행위를 자동화시켰을 뿐이다.새벽에도 컴퓨터로 우리 대신 꽃 훔쳐줄 수 있어.
개발자는 보호할 수 있을까요?이 답안은 긍정적이다.예를 들어 모든 Openid에 대해 출처 모니터링을 하고 장치에 접근하는 모니터링을 하며 요청할 때 추가 파라미터를 가지고 출처를 판단한다.단기간 내에 Openid가 여러 장치를 교체했다면 의심스럽다고 표시됩니다.
그러나 가치가 있는지의 여부는 또 다른 토론의 범주다.
총결산
여기 보시면 마음대로 여신/남신에게 표를 긁어줄 수 있어요!투표를 기다리는 시간을 낭비하지 않고 만족을 얻었다.만약 네가 이 문장을 다 보았다면, 축하한다. 그리고 새로운 지식도 배웠다.
불필요한 번거로움을 피하기 위해 나는 내가 사용하는 투표 소프트웨어를 숨겼다.
전재 대상:https://juejin.im/post/5be45d83e51d454b80298a6e
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.