本文目錄一覽:
- 1、如何用python表示三角函數
- 2、如何用Python開發一個簡單的Webkit瀏覽器
- 3、人工智慧需要什麼基礎?
- 4、python為何會內存超限,應該怎麼改?
- 5、原生安卓開發app的框架frida安裝和Python小試牛刀
- 6、如何配置Visual Studio 2017作為Python開發環境
如何用python表示三角函數
Python編碼下面的三角函數包括以下種類:acos(x)//返回x的反餘弦弧度值。asin(x)//返回x的反正弦弧度值。atan(x)//返回x的反正切弧度值。atan2(y,x)//返回給定的X及Y坐標值的反正切值。cos(x)//返回x的弧度的餘弦值。hypot(x,y
描述
sin()返回的x弧度的正弦值。
語法
以下是sin()方法的語法:
importmath
math.sin(x)
注意:sin()是不能直接訪問的,需要導入math模塊,然後通過math靜態對象調用該方法。
參數
x–一個數值。
返回值
返回的x弧度的正弦值,數值在-1到1之間。
實例
以下展示了使用sin()方法的實例:
#!/usr/bin/python
import math
print “sin(3) : “, math.sin(3)
print “sin(-3) : “, math.sin(-3)
print “sin(0) : “, math.sin(0)
print “sin(math.pi) : “, math.sin(math.pi)
print “sin(math.pi/2) : “, math.sin(math.pi/2)
以上實例運行後輸出結果為:
sin(3) : 0.14112000806
sin(-3) : -0.14112000806
sin(0) : 0.0
sin(math.pi) : 1.22460635382e-16
sin(math.pi/2) : 1
總結
以上就是本文關於Python入門之三角函數sin()函數實例詳解的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站:python正則表達式re之compile函數解析、Python中enumerate函數代碼解析、簡單了解Python中的幾種函數等,有什麼問題可以隨時留言,小編會及時回復大家的。感謝朋友們對本站的支持!
如何用Python開發一個簡單的Webkit瀏覽器
在這篇教程中,我們會用 Python 的 PyQt 框架編寫一個簡單的 web 瀏覽器。關於 PyQt ,你可能已經有所耳聞了,它是 Qt 框架下的一系列 Python 組件,而 Qt(發音類似「cute」)是用來開發 GUI 的 C++ 框架。嚴格來講, Qt 也可用於開發不帶圖形界面的程序,但是開發用戶界面應該是 Qt 框架最為廣泛的應用了。Qt 的主要優勢是可以開發跨平台的圖形界面程序,基於 Qt 的應用能夠藉助於各平台的原生性在不同類的設備上運行,而無須修改任何代碼庫。
Qt 附帶了 webkit 的介面,你可以直接使用 PyQt 來開發一個基於 webkit 的瀏覽器。
我們本次教程所開發的瀏覽器可以完成如下功能:
載入用戶輸入的url
顯示在渲染頁面過程中發起的所有請求
允許用戶在頁面中執行自定義的 JavaScript 腳本
牛刀小試
讓我們從最簡單的 PyQt 的 Webkit 用例開始吧:輸入 url,打開窗口並在窗口中載入頁面。
這個例子十分短小,連 import 語句和空行在內也只有 13 行代碼。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
import sys
from PyQt4.QtWebKit import QWebView
from PyQt4.QtGui import QApplication
from PyQt4.QtCore import QUrl
app = QApplication(sys.argv)
browser = QWebView()
browser.load(QUrl(sys.argv[1]))
browser.show()
app.exec_()
當你通過命令行將 url 傳給腳本時,程序會載入 url 並且在窗口中顯示載入完成的頁面。
現在,看似你已經有一個「命令行瀏覽器」啦!至少比 python 的 requests 模塊強多了,甚至比 Lynx 還略高一籌,因為我們的瀏覽器還可以載入 JavaScript 腳本呢。但是目前為止還沒有跟 Lynx 拉開差距,因為在啟用瀏覽器的時候只能通過命令行傳入 url。那麼,必然需要通過某種方式把需要載入的 url 傳入瀏覽器。沒錯,就是地址欄!
添加地址欄
其實地址欄的實現非常簡單,我們只需要在窗口頂端加一個輸入框就夠了。用戶在文本框中輸入 url 之後,瀏覽器就會載入這個地址。下面,我們將用到 QLineEdit 控制項來實現輸入框。鑒於我們的瀏覽器現在有地址欄和瀏覽器顯示框兩部分,因此還要給我們的應用增加一個網格布局。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import sys
from PyQt4.QtGui import QApplication
from PyQt4.QtCore import QUrl
from PyQt4.QtWebKit import QWebView
from PyQt4.QtGui import QGridLayout, QLineEdit, QWidget
class UrlInput(QLineEdit):
def __init__(self, browser):
super(UrlInput, self).__init__()
self.browser = browser
# add event listener on “enter” pressed
self.returnPressed.connect(self._return_pressed)
def _return_pressed(self):
url = QUrl(self.text())
# load url into browser frame
browser.load(url)
if __name__ == “__main__”:
app = QApplication(sys.argv)
# create grid layout
grid = QGridLayout()
browser = QWebView()
url_input = UrlInput(browser)
# url_input at row 1 column 0 of our grid
grid.addWidget(url_input, 1, 0)
# browser frame at row 2 column 0 of our grid
grid.addWidget(browser, 2, 0)
# main app window
main_frame = QWidget()
main_frame.setLayout(grid)
main_frame.show()
# close app when user closes window
sys.exit(app.exec_())
到這裡,我們已經有一個瀏覽器的雛形啦!看上去和當年的 Google Chrome 還有幾分相像呢,畢竟兩者採用了相同的渲染引擎。現在,你可以在輸入框中輸入 url ,程序便會將地址傳入瀏覽器,接著渲染出所有的 HTML 頁面和 JavaScript 腳本並展示出來。
添加開發工具
一個瀏覽器最有趣也最重要的部分是什麼?當然是各種各樣的開發工具了!一個沒有開發者控制台的瀏覽器怎麼能算是瀏覽器呢?所以,我們的 Python 瀏覽器當然也要有一些開發者工具才行。
現在,我們就來添加一些類似於 Chrome 的開發者工具中 「Network」 標籤的功能吧!這個功能就是簡單地追蹤瀏覽器引擎在載入頁面的時候所執行的所有請求。在瀏覽器主頁面的下方,我們將通過一個表來顯示這些請求。簡單起見,我們只會記錄登錄的 url、返回的狀態碼和響應的內容類型。
首先我們要通過 QTableWidget 組件創建一個表格,表頭包括需要存儲的欄位名稱,表格可以根據每次新插入的記錄來自動調整大小。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class RequestsTable(QTableWidget):
header = [“url”, “status”, “content-type”]
def __init__(self):
super(RequestsTable, self).__init__()
self.setColumnCount(3)
self.setHorizontalHeaderLabels(self.header)
header = self.horizontalHeader()
header.setStretchLastSection(True)
header.setResizeMode(QHeaderView.ResizeToContents)
def update(self, data):
last_row = self.rowCount()
next_row = last_row + 1
self.setRowCount(next_row)
for col, dat in enumerate(data, 0):
if not dat:
continue
self.setItem(last_row, col, QTableWidgetItem(dat))
想要追蹤所有請求的話,我們還需要對 PyQt 的內部構件有更深入的了解。了解到,Qt 提供了一個 NetworkAccessManager類作為 API 介面,通過調用它可以監控應用載入頁面時所執行的請求。我們需要自己編寫一個繼承自 NetworkAccessManager 的子類,添加必要的事件監聽器,然後使用我們自己編寫的 manager 來通知 webkit 視圖執行相應的請求。
首先我們需要以 NetworkAccessManager 為基類創建我們自己的網路訪問管理器。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Manager(QNetworkAccessManager):
def __init__(self, table):
QNetworkAccessManager.__init__(self)
# add event listener on “load finished” event
self.finished.connect(self._finished)
self.table = table
def _finished(self, reply):
“””Update table with headers, status code and url.
“””
headers = reply.rawHeaderPairs()
headers = {str(k):str(v) for k,v in headers}
content_type = headers.get(“Content-Type”)
url = reply.url().toString()
# getting status is bit of a pain
status = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
status, ok = status.toInt()
self.table.update([url, str(status), content_type])
在這裡需要提醒大家的是, Qt 的某些實現並不像想像中那麼簡單明了,比如說從響應中獲取狀態碼就十分繁瑣。首先,你得把請求對象的類屬性作為參數傳入 response 的方法 .attribute() 中,.attribute() 方法的返回值是 QVariant 類型而非 int 類型。接著,需要調用內置函數 .toInt() 將其轉換成一個包含兩個元素的元組,最終得到響應的狀態碼。
現在,我們終於有了一個記錄請求的表和一個監控網路的 manager,接下來只要把他們聚攏起來就可以了。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if __name__ == “__main__”:
app = QApplication(sys.argv)
grid = QGridLayout()
browser = QWebView()
url_input = UrlInput(browser)
requests_table = RequestsTable()
manager = Manager(requests_table)
# to tell browser to use network access manager
# you need to create instance of QWebPage
page = QWebPage()
page.setNetworkAccessManager(manager)
browser.setPage(page)
grid.addWidget(url_input, 1, 0)
grid.addWidget(browser, 2, 0)
grid.addWidget(requests_table, 3, 0)
main_frame = QWidget()
main_frame.setLayout(grid)
main_frame.show()
sys.exit(app.exec_())
現在,運行瀏覽器程序,在地址欄鍵入 url,就可以看到在主頁面下方的記錄表中記錄下的所有請求。
如果你有興趣的話,還可以為瀏覽器添加很多新的功能:
通過content-type添加篩選功能
添加記錄表的排序功能
添加計時器
高亮顯示出錯的請求(比如說把錯誤信息置為紅色)
顯示出更為具體的請求內容,比如說完整的頭信息、響應內容、請求方法等。
增加一個重複發送請求並載入出來的選項。比如說用戶可以點擊在記錄表中的請求來重試請求。
其實還有太多的功能可以繼續完善和改進,你可以一一嘗試一下,這會是一個非常有趣而且收穫良多的學習過程。但是如果想把這些功能都說完,估計都能寫一本書了。所以限於篇幅,本文就不一一介紹了,感興趣的朋友可以參考其他書籍和網上教程。
增加解析自定義 JavaScript 腳本的功能
我們終於迎來最後一個功能了!就是解析在頁面中包含的 JavaScript 腳本。
基於我們之前已經打下的基礎,要完成這個功能非常簡單。我們只需要在添加一個 QLineEdit 組件,把它和頁面聯繫起來,然後調用 evaulateJavaScript 方法就可以了。
Python
1
2
3
4
5
6
7
8
9
class JavaScriptEvaluator(QLineEdit):
def __init__(self, page):
super(JavaScriptEvaluator, self).__init__()
self.page = page
self.returnPressed.connect(self._return_pressed)
def _return_pressed(self):
frame = self.page.currentFrame()
result = frame.evaluateJavaScript(self.text())
下面是這個功能的示例。看,我們的開發者工具已經整裝待發了!
Python
1
2
3
4
5
6
7
8
9
10
11
if __name__ == “__main__”:
# …
# …
page = QWebPage()
# …
js_eval = JavaScriptEvaluator(page)
grid.addWidget(url_input, 1, 0)
grid.addWidget(browser, 2, 0)
grid.addWidget(requests_table, 3, 0)
grid.addWidget(js_eval, 4, 0)
現在唯一缺少的就是在頁面中不能執行 Python 腳本。你可以開發自己的瀏覽器,提供對 JavaScript 和 Python 的支持,這樣其他開發者就可以針對你的瀏覽器開發應用了。
後退、前進和其他頁面操作
我們在前面已經使用了 QWebPage 對象來開發瀏覽器,當然作為一個合格的瀏覽器,我們也需要為終端用戶提供一些重要功能。Qt 的網頁對象支持很多不同操作,我們可以把它們全都添加到瀏覽器中。
現在我們可以先嘗試著添加「後退」、「前進」和「刷新」這幾個操作。你可以在界面上添加這些操作按鈕,簡單起見,這裡只加一個文本框來執行這些動作。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class ActionInputBox(QLineEdit):
def __init__(self, page):
super(ActionInputBox, self).__init__()
self.page = page
self.returnPressed.connect(self._return_pressed)
def _return_pressed(self):
frame = self.page.currentFrame()
action_string = str(self.text()).lower()
if action_string == “b”:
self.page.triggerAction(QWebPage.Back)
elif action_string == “f”:
self.page.triggerAction(QWebPage.Forward)
elif action_string == “s”:
self.page.triggerAction(QWebPage.Stop)
和之前一樣,我們要創建一個 ActionInputBox 的實例,把參數傳入頁面對象並把輸入框對象添加到頁面中。
For reference here』s code for final result 示例代碼看這裡
[1]: Graphical User Interface,圖形用戶界面,又稱圖形用戶介面,是指採用圖形方式顯示的計算機操作用戶界面。
[2]: WebKit是一個開源的瀏覽器引擎,與之相對應的引擎有 Gecko(Mozilla Firefox 等使用)和 Trident(也稱 MSHTML ,IE 使用)。
人工智慧需要什麼基礎?
人工智慧需要什麼基礎?
人工智慧是一個包含很多學科的交叉學科,你需要了解計算機的知識、資訊理論、控制論、圖論、心理學、生物學、熱力學,你要有一定的哲學基礎,有科學方法論作保障。這些學科的每一門都是博大精深的,但同時很多事物都是相通的,你學了很多知識有了一定的基礎的時候再看相關知識就會觸類旁通,很容易。在這中間關鍵是要有自己的思考,不能人云亦云,畢竟人工智慧是一個正在發展並具有無窮挑戰和樂趣的學科,如果你對人工智慧感興趣,那歡迎到百度的人工智慧吧做客,那裡有對人工智慧豐富而深刻的討論。
需要必備的知識有: 1、線性代數:如何將研究對象形式化? 2、概率論:如何描述統計規律? 3、數理統計:如何以小見大? 4、最優化理論: 如何找到最優解? 5、資訊理論:如何定量度量不確定性? 6、形式邏輯:如何實現抽象推理? 7、線性代數:如何將研究對象形式化?人工智慧簡介: 1、人工智慧(Artificial Intelligence),英文縮寫為AI。 2、它是研究、開發用於模擬、延伸和擴展人的智能的理論、方法、技術及應用系統的一門新的技術科學。 人工智慧涉及的學科: 哲學和認知科學,數學,神經生理學,心理學,計算機科學,資訊理論,控制論,不定性論,仿生學,社會結構學與科學發展觀。
1.人工智慧是一門極富挑戰性的科學,從事這項工作的人必須懂得計算機知識,心理學和哲學。
2. 人工智慧是包括十分廣泛的科學,它由不同的領域組成。入門最基本的的知識是:機器學習、機械原理、計算機原理、計算機視覺等等。總的說來,人工智慧研究的一個主要目標是使機器能夠勝任一些通常需要人類智能才能完成的複雜工作。但不同的時代、不同的人對這種「複雜工作」的理解是不同的。
python為何會內存超限,應該怎麼改?
分區表錯誤是硬碟的嚴重錯誤,不同錯誤的程度會造成不同的損失。如果是沒有活動分區標誌,則計算機無法啟動。但從軟區或光區引導系統後可對硬碟讀寫,可通過fdisk重置活動分區進行修復。如果是某一分區類型錯誤,可造成某一分區的丟失。分區表的第四個位元組為分區類型值,正常的可引導的大於32mb的基本DOS分區值為06,而擴展的DOS分區值是05。如果把基本DOS分區類型改為05則無法啟動系統 ,並且不能讀寫其中的數據。如果把06改為DOS不識別的類型如efh,則DOS認為改分區不是 DOS分區,當然無法讀寫。很多人利用此類型值實現單個分區的加密技術,恢復原來的正確類型值即可使該分區恢復正常。分區表中還有其他數據用於紀錄分區的起始或終止地址。這些數據的損壞將造成該分區的混亂或丟失,一般無法進行手工恢復,唯一的方法是用備份的分區表數據重新寫回,或者從其他的相同類型的並且分區狀況相同的硬碟上獲取分區表數據,否則將導致其他的數據永久的丟失。在對主引導扇區進行操作時,可採用nu等工具軟體,操作非常的方便,可直接對硬碟主引導扇區進行讀寫或編輯。當然也可採用de
原生安卓開發app的框架frida安裝和Python小試牛刀
本教程只用於學習探討,不允許任何人使用技術進行違法操作,閱讀教程即表示同意!
frida是一個hook原生 安卓開發app 的一個框架,也不止安卓,像ios和win等,都支持,但是好像看到用的不太多。
注意,是原生,就是用Java+安卓開發的app。
還有些是H5之類的,這些是hook不成的,當然,市面上最起碼80%的app都是原生開發,不必擔心。
再說,H5開發的不是更容易破解?懂的都懂!
hook英文是鉤子的意思,可以理解為一堆水管流水,我在某個水管中間挖一個洞,操作一波再繼續流。
當然,我也可以只看看某個水管有沒有水。
上述這個過程就叫做修改和驗證!
可以使用編寫的簡單Python環境管理器快速創建一個虛擬環境,可視化就是好,再也不用記該死的命令了!
相關鏈接:
這裡已經創建完畢,虛擬環境名為 frida_env
當然,這是一個差不多的參考價值,不一定準,具體情況具體分析。
在安裝frida時,盡量科學上網,因為frida好像會下載一些東西,不科學上網非常慢…可能會卡住很長時間!
根據我的環境,這是我的依賴包,在虛擬環境中pip安裝即可!
安裝完成之後,分別執行 frida –version 和導入 frida ,如果沒有報錯則表示安裝成功!
frida-server下載鏈接:
綜上所述,我pip的frida版本為14.2.18,手機是arm64,所以要下載這個!
確實存在,ok。
這樣就已經運行起來了,他是不會有提示的,是直接wait在這的!
注意啊,這個cmd窗口是不能關的,一直掛這就行!
激活上述創建好的虛擬環境,執行以下命令。
如果出現以下信息,表示正確!這是手機的一些信息,表示能獲取到。
到這,pc端的frida和手機端的frida-server就建立成功了,主要流程就是
如果frida版本=12,好像是要進行埠轉發的
pc上配置frida沒什麼好說的了,創建一個虛擬環境,安裝frida就好了。
手機上的話,第一次需要把frida-server拷貝到 /data/local/tmp 下和 chmod
然後運行這個frida-server,命令總結一下大概為:
下次使用直接複製就可以了!
因為frida使用的是js語言,並且需要安裝一個代碼自動提示插件,所以WebStorm最合適,官網下載點擊下一步下一步即可。
這裡不做敘述。
嗯,還需要安裝node,自己折騰吧!
創建一個空項目,選擇合適的目錄。
打開項目,點擊下面的Terminal,輸入 npm i @types/frida-gum 安裝frida代碼自動提示。
這不,關於frida的代碼就能自動提示了!
題外話
通過Charles+postern進行抓包,發現登錄用的介面為
可以發現帶的數據是一個 {“Encrypt”:”xxx”} ,擦,這是什麼玩意啊???
這個apk是沒有加固的,通過反編譯搜索一下 user/login 試試!!!
找到了兩處 user/login ,其中一個是login函數!
那麼,現在問題來了,到底 user/login 走的是不是login?如何驗證?
此時點擊手機上面的登錄按鈕,然後看pc上控制台的輸出!
確實輸出了,經過驗證,確實是執行了這個login。
然後你再進行一遍hook和分析即可。
下節課就來分析如何自動登錄這個app!
想要玩轉hook,大概分為以下幾步
人生沒有白走的路,加油!
如何配置Visual Studio 2017作為Python開發環境
看起來問題好像是你並沒有安裝python的開發環境。
點擊文件,選擇新建python工程
然後選擇下載,安裝
這個是vs2015的截圖,不過大同小異,步驟應該差不多。
另外,為啥要用vs寫python呢,vs更適合寫c++/c#,真的要寫python的話,應該找專門的ide——pycharm。這個應該說是目前python最好的ide了。
對於初學者而言,vs這種超大型的ide寫python未免有殺雞用牛刀之嫌,而且vs的啟動速度,代碼調試的速度都遠遠慢於pycharm。所以還是推薦pycharm。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/159979.html