记录下mitmproxy做代理,实现淘宝登陆

2019年1月1日我要上班很慌啊。。这天气应该躺在被窝里美滋滋的睡觉。今天上班不知道干啥,闲来无事,记录下之前使用mitmproxy实现淘宝登陆。不多说,分割线------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一 mitmproxy安装

mitmproxy:就是用于 MITM 的 proxy,MITM 即中间人攻击(Man-in-the-middle attack)。用于中间人攻击的代理首先会向正常的代理一样转发请求,保障服务端与客户端的通信,其次,会适时的查、记录其截获的数据,或篡改数据,引发服务端或客户端特定的行为。

安装方式: linux,mac,windows都一样,pip install  mitmrpoxy

参考教程:https://blog.wolfogre.com/posts/usage-of-mitmproxy/

各位最好按照参考教程过一遍熟悉每个func的定义,基本都能跑通。最后那一步addons是关键,需要给你定义的class运行放进去。

mitmproxy设置:mitmdefine.py:

import mitmproxy.http

t0 ='Object.defineProperties(navigator,{webdriver:{get:() => false}});'
t1 = 'window.navigator.chrome = {runtime: {},// etc.};'
t2 = '''
Object.defineProperty(navigator, 'languages', {
      get: () => ['en-US', 'en']
    });
'''
t3 = '''
Object.defineProperty(navigator, 'plugins', {
    get: () => [1, 2, 3, 4, 5,6],
  });
'''
t4 = '''
           Object.defineProperties(navigator,{
             userAgent:{
               get: () => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36;
             }
           })
'''




class Tb(object):
    def response(slef,flow: mitmproxy.http.HTTPFlow):
        if '114.js' in flow.request.url or 'um.js' in flow.request.url:
                flow.response.text = t3 + t2 + t4 + t0 + flow.response.text
                print('注入成功')
addons = [
    Tb()
]

注释:t0是对webdriver navigator的伪装,为false。t2,t3,t4是针对headless进行的伪装,简而言之就是无头跟有头之间的三个明显化差异,想想就知道了,一个是请求头,一个浏览器的设置语言,一个是浏览器插件。

启动命令: 命令段运行

mitmdumps -s   mitmfile.py  or  mitmweb -s   mitmfile.py  '''mtimfile 你的mitm文件名称''' 

启动结果:

二  登陆

只要启动了mitmrpxy伪装,一切selenium都可以实现登陆(原则上是,有一段时间哪怕是有界面的都不行,怀疑是有了新的js检测)

    def __init_browser(self):
        options = Options()
        # service_args = ['--proxy=127.0.0.1:8080','--proxy-type=http','--ignore-ssl-errors=true']
        # DesiredCapabilities.PHANTOMJS[
        #     'phantomjs.page.settings.userAgent'] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0"

        # options.add_argument("--headless")
        # options.add_argument('--disable-gpu')
        options.add_argument('--proxy-server=http://127.0.0.1:8080')
        # options.add_argument(
        #     'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36')

        self.browser = webdriver.Chrome(options=options)
        # self.browser = webdriver.PhantomJS(service_args=service_args)
        return self.browser

    def __login(self):
        self.browser.get(TB_LOGIN_URL)
        # self.browser.get('http://www.mamicode.com/info-detail-2423225.html')
        page = self.browser.page_source

        self.browser.get_screenshot_as_file('2222.png')

        WebDriverWait(self.browser, 20).until(
            EC.presence_of_element_located((By.ID, 'TPL_username_1'))
        )

        self.browser.find_element_by_xpath('//input[@id="TPL_username_1"]').send_keys(un)
        self.browser.get_screenshot_as_file('4444.png')
        time.sleep(0.5)
        self.browser.find_element_by_xpath('//input[@id="TPL_password_1"]').send_keys(pwd)
        time.sleep(0.5)
        self.browser.get_screenshot_as_file('3333.png')
        time.sleep(10)
        self.__f5__slider()
        if self.__lock_exist():
            print('存在滑块解锁')
            time.sleep(1.5)
            self.__unlock()

        self.browser.find_element_by_xpath('//button[@id="J_SubmitStatic"]').click()

这里只贴了两段代码。一段是初始化浏览器的,注释掉的代码包括chromeheadlss的运行以及phantomjs的运行,本文只涉及有头模式下启动,另外一段时login滑块的判断。

三 命令端查看

四 推荐其它几个网站地址

1. selenium的webdirver检测,包括chrome内核特征值的修改

https://stackoverflow.com/questions/33225947/can-a-website-detect-when-you-are-using-selenium-with-chromedriver 

 

2. 针对tm的研究

https://www.kebook.cn/9060/

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值