손수 너에게 아이돌에게 표를 긁는 것을 가르쳐 주겠다.아이돌 왔어요?프로그래머가 왔다!Charles 실전

4258 단어
어떤 사람들은 프로그래머가 낭만을 모른다고 말하고, 또 어떤 사람들은 여신/남신이라도 직업이 다르면 서로 상관하지 않는다고 주장한다.더군다나 어떤 여자/남자는 자기가 좋아하는 작은 오빠/작은 언니가 있는데 흑은 우리가 프로그래머로서 그들의 덕질의 즐거움을 모른다.
OK, 우리는 스타를 쫓는 그 즐거움을 모를 수도 있지만, 당신들을 즐겁게 할 수 있다면.그럼 우리도 좋아요.
다음은 당신의 덕질 짝에게 어떻게 잘 보이는지 실전에서 보여 드리겠습니다.
(안드로이드 핸드폰에서만 테스트를 해봤지만 아이폰은 일리가 있을 거예요)
  • 우선, 투표하고 싶은 APP/홈페이지/애플릿을 설치할 핸드폰이 필요합니다.
  • 컴퓨터에 클러치 소프트웨어를 설치했는데 여기서 내가 사용하는 것은Charles이다.
  • Postman 등 네트워크 요청을 시뮬레이션할 수 있는 도구입니다.

  • 핸드폰에서 가방 데이터를 캡처하다
    Charles를 켜고 핸드폰으로 연결하세요.
  • 메뉴에서 Proxy=> Proxysetting=> 자신의 포트를 보기(일반적으로 8888)
  • 그리고 자신의 IP 주소를 보고 window는 CMD에 ipconfig를 입력하고, Mac/Linux는terminal에 ifconfig를 입력하고 핸드폰에 설정
  • 자신의 IP 주소를 입력하면 됩니다.그림은 나의 네이티브 IP 주소이다.
    이럴 때 이런 화면을 볼 수 있어요.
    왼쪽 요청의 주소가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

    좋은 웹페이지 즐겨찾기