1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

[Thuật toán] _HttpRequest Bypass CloudFlare

Thảo luận trong 'Ý tưởng - Thuật toán' bắt đầu bởi Huân Hoàng, 17/5/17.

  1. Huân Hoàng

    Huân Hoàng Super Moderator Thành viên BQT Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    512
    Đã được thích:
    984
    ***Lưu ý: _HttpRequest UDF các phiên bản từ 12 trở lên đã bổ sung hàm _HttpRequest_BypassCloudflare vào làm hàm chuẩn của UDF.

    - Khi thực hiện request đến một trang, và trang đó có cài đặt CloudFlare để ngăn chặn spam, bot ... thì ta phải vượt được thằng CloudFlare này trước mới có thể tương tác với trang đó được. Ví dụ về 1 số trang có CloudFlare: http://clickers.info, http://www.anime47.com

    - Bài viết mang tính chất trình bày cách làm sao để thực hiện request khi 1 trang bắt phải có js mới thực hiện request được, trong khi WinHttp thì không thể làm được việc đó. Vì vậy ta chỉ có thể chuyển từ code js sang AutoIt để tìm tham số cần thiết cho việc Bypass thôi.

    Ví dụ: Giờ ta thực hiện Request đến trang http://www.anime47.com/

    Mã (AutoIt):
    $rq = _HttpRequest(2, 'http://anime47.com/')
    _FileWrite_Test($rq)
    Hãy thử chạy code, nó sẽ chỉ ra giống như sau và ta không thể GET, POST gì được trang chính cả.

    [​IMG]

    Xem html trả về thì thấy: ta phải request đến trang web đó với tham số jschl-answer thì mới vượt được. jschl-answer là 1 con số liên quan đoạn js sau:

    Mã (Javascript):
    t = t.match(/https?:\/\//)[0]
    var s,t,o,p,b,r,e,a,k,i,n,g,f, nABkGMQ={"jXMbIoVqeAj":!+[]+!![]+!![]+!![]+!![]}
    nABkGMQ.jXMbIoVqeAj-=+((!+[]+!![]+!![]+!![]+[])+(+!![]+![]))
    nABkGMQ.jXMbIoVqeAj*=+((!+[]+!![]+!![]+[]+[])+(!+[]+!![]))
    a.value = parseInt(nABkGMQ.jXMbIoVqeAj, 10) + t.length
    Những dòng !+[]+!![]+!![]+!![]+[])+(+!![]) ... là hoàn toàn ngẫu nhiên, mỗi lần request là nó ra khác. Thực ra nó là đại diện cho 1 dãy phép tính đấy.

    Ta có:
    • t = t.match(/https?:\/\//)[0] và t.length: nó là độ dài của tên trang muốn request, ví dụ http://anime47.com/ => anime47.com => 11
    • !+[] hoặc +!![] hoặc +![] là đại diện cho +1, còn +[] là đại diện cho +0, ví dụ: !![]+[] <=> +1 +0 => Tóm lại nếu trước [] không có dấu ! thì là 0
    • Dấu + giữa các đóng mở ngoặc đơn là nối số chứ không phải phép cộng, ví dụ: +(!![]+[])+(+!![]+![]) <=> +((+1 +0) + (+1 +1)) => 12 chứ không phải 1 + 2 = 3.
    => StringReplace hết đống +[]+![]+.... đó ta sẽ có dãy phép tính đơn giản, lấy ví dụ là đống js ở trên:

    nABkGMQ.jXMbIoVqeAj
    ta gọi nó là X cho gọn:
    X = !+[]+!![]+!![]+!![]+!![] => X = +1 +1 +1 + 1+ 1 = 5
    X -= +((!+[]+!![]+!![]+!![]+[])+(+!![]+![])) => X -= +((+1 +1 + 1+ 1 +0) + (+1 +1)) => X -= 42
    X *= +((!+[]+!![]+!![]+[]+[])+(!+[]+!![])) => X *= +((+1 +1 + 1 + 0 + 0) + (+1 +1)) => X *= 32

    => X = (5 - 42) * 32 = -1184​

    Vậy jschl-answer = parseInt(nABkGMQ.jXMbIoVqeAj, 10) + t.length = -1184 + 11 = -1173

    Đã tìm được tham số jschl-answer thì việc còn lại chỉ là thực hiện request bypass thôi, và ta có code sau: (trong đó mấy cái giá trị của jschl_vc, pass, challenge-form thì có thể lọc ra dễ dàng từ source Html)

    [​IMG]

    Hình minh hoạ 1 đoạn Console tìm jschl_answer:

    [​IMG]

    - Tải về UDF Bypass: http://q.gs/DqsOf

    - UDF _HttpRequest nếu chưa có: http://q.gs/DoG31

    - Hàm _HttpRequest_Bypass_Cloudflare trên là hàm chuẩn có thể vượt trang nào có cài CloudFlare. Khi gặp trang có CF thì đơn giản chỉ cần thêm 1 dòng _HttpRequest_Bypass_Cloudflare("Domain của trang muốn request") vào trước request tiếp theo mình muốn thực hiện là được.

    Cám ơn mấy thým đã đọc :D

    ----------------------------------------------
    *** Bổ sung Ghi Chú:

    - Có mấy thým hỏi vì sao bypass không được, iêm trao đổi một hồi thì mới biết là mấy thým điền URL cho hàm bypass là URL dẫn đến trang con. Như vậy là không đúng nhé.
    Phải điền URL của Domain vào hàm bypass mới đúng, sau khi bypass nó sẽ lưu 1 cookie tên _cf_clearance trong cache, cookie này sẽ giúp những request sau không bị dính chưởng của CloudFlare nữa.

    - Một vài ví dụ: Lấy source trang:

    Mã (AutoIt):

    _HttpRequest_Bypass_Cloudflare('https://www.elitepvpers.com')
    $rq = _HttpRequest(2, 'https://www.elitepvpers.com/forum/autoit/3719927-dllcall-problem-error-1-a.html')
    _FileWrite_Test($rq)
    Mã (AutoIt):

    _HttpRequest_Bypass_Cloudflare('https://xviata.com')
    $rq = _HttpRequest(2, 'https://xviata.com/en/login.php')
    _FileWrite_Test($rq)
     
  2. DuyMinh

    DuyMinh Thành viên năng động
    • 28/34

    Tham gia ngày:
    14/3/17
    Bài viết:
    125
    Đã được thích:
    38
    Tuyệt vời quá thím ơi! Bài nào của thím viết cũng chất quá... Thím ko theo chuyên ngành lập trình đúng là uổng thật. :D
     
  3. Huân Hoàng

    Huân Hoàng Super Moderator Thành viên BQT Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    512
    Đã được thích:
    984
    Rảnh rỗi viết chơi thôi thým ơi :v Nói chứ iêm viết mà không biết có ghi đúng thuật ngữ lập trình không nữa =))
     
    QuangToan thích bài này.
  4. QuangToan

    QuangToan Thành viên mới
    • 3/6

    Tham gia ngày:
    21/2/17
    Bài viết:
    26
    Đã được thích:
    19
    Bài viết chất lượng quá. Cảm ơn chủ thớt nhiều nhen. :D Mãi yêu <3
     
    Huân Hoàng thích bài này.
  5. baolo073

    baolo073 oOo
    • 3/6

    Tham gia ngày:
    28/11/16
    Bài viết:
    9
    Đã được thích:
    4
    Nơi ở:
    HCM
    ước gì có ng chỉ dạy cho http rì quớt
     
  6. DuyMinh

    DuyMinh Thành viên năng động
    • 28/34

    Tham gia ngày:
    14/3/17
    Bài viết:
    125
    Đã được thích:
    38
    Tự mò đi, thực hành nhiều thì quen thôi... Bác Huân Hoàng đã tối giản cái WinHTTP lắm rồi.
     
    Huân Hoàng and kakanet like this.
  7. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    170
    Đã được thích:
    155
    @baolo073
    DuyMinh chuẩn rồi, trừ những trang có javascript, captcha bảo vệ thì không có cách (hoặc rất khó), thì còn lại làm tương đối dễ, đọc bài hướng dẫn và làm theo thì trong vòng 1 tuần trở lại là có thể biết cách request đến mấy trang ở cấp độ dễ và trung bình rồi ;))

    WinHttp, _HttpRequest thường kết hợp với lọc chuỗi rất nhiều, hầu như code nào cũng có, bạn nên tham khảo thêm StringRegExp (hoặc dễ thì _StringBetween), nắm vững cơ bản của thằng StringRegExp này trước thì đọc bài Hướng dẫn mới thấy dễ, chứ không thì... hơi rối não ;))
     
    baolo073 and Huân Hoàng like this.
  8. baolo073

    baolo073 oOo
    • 3/6

    Tham gia ngày:
    28/11/16
    Bài viết:
    9
    Đã được thích:
    4
    Nơi ở:
    HCM
    thks bác nhiều! nói vậy chứ k ai dạy thì vẫn tự học mò mà
    mò mò lâu mới sướng, mà mò quài k ra cũng chán lắm bác
    nhưng vì cái mình làm, cơm áo gạo tiền nên cố gắng
    Chúc các bác thành công để iêm có chỗ hỏi hihi :))
     
    greatsky073 and kakanet like this.
  9. emga9xkc

    emga9xkc Thành viên năng động
    • 43/45

    Tham gia ngày:
    7/3/16
    Bài viết:
    212
    Đã được thích:
    166
    Hay quá bác ơi ^^
     
  10. greatsky073

    greatsky073 (@_@)
    • 8/11

    Tham gia ngày:
    22/5/17
    Bài viết:
    39
    Đã được thích:
    4
    Nơi ở:
    HCM
  11. thanh858036

    thanh858036 Thành viên mới
    • 1/6

    Tham gia ngày:
    21/5/17
    Bài viết:
    2
    Đã được thích:
    0
    mình muốn chuyển code sang ngôn ngữ khác nhưng khi lấy được hết jschl_answer rồi và thực hiện get link này để lấy cookie nhưng vẫn bị 5s @Huân Hoàng
    Mã (Text):
    http://anime47.com/cdn-cgi/l/chk_jschl?jschl_vc=0d804eafd51f8463788408adef2464b4&pass=1495605935.108-TXvWF%2BSZYY&jschl_answer=993
     
  12. Huân Hoàng

    Huân Hoàng Super Moderator Thành viên BQT Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    512
    Đã được thích:
    984
    Mình chỉ biết mỗi ngôn ngữ AutoIt thôi nên chắc không giúp bạn chuyển được rồi. Nói chung đủ các bước: Lấy jschl_answer thì như hướng dẫn trên, jschl_vc với pass thì lấy từ source HTML rồi request là được à, lưu ý là đặt cái request bypass trong vòng lặp để chắc chắn nó đã bypass chưa nhé. Nếu bạn dùng C# thì có thể hỏi liên hệ thým @emga9xkc :v
     
  13. emga9xkc

    emga9xkc Thành viên năng động
    • 43/45

    Tham gia ngày:
    7/3/16
    Bài viết:
    212
    Đã được thích:
    166
    :v
    cái trang anime này nó có cơ chế củ chuối. ko như các trang cloudflare khác
     
  14. Huân Hoàng

    Huân Hoàng Super Moderator Thành viên BQT Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    512
    Đã được thích:
    984
    iêm thấy thằng nào cũng như thằng nấy hà, ví dụ http://clickers.info chẳng hạn vẫn bypass bình thường :v . Không biết CF nó còn cơ chế tuỳ chỉnh nào khác tuỳ vào người dùng cài đặt không ? :v
     
  15. emga9xkc

    emga9xkc Thành viên năng động
    • 43/45

    Tham gia ngày:
    7/3/16
    Bài viết:
    212
    Đã được thích:
    166
    a`. do udf của bác pro thui :D chứ trang này nó có cơ chế check useragent vs cookie. nếu ko khớp là k qua được
     
  16. Huân Hoàng

    Huân Hoàng Super Moderator Thành viên BQT Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    512
    Đã được thích:
    984
    - Có mấy thým hỏi vì sao bypass không được, iêm trao đổi một hồi thì mới biết là mấy thým điền URL cho hàm bypass là URL dẫn đến trang con. Như vậy là không đúng nhé.
    Phải điền URL của Domain vào hàm bypass mới đúng, sau khi bypass nó sẽ lưu 1 cookie tên _cf_clearance trong cache, cookie này sẽ giúp những request sau không bị dính chưởng của CloudFlare nữa.

    - Một vài ví dụ: Lấy source trang:

    Mã (AutoIt):

    _HttpRequest_Bypass_Cloudflare('https://www.elitepvpers.com')
    $rq = _HttpRequest(2, 'https://www.elitepvpers.com/forum/autoit/3719927-dllcall-problem-error-1-a.html')
    _FileWrite_Test($rq)
    Mã (AutoIt):

    _HttpRequest_Bypass_Cloudflare('https://xviata.com')
    $rq = _HttpRequest(2, 'https://xviata.com/en/login.php')
    _FileWrite_Test($rq)
     
    DoiLangTuNo1 thích bài này.
  17. Huân Hoàng

    Huân Hoàng Super Moderator Thành viên BQT Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    512
    Đã được thích:
    984
    Đã fix bug :v
     

Chia sẻ trang này

Đang tải...