當前位置:首頁 » 操作系統 » aam演算法

aam演算法

發布時間: 2022-05-10 12:50:18

㈠ 電容器AAM7.3-200-1W的容量如何計算

這是什麼電容器呢,電容器的容量通常都會在本體上列印的
東莞市科尼盛電子有限公司
王雷答

㈡ 謝謝你的回答,請問匯編中BCD調整指令如何計算,比如AAD

你這個AX=0106H答案是錯的 AX應該是 0060H
因為 ADD這個指令是在做除法前調整 AH, AL寄存器的值,它是把兩個數的BCD值組成一個十進制值,組成的公式 AL =AH*10 +AL =9*10+6=96 ;AH=00
96的16進制60H
所以此時AX應該說是 0060H

㈢ 求用matlab實現的AAM演算法的代碼

正在找這個,麻煩給我發下吧,[email protected] ,謝謝了……

㈣ 誰能幫我在pudn上下載AAM演算法代碼嗎

http://yunpan.cn/cmz3pQnKedhiE (提取碼:f4e9)

㈤ 求WPE在武林外傳的用法

怎麼截獲一個游戲的封包? 怎麼去檢查游戲伺服器的ip地址和埠號?

Internet用戶使用的各種信息服務,其通訊的信息最終均可以歸結為以IP包為單位的信息傳送,IP包除了包括要傳送的數據信息外,還包含有信息要發送到的目的IP地址、信息發送的源IP地址、以及一些相關的控制信息。當一台路由器收到一個IP數據包時,它將根據數據包中的目的IP地址項查找路由表,根據查找的結果將此IP數據包送往對應埠。下一台IP路由器收到此數據包後繼續轉發,直至發到目的地。路由器之間可以通過路由協議來進行路由信息的交換,從而更新路由表。

那麼我們所關心的內容只是IP包中的數據信息,我們可以使用許多監聽網路的工具來截獲客戶端與伺服器之間的交換數據,下面就向你介紹其中的一種工具:WPE。

WPE使用方法: 執行WPE會有下列幾項功能可選擇:

SELECT GAME 選擇目前在記憶體中您想攔截的程式,您只需雙擊該程式名稱即可。

TRACE 追蹤功能。用來追蹤擷取程式送收的封包。 WPE必須先完成點選欲追蹤的程式名稱,才可以使用此項目。 按下Play鍵開始擷取程式收送的封包。 您可以隨時按下 | | 暫停追蹤,想繼續時請再按下 | | 。 按下正方形可以停止擷取封包並且顯示所有已擷取封包內容。 若您沒按下正方形停止鍵,追蹤的動作將依照OPTION里的設定值自動停止。 如果您沒有擷取到資料,試試將OPTION里調整為Winsock Version 2。 WPE 及 Trainers 是設定在顯示至少16 bits 顏色下才可執行。

FILTER 過濾功能。用來分析所擷取到的封包,並且予以修改。

SEND PACKET 送出封包功能。能夠讓您送出假造的封包。

TRAINER MAKER 製作修改器。

OPTIONS 設定功能。讓您調整WPE的一些設定值。

FILTER的詳細教學

- 當FILTER在啟動狀態時 ,ON的按鈕會呈現紅色。 - 當您啟動FILTER時,您隨時可以關閉這個視窗。FILTER將會保留在原來的狀態,直到您再按一次 on / off 鈕。 - 只有FILTER啟用鈕在OFF的狀態下,才可以勾選Filter前的方框來編輯修改。 - 當您想編輯某個Filter,只要雙擊該Filter的名字即可。

NORMAL MODE:

範例:

當您在 Street Fighter Online 〔快打旋風線上版〕游戲中,您使用了兩次火球而且擊中了對方,這時您會擷取到以下的封包: SEND-> 0000 08 14 21 06 01 04 SEND-> 0000 02 09 87 00 67 FF A4 AA 11 22 00 00 00 00 SEND-> 0000 03 84 11 09 11 09 SEND-> 0000 0A 09 C1 10 00 00 FF 52 44 SEND-> 0000 0A 09 C1 10 00 00 66 52 44

您的第一個火球讓對方減了16滴〔16 = 10h〕的生命值, 而您觀察到第4跟第5個封包的位置4有10h的值出現,應該就是這里了。

您觀察10h前的0A 09 C1在兩個封包中都沒改變,可見得這3個數值是發出火球的關鍵。

因此您將0A 09 C1 10填在搜尋列〔SEARCH〕,然後在修改列〔MODIFY〕的位置4填上FF。如此一來,當您再度發出火球時,FF會取代之前的10,也就是攻擊力為255的火球了!

ADVANCED MODE:

範例: 當您在一個游戲中,您不想要用真實姓名,您想用修改過的假名傳送給對方。在您使用TRACE後,您會發現有些封包裡面有您的名字出現。假設您的名字是Shadow,換算成16進位則是〔53 68 61 64 6F 77〕;而您打算用moon〔6D 6F 6F 6E 20 20〕來取代他。 1) SEND-> 0000 08 14 21 06 01 04 2) SEND-> 0000 01 06 99 53 68 61 64 6F 77 00 01 05 3) SEND-> 0000 03 84 11 09 11 09 4) SEND-> 0000 0A 09 C1 10 00 53 68 61 64 6F 77 00 11 5) SEND-> 0000 0A 09 C1 10 00 00 66 52 44

但是您仔細看,您的名字在每個封包中並不是出現在相同的位置上

- 在第2個封包里,名字是出現在第4個位置上 - 在第4個封包里,名字是出現在第6個位置上

在這種情況下,您就需要使用ADVANCED MODE - 您在搜尋列〔SEARCH〕填上:53 68 61 64 6F 77 〔請務必從位置1開始填〕 - 您想要從原來名字Shadow的第一個字母開始置換新名字,因此您要選擇從數值被發現的位置開始替代連續數值〔from the position of the chain found〕。 - 現在,在修改列〔MODIFY〕000的位置填上:6D 6F 6F 6E 20 20 〔此為相對應位置,也就是從原來搜尋欄的+001位置開始遞換〕 - 如果您想從封包的第一個位置就修改數值,請選擇〔from the beginning of the packet〕

了解一點TCP/IP協議常識的人都知道,互聯網是將信息數據打包之後再傳送出去的。每個數據包分為頭部信息和數據信息兩部分。頭部信息包括數據包的發送地址和到達地址等。數據信息包括我們在游戲中相關操作的各項信息。那麼在做截獲封包的過程之前我們先要知道游戲伺服器的IP地址和埠號等各種信息,實際上最簡單的是看看我們游戲目錄下,是否有一個SERVER.INI的配置文件,這個文件里你可以查看到個游戲伺服器的IP地址,比如金庸群俠傳就是如此,那麼除了這個我們還可以在DOS下使用NETSTAT這個命令,

NETSTAT命令的功能是顯示網路連接、路由表和網路介面信息,可以讓用戶得知目前都有哪些網路連接正在運作。或者你可以使用木馬客星等工具來查看網路連接。工具是很多的,看你喜歡用哪一種了。

NETSTAT命令的一般格式為: NETSTAT [選項]

命令中各選項的含義如下: -a 顯示所有socket,包括正在監聽的。 -c 每隔1秒就重新顯示一遍,直到用戶中斷它。 -i 顯示所有網路介面的信息。 -n 以網路IP地址代替名稱,顯示出網路連接情形。 -r 顯示核心路由表,格式同"route -e"。 -t 顯示TCP協議的連接情況。 -u 顯示UDP協議的連接情況。 -v 顯示正在進行的工作。

三:怎麼來分析我們截獲的封包?

首先我們將WPE截獲的封包保存為文本文件,然後打開它,這時會看到如下的數據(這里我們以金庸群俠傳里PK店小二客戶端發送的數據為例來講解):

第一個文件: SEND-> 0000 E6 56 0D 22 7E 6B E4 17 13 13 12 13 12 13 67 1B SEND-> 0010 17 12 DD 34 12 12 12 12 17 12 0E 12 12 12 9B SEND-> 0000 E6 56 1E F1 29 06 17 12 3B 0E 17 1A SEND-> 0000 E6 56 1B C0 68 12 12 12 5A SEND-> 0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12 SEND-> 0000 E6 56 17 C9 12

第二個文件: SEND-> 0000 83 33 68 47 1B 0E 81 72 76 76 77 76 77 76 02 7E SEND-> 0010 72 77 07 1C 77 77 77 77 72 77 72 77 77 77 6D SEND-> 0000 83 33 7B 94 4C 63 72 77 5E 6B 72 F3 SEND-> 0000 83 33 7E A5 21 77 77 77 3F SEND-> 0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77 SEND-> 0000 83 33 72 AC 77

我們發現兩次PK店小二的數據格式一樣,但是內容卻不相同,我們是PK的同一個NPC,為什麼會不同呢? 原來金庸群俠傳的封包是經過了加密運算才在網路上傳輸的,那麼我們面臨的問題就是如何將密文解密成明文再分析了。

因為一般的數據包加密都是異或運算,所以這里先講一下什麼是異或。 簡單的說,異或就是"相同為0,不同為1"(這是針對二進制按位來講的),舉個例子,0001和0010異或,我們按位對比,得到異或結果是0011,計算的方法是:0001的第4位為0,0010的第4位為0,它們相同,則異或結果的第4位按照"相同為0,不同為1"的原則得到0,0001的第3位為0,0010的第3位為0,則異或結果的第3位得到0,0001的第2位為0,0010的第2位為1,則異或結果的第2位得到1,0001的第1位為1,0010的第1位為0,則異或結果的第1位得到1,組合起來就是0011。異或運算今後會遇到很多,大家可以先熟悉熟悉,熟練了對分析很有幫助的。

下面我們繼續看看上面的兩個文件,按照常理,數據包的數據不會全部都有值的,游戲開發時會預留一些位元組空間來便於日後的擴充,也就是說數據包里會存在一些"00"的位元組,觀察上面的文件,我們會發現文件一里很多"12",文件二里很多"77",那麼這是不是代表我們說的"00"呢?推理到這里,我們就開始行動吧!

我們把文件一與"12"異或,文件二與"77"異或,當然用手算很費事,我們使用"M2M 1.0 加密封包分析工具"來計算就方便多了。得到下面的結果:

第一個文件: 1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89 2 SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 08 3 SEND-> 0000 F4 44 09 D2 7A 00 00 00 48 4 SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 F4 44 05 DB 00

第二個文件: 1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 70 6B 00 00 00 00 05 00 05 00 00 00 1A 2 SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 84 3 SEND-> 0000 F4 44 09 D2 56 00 00 00 48 4 SEND-> 0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 F4 44 05 DB 00

哈,這一下兩個文件大部分都一樣啦,說明我們的推理是正確的,上面就是我們需要的明文!

接下來就是搞清楚一些關鍵的位元組所代表的含義,這就需要截獲大量的數據來分析。

首先我們會發現每個數據包都是"F4 44"開頭,第3個位元組是變化的,但是變化很有規律。我們來看看各個包的長度,發現什麼沒有?對了,第3個位元組就是包的長度! 通過截獲大量的數據包,我們判斷第4個位元組代表指令,也就是說客戶端告訴伺服器進行的是什麼操作。例如向伺服器請求戰斗指令為"30",戰斗中移動指令為"D4"等。 接下來,我們就需要分析一下上面第一個包"F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89",在這個包里包含什麼信息呢?應該有通知伺服器你PK的哪個NPC吧,我們就先來找找這個店小二的代碼在什麼地方。 我們再PK一個小嘍羅(就是大理客棧外的那個咯): SEND-> 0000 F4 44 1F 30 D4 75 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 8A 19 00 00 00 00 11 00 02 00 00 00 C0 我們根據常理分析,游戲里的NPC種類雖然不會超過65535(FFFF),但開發時不會把自己限制在字的范圍,那樣不利於游戲的擴充,所以我們在雙字里看看。通過"店小二"和"小嘍羅"兩個包的對比,我們把目標放在"6C 79 F6 05"和"CF 26 00 00"上。(對比一下很容易的,但你不能太遲鈍咯,呵呵)我們再看看後面的包,在後面的包里應該還會出現NPC的代碼,比如移動的包,游戲允許觀戰,伺服器必然需要知道NPC的移動坐標,再廣播給觀戰的其他玩家。在後面第4個包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00"里我們又看到了"6C 79 F6 05",初步斷定店小二的代碼就是它了! (這分析里邊包含了很多工作的,大家可以用WPE截下數據來自己分析分析)

第一個包的分析暫時就到這里(裡面還有的信息我們暫時不需要完全清楚了)

我們看看第4個包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00",再截獲PK黃狗的包,(狗會出來2隻哦)看看包的格式: SEND-> 0000 F4 44 1A DA 02 0B 4B 7D F6 05 02 27 35 01 00 00 SEND-> 0010 EB 03 F8 05 02 27 36 01 00 00

根據上面的分析,黃狗的代碼為"4B 7D F6 05"(100040011),不過兩只黃狗伺服器怎樣分辨呢?看看"EB 03 F8 05"(100140011),是上一個代碼加上100000,呵呵,這樣伺服器就可以認出兩只黃狗了。我們再通過野外遇敵截獲的數據包來證實,果然如此。

那麼,這個包的格式應該比較清楚了:第3個位元組為包的長度,"DA"為指令,第5個位元組為NPC個數,從第7個位元組開始的10個位元組代表一個NPC的信息,多一個NPC就多10個位元組來表示。

大家如果玩過網金,必然知道隨機遇敵有時會出現增援,我們就利用游戲這個增援來讓每次戰斗都會出現增援的NPC吧。

通過在戰斗中出現增援截獲的數據包,我們會發現伺服器端發送了這樣一個包: F4 44 12 E9 EB 03 F8 05 02 00 00 03 00 00 00 00 00 00 第5-第8個位元組為增援NPC的代碼(這里我們就簡單的以黃狗的代碼來舉例)。 那麼,我們就利用單機代理技術來同時欺騙客戶端和伺服器吧!

好了,呼叫NPC的工作到這里算是完成了一小半,接下來的事情,怎樣修改封包和發送封包,我們下節繼續講解吧。

四:怎麼冒充"客戶端"向"伺服器"發我們需要的封包?

這里我們需要使用一個工具,它位於客戶端和伺服器端之間,它的工作就是進行數據包的接收和轉發,這個工具我們稱為代理。如果代理的工作單純就是接收和轉發的話,這就毫無意義了,但是請注意:所有的數據包都要通過它來傳輸,這里的意義就重大了。我們可以分析接收到的數據包,或者直接轉發,或者修改後轉發,或者壓住不轉發,甚至偽造我們需要的封包來發送。

下面我們繼續講怎樣來同時欺騙伺服器和客戶端,也就是修改封包和偽造封包。 通過我們上節的分析,我們已經知道了打多個NPC的封包格式,那麼我們就動手吧!

首先我們要查找客戶端發送的包,找到戰斗的特徵,就是請求戰斗的第1個包,我們找"F4 44 1F 30"這個特徵,這是不會改變的,當然是要解密後來查找哦。 找到後,表示客戶端在向伺服器請求戰斗,我們不動這個包,轉發。 繼續向下查找,這時需要查找的特徵碼不太好辦,我們先查找"DA",這是客戶端發送NPC信息的數據包的指令,那麼可能其他包也有"DA",沒關系,我們看前3個位元組有沒有"F4 44"就行了。找到後,我們的工作就開始了!

我們確定要打的NPC數量。這個數量不能很大,原因在於網金的封包長度用一個位元組表示,那麼一個包可以有255個位元組,我們上面分析過,增加一個NPC要增加10個位元組,所以大家算算就知道,打20個NPC比較合適。

然後我們要把客戶端原來的NPC代碼分析計算出來,因為增加的NPC代碼要加上100000哦。再把我們增加的NPC代碼計算出來,並且組合成新的封包,注意代表包長度的位元組要修改啊,然後轉發到伺服器,這一步在編寫程序的時候要注意演算法,不要造成較大延遲。

上面我們欺騙伺服器端完成了,欺騙客戶端就簡單了,^-^

發送了上面的封包後,我們根據新增NPC代碼構造封包馬上發給客戶端,格式就是"F4 44 12 E9 NPC代碼 02 00 00 03 00 00 00 00 00 00",把每個新增的NPC都構造這樣一個包,按順序連在一起發送給客戶端,客戶端也就被我們騙過了,很簡單吧。

以後戰斗中其他的事我們就不管了,盡情地開打吧,呵呵。

上面講的需要一定的編程基礎,但是不難,即使你不會編程,相信你繼續看下去就會有收獲了。

五:怎麼用計算機語言去寫一個單機代理?

在上一章,我們已經對於代理的原理進行了講解,大家對於代理已經有了一個初步的認識,現在我教大家如何用計算機語言編寫一個自己的代理,我們考慮到簡單明了,我們選用VB,因為用VB編寫代理只需要很少的代碼。

代碼如下:

Private Sub Form_Load() DaiLi.LocalPort = "1234" Server.RemotePort = "1234" Server.RemoteHost = "211.100.20.26" DaiLi.Listen End Sub

Private Sub DaiLi_ConnectionRequest(ByVal requestID As Long) Server.Connect Client.Accept requestIDEnd Sub

Private Sub Client_DataArrival(ByVal bytesTotal As Long) Dim ClientToServer() As Byte Client.GetData ClientToServer Server.SendData ClientToServerEnd Sub

Private Sub Server_DataArrival(ByVal bytesTotal As Long) Dim ServerToClient() As Byte Server.GetData ServerToClient Client.SendData ServerToClientEnd Sub

Form_Load()這個過程表示在程序啟動的時候要做的一些初始化操作。 DaiLi.LocalPort = "1234" 設定監聽埠 Server.RemotePort = "1234" 設定象游戲伺服器連接的埠(和監聽埠是相同的) Server.RemoteHost = "211.100.20.26" 設定游戲伺服器的IP地址 DaiLi.Listen 監聽本地的連接請求 這時你只要將游戲的伺服器列表的IP改成127.0.0.1,那麼游戲的客戶端程序就會來連接我們的代理,我們的代理會調用如下的過程: Private Sub DaiLi_ConnectionRequest(ByVal requestID As Long) Server.Connect 代理客戶端向伺服器連接 Client.Accept requestID 接受客戶端的連接請求 End Sub

當客戶端向伺服器發送數據時,就會調用下邊的過程 Private Sub Client_DataArrival(ByVal bytesTotal As Long) Dim ClientToServer() As Byte 變數定義,請求了一個用於存放數據的空間 Client.GetData ClientToServer 客戶端的連接接收這些數據 在這里我們可以添加自己的代碼,對封包進行修改,然後再發向伺服器。

Server.SendData ClientToServer 伺服器的連接把這些數據發向伺服器 End Sub

當伺服器發送數據給客戶端時,會調用下邊的過程 Private Sub Server_DataArrival(ByVal bytesTotal As Long) Dim ServerToClient() As Byte 變數定義,請求了一個用於存放數據的空間 Server.GetData ServerToClient 伺服器連接接收數據 在這里我們可以添加自己的代碼,對封包進行修改,然後再發給客戶端。

Client.SendData ServerToClient End Sub

用其他語言編寫基本的原理也是差不多的,不過可能稍微要麻煩一些,因為VB本身有一個MSWINSCK.OCX控制項,這個控制項封裝了WINDOWS的網路操作,而且介面很簡單,推薦大家使用。

六:如果單機代理被封,我們怎麼利用底層的技術來接管游戲的發包?

在WINDOWS系統中,網路通訊的任務是由一個叫WSOCK32.DLL(在SYSTEM目錄下)來完成的,每當游戲被運行時,他都會自動的去調用這個動態連接庫,因為在WINDOWS系統中對於文件的搜索順序是 程序目錄>系統目錄>路徑中設置的目錄,所以我們就有機會替換掉系統的WSOCK32.DLL使的游戲調用我們的WSOCK32.DLL,這樣我們就有了對於游戲封包絕對的控制權,有人問:"我們應該怎麼做呢?",我們只要自己編寫一個WSOCK32.DLL放到游戲的目錄下,就OK了,當然讓我們完全自己去編寫一個WSOCK32.DLL是不太現實的,因為本身網路通訊要處理很多更底層的東西,比如說從網卡讀取BIT流,所以我們選擇由我們的WSOCK32.DLL去調用系統的WSOCK32.DLL來完成這個功能。

WSOCK32.DLL有很多的輸出函數,函數如下: __WSAFDIsSet accept AcceptEx Arecv Asend bind closesocket closesockinfo connect dn_expand EnumProtocolsA EnumProtocolsW GetAcceptExSockaddrs GetAddressByNameA GetAddressByNameW gethostbyaddr gethostbyname gethostname GetNameByTypeA GetNameByTypeW getnetbyname getpeername getprotobyname getprotobynumber getservbyname getservbyport GetServiceA GetServiceW getsockname getsockopt GetTypeByNameA GetTypeByNameW htonl htons inet_addr inet_network inet_ntoa ioctlsocket listen MigrateWinsockConfiguration NPLoadNameSpaces NSPStartup ntohl ntohs rcmd recv recvfrom rexec rresvport s_perror select send sendto sethostname SetServiceA SetServiceW setsockopt shutdown socket TransmitFile WEP WSAAsyncGetHostByAddr WSAAsyncGetHostByName WSAAsyncGetProtoByName WSAAsyncGetProtoByNumber WSAAsyncGetServByName WSAAsyncGetServByPort WSAAsyncSelect WSACancelAsyncRequest WSACancelBlockingCall WSACleanup WSAGetLastError WSAIsBlocking WSApSetPostRoutine WSARecvEx WSASetBlockingHook WSASetLastError WSAStartup WSAUnhookBlockingHook WsControl WSHEnumProtocols

在這里,不是所有的函數都要修改,因為我們只關心發送和接收的封包,所以我們只要修改send 和recv兩個函數,前者是發送封包的後者是接收封包的,我們在這兩個函數的處理中加入我們自己的代碼,來完成封包的辨認,修改以及轉發等功能。

七:怎麼來分析客戶端的有關資料?

自己作外掛,大多時候要分析封包,不過因為有的功能是由客戶端來辨別的,所以分析客戶端的程序同樣也很重要,分析客戶端首先要求你能看懂匯編指令(只要"看懂",要求很低的),其次是要能夠熟練的運用一些工具,然後能剩下的也就是運氣和游戲公司的漏洞了。(哈,不是每次都能成功的啊)下邊我分步教給大家。

第一章 8086匯編指令

註:AX,BX,CX...,EAX,EBX,ECX...這些都是CPU用來存儲數據的地方。

一、數據傳輸指令 作用:它們在存貯器和寄存器、寄存器和輸入輸出埠之間傳送數據. 1. 通用數據傳送指令. MOV 傳送字或位元組. MOVSX 先符號擴展,再傳送. MOVZX 先零擴展,再傳送. PUSH 把字壓入堆棧. POP 把字彈出堆棧. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧. BSWAP 交換32位寄存器里位元組的順序 XCHG 交換字或位元組.( 至少有一個操作數為寄存器,段寄存器不可作為操作數) CMPXCHG 比較並交換操作數.( 第二個操作數必須為累加器AL/AX/EAX ) XADD 先交換再累加.( 結果在第一個操作數里 ) XLAT 位元組查表轉換. BX 指向一張 256 位元組的表的起點, AL 為表的索引值 (0-255,即 0-FFH); 返回 AL 為查表結果. ( [BX+AL]->AL )

2. 輸入輸出埠傳送指令. IN I/O埠輸入. ( 語法: IN 累加器, {埠號│DX} ) OUT I/O埠輸出. ( 語法: OUT {埠號│DX},累加器 ) 輸入輸出埠由立即方式指定時, 其范圍是 0-255; 由寄存器 DX 指定時,其范圍是 0-65535.

3. 目的地址傳送指令. LEA 裝入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 傳送目標指針,把指針內容裝入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 傳送目標指針,把指針內容裝入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 傳送目標指針,把指針內容裝入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 傳送目標指針,把指針內容裝入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 傳送目標指針,把指針內容裝入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI.

4. 標志傳送指令. LAHF 標志寄存器傳送,把標志裝入AH. SAHF 標志寄存器傳送,把AH內容裝入標志寄存器. PUSHF 標志入棧. POPF 標志出棧. PUSHD 32位標志入棧. POPD 32位標志出棧.

二、算術運算指令 ADD 加法. ADC 帶進位加法. INC 加 1. AAA 加法的ASCII碼調整. DAA 加法的十進制調整. SUB 減法. SBB 帶借位減法. DEC 減 1. NEC 求反(以 0 減之). CMP 比較.(兩操作數作減法,僅修改標志位,不回送結果). AAS 減法的ASCII碼調整. DAS 減法的十進制調整. MUL 無符號乘法. IMUL 整數乘法. 以上兩條,結果回送AH和AL(位元組運算),或DX和AX(字運算), AAM 乘法的ASCII碼調整. DIV 無符號除法. IDIV 整數除法. 以上兩條,結果回送: 商回送AL,余數回送AH, (位元組運算); 或 商回送AX,余數回送DX, (字運算). AAD 除法的ASCII碼調整. CBW 位元組轉換為字. (把AL中位元組的符號擴展到AH中去) CWD 字轉換為雙字. (把AX中的字的符號擴展到DX中去) CWDE 字轉換為雙字. (把AX中的字元號擴展到EAX中去) CDQ 雙字擴展. (把EAX中的字的符號擴展到EDX中去)

三、邏輯運算指令 AND 與運算. OR 或運算. XOR 異或運算. NOT 取反. TEST 測試.(兩操作數作與運算,僅修改標志位,不回送結果). SHL 邏輯左移. SAL 算術左移.(=SHL) SHR 邏輯右移. SAR 算術右移.(=SHR) ROL 循環左移. ROR 循環右移. RCL 通過進位的循環左移. RCR 通過進位的循環右移. 以上八種移位指令,其移位次數可達255次. 移位一次時, 可直接用操作碼. 如 SHL AX,1. 移位>1次時, 則由寄存器CL給出移位次數. 如 MOV CL,04 SHL AX,CL

四、串指令 DS:SI 源串段寄存器 :源串變址. ES:DI 目標串段寄存器:目標串變址. CX 重復次數計數器. AL/AX 掃描值. D標志 0表示重復操作中SI和DI應自動增量; 1表示應自動減量. Z標志 用來控制掃描或比較操作的結束. MOVS 串傳送. ( MOVSB 傳送字元. MOVSW 傳送字. MOVSD 傳送雙字. ) CMPS 串比較. ( CMPSB 比較字元. CMPSW 比較字. ) SCAS 串掃描. 把AL或AX的內容與目標串作比較,比較結果反映在標志位. LODS 裝入串. 把源串中的元素(字或位元組)逐一裝入AL或AX中. ( LODSB 傳送字元. LODSW 傳送字. LODSD 傳送雙字. ) STOS 保存串. 是LODS的逆過程. REP 當CX/ECX<>0時重復. REPE/REPZ 當ZF=1或比較結果相等,且CX/ECX<>0時重復. REPNE/REPNZ 當ZF=0或比較結果不相等,且CX/ECX<>0時重復. REPC 當CF=1且CX/ECX<>0時重復. REPNC 當CF=0且CX/ECX<>0時重復.

㈥ 求解密這一段密文,我不知道這個是什麼加密的演算法,求解密!!

你好!
這個密碼不是那麼好破解的,估計在網路也沒有答案

㈦ 匯編語言寫一個四位數按位相加。如2415 輸出12

編程前,應把演算法先想清楚了。

code segment;任意兩個五位數相加
assume cs:code,ds:code,ss:code
org 100h;標准COM格式
start:
jmp begin
Tips db 0dh,0ah,09,'? $'
X1 db '23456+98765='
Y1 db '000000. Esc to Quit...',24h
begin:
push cs
pop ds
push ds
pop es
mov ax,3;文本模式
int 10h
Again:mov dx,offset Tips;提示
mov ah,9
int 21h
call input;接收任意兩個五位數
call count;求和
;*** 輸出十進制的結果 ***
mov dx,offset Y1[-1]
mov ah,9
int 21h
mov ah,0;暫停
int 16h
cmp ah,01;Esc 退出
jnz Again;計算下一題
mov ah,4ch;結束
int 21h
input:cld
mov si,offset X1
mov cx,2
T0:push cx
mov cx,5
T1:mov ah,0;接收數字
int 16h
cmp al,30h;數據校驗
jb T1
cmp al,39h
ja T1
mov ah,0eh;數據顯示
int 10h
mov [si],al;存入數據區
inc si
loop T1
inc si;跳過加號
pop cx
cmp cx,2
jnz T2
mov ax,0e2bh;輸出加號
int 10h
T2:loop T0
ret

count:mov si,offset X1[4]
mov di,offset Y1[5]
xor dx,dx;清進位
mov cx,5;改變此值,可實現超大數相加
T3: call subs_c;逐位累加
dec si
dec di
loop T3
cmp dl,1;校正最高位
jnz T4
or dl,30h
mov [di],dl;有進位,置1
jmp T5
T4: mov byte ptr [di],20h;去掉前導0
T5: ret

subs_c: ;[原創]多位加法核心子程序
mov al,[si];最低位對齊
mov ah,[si+6]
and ax,0f0fh
add al,ah;自加
add al,dl;加後面進位
aam;二化十
mov dl,ah;存進位位
or al,30h
mov [di],al;保存1位和值
ret
code ends
end start

㈧ 人臉識別的發展歷史是怎樣的

人臉識別是一個被廣泛研究著的熱門問題,大量的研究論文層出不窮,在一定程度上有泛濫成「災」之嫌。為了更好地對人臉識別研究的歷史和現狀進行介紹,本文將AFR的研究歷史按照研究內容、技術方法等方面的特點大體劃分為三個時間階段,如表1所示。該表格概括了人臉識別研究的發展簡史及其每個歷史階段代表性的研究工作及其技術特點。下面對三個階段的研究進展情況作簡單介紹:

第一階段(1964年~1990年)

這一階段人臉識別通常只是作為一個一般性的模式識別問題來研究,所採用的主要技術方案是基於人臉幾何結構特徵(Geometricfeature based)的方法。這集中體現在人們對於剪影(Profile)的研究上,人們對面部剪影曲線的結構特徵提取與分析方面進行了大量研究。人工神經網路也一度曾經被研究人員用於人臉識別問題中。較早從事AFR研究的研究人員除了布萊索(Bledsoe)外還有戈登斯泰因(Goldstein)、哈蒙(Harmon)以及金出武雄(Kanade Takeo)等。金出武雄於1973年在京都大學完成了第一篇AFR方面的博士論文,直到現在,作為卡內基-梅隆大學(CMU)機器人研究院的一名教授,仍然是人臉識別領域的活躍人物之一。他所在的研究組也是人臉識別領域的一支重要力量。總體而言,這一階段是人臉識別研究的初級階段,非常重要的成果不是很多,也基本沒有獲得實際應用。

第二階段(1991年~1997年)

這一階段盡管時間相對短暫,但卻是人臉識別研究的高潮期,可謂碩果累累:不但誕生了若干代表性的人臉識別演算法,美國軍方還組織了著名的FERET人臉識別演算法測試,並出現了若干商業化運作的人臉識別系統,比如最為著名的Visionics(現為Identix)的FaceIt系統。

美國麻省理工學院(MIT)媒體實驗室的特克(Turk)和潘特蘭德(Pentland)提出的「特徵臉」方法無疑是這一時期內最負盛名的人臉識別方法。其後的很多人臉識別技術都或多或少與特徵臉有關系,現在特徵臉已經與歸一化的協相關量(NormalizedCorrelation)方法一道成為人臉識別的性能測試基準演算法。

這一時期的另一個重要工作是麻省理工學院人工智慧實驗室的布魯內里(Brunelli)和波基奧(Poggio)於1992年左右做的一個對比實驗,他們對比了基於結構特徵的方法與基於模板匹配的方法的識別性能,並給出了一個比較確定的結論:模板匹配的方法優於基於特徵的方法。這一導向性的結論與特徵臉共同作用,基本中止了純粹的基於結構特徵的人臉識別方法研究,並在很大程度上促進了基於表觀(Appearance-based)的線性子空間建模和基於統計模式識別技術的人臉識別方法的發展,使其逐漸成為主流的人臉識別技術。

貝爾胡米爾(Belhumeur)等提出的Fisherface人臉識別方法是這一時期的另一重要成果。該方法首先採用主成分分析(PrincipalComponent Analysis,PCA,亦即特徵臉)對圖像表觀特徵進行降維。在此基礎上,採用線性判別分析(LinearDiscriminant Analysis, LDA)的方法變換降維後的主成分以期獲得「盡量大的類間散度和盡量小的類內散度」。該方法目前仍然是主流的人臉識別方法之一,產生了很多不同的變種,比如零空間法、子空間判別模型、增強判別模型、直接的LDA判別方法以及近期的一些基於核學習的改進策略。

麻省理工學院的馬哈丹(Moghaddam)則在特徵臉的基礎上,提出了基於雙子空間進行貝葉斯概率估計的人臉識別方法。該方法通過「作差法」,將兩幅人臉圖像對的相似度計算問題轉換為一個兩類(類內差和類間差)分類問題,類內差和類間差數據都要首先通過主成分分析(PCA)技術進行降維,計算兩個類別的類條件概率密度,最後通過貝葉斯決策(最大似然或者最大後驗概率)的方法來進行人臉識別。

人臉識別中的另一種重要方法——彈性圖匹配技術(Elastic GraphMatching,EGM) 也是在這一階段提出的。其基本思想是用一個屬性圖來描述人臉:屬性圖的頂點代表面部關鍵特徵點,其屬性為相應特徵點處的多解析度、多方向局部特徵——Gabor變換[12]特徵,稱為Jet;邊的屬性則為不同特徵點之間的幾何關系。對任意輸入人臉圖像,彈性圖匹配通過一種優化搜索策略來定位預先定義的若乾麵部關鍵特徵點,同時提取它們的Jet特徵,得到輸入圖像的屬性圖。最後通過計算其與已知人臉屬性圖的相似度來完成識別過程。該方法的優點是既保留了面部的全局結構特徵,也對人臉的關鍵局部特徵進行了建模。近來還出現了一些對該方法的擴展。

局部特徵分析技術是由洛克菲勒大學(RockefellerUniversity)的艾提克(Atick)等人提出的。LFA在本質上是一種基於統計的低維對象描述方法,與只能提取全局特徵而且不能保留局部拓撲結構的PCA相比,LFA在全局PCA描述的基礎上提取的特徵是局部的,並能夠同時保留全局拓撲信息,從而具有更佳的描述和判別能力。LFA技術已商業化為著名的FaceIt系統,因此後期沒有發表新的學術進展。

由美國國防部反毒品技術發展計劃辦公室資助的FERET項目無疑是該階段內的一個至關重要的事件。FERET項目的目標是要開發能夠為安全、情報和執法部門使用的AFR技術。該項目包括三部分內容:資助若干項人臉識別研究、創建FERET人臉圖像資料庫、組織FERET人臉識別性能評測。該項目分別於1994年,1995年和1996年組織了3次人臉識別評測,幾種最知名的人臉識別演算法都參加了測試,極大地促進了這些演算法的改進和實用化。該測試的另一個重要貢獻是給出了人臉識別的進一步發展方向:光照、姿態等非理想採集條件下的人臉識別問題逐漸成為熱點的研究方向。

柔性模型(Flexible Models)——包括主動形狀模型(ASM)和主動表觀模型(AAM)是這一時期內在人臉建模方面的一個重要貢獻。ASM/AAM將人臉描述為2D形狀和紋理兩個分離的部分,分別用統計的方法進行建模(PCA),然後再進一步通過PCA將二者融合起來對人臉進行統計建模。柔性模型具有良好的人臉合成能力,可以採用基於合成的圖像分析技術來對人臉圖像進行特徵提取與建模。柔性模型目前已被廣泛用於人臉特徵對准(FaceAlignment)和識別中,並出現了很多的改進模型。

總體而言,這一階段的人臉識別技術發展非常迅速,所提出的演算法在較理想圖像採集條件、對象配合、中小規模正面人臉資料庫上達到了非常好的性能,也因此出現了若干知名的人臉識別商業公司。從技術方案上看, 2D人臉圖像線性子空間判別分析、統計表觀模型、統計模式識別方法是這一階段內的主流技術。

第三階段(1998年~現在)

FERET』96人臉識別演算法評估表明:主流的人臉識別技術對光照、姿態等由於非理想採集條件或者對象不配合造成的變化魯棒性比較差。因此,光照、姿態問題逐漸成為研究熱點。與此同時,人臉識別的商業系統進一步發展。為此,美國軍方在FERET測試的基礎上分別於2000年和2002年組織了兩次商業系統評測。

基奧蓋蒂斯(Georghiades)等人提出的基於光照錐 (Illumination Cones) 模型的多姿態、多光照條件人臉識別方法是這一時期的重要成果之一,他們證明了一個重要結論:同一人臉在同一視角、不同光照條件下的所有圖像在圖像空間中形成一個凸錐——即光照錐。為了能夠從少量未知光照條件的人臉圖像中計算光照錐,他們還對傳統的光度立體視覺方法進行了擴展,能夠在朗博模型、凸表面和遠點光源假設條件下,根據未知光照條件的7幅同一視點圖像恢復物體的3D形狀和表面點的表面反射系數(傳統光度立體視覺能夠根據給定的3幅已知光照條件的圖像恢復物體表面的法向量方向),從而可以容易地合成該視角下任意光照條件的圖像,完成光照錐的計算。識別則通過計算輸入圖像到每個光照錐的距離來完成。

以支持向量機為代表的統計學習理論也在這一時期內被應用到了人臉識別與確認中來。支持向量機是一個兩類分類器,而人臉識別則是一個多類問題。通常有三種策略解決這個問題,即:類內差/類間差法、一對多法(one-to-rest)和一對一法(one-to-one)。

布蘭茲(Blanz)和維特(Vetter)等提出的基於3D變形(3D Morphable Model)模型的多姿態、多光照條件人臉圖像分析與識別方法是這一階段內一項開創性的工作。該方法在本質上屬於基於合成的分析技術,其主要貢獻在於它在3D形狀和紋理統計變形模型(類似於2D時候的AAM)的基礎上,同時還採用圖形學模擬的方法對圖像採集過程的透視投影和光照模型參數進行建模,從而可以使得人臉形狀和紋理等人臉內部屬性與攝像機配置、光照情況等外部參數完全分開,更加有利於人臉圖像的分析與識別。Blanz的實驗表明,該方法在CMU-PIE(多姿態、光照和表情)人臉庫和FERET多姿態人臉庫上都達到了相當高的識別率,證明了該方法的有效性。

2001年的國際計算機視覺大會(ICCV)上,康柏研究院的研究員維奧拉(Viola)和瓊斯(Jones)展示了他們的一個基於簡單矩形特徵和AdaBoost的實時人臉檢測系統,在CIF格式上檢測准正面人臉的速度達到了每秒15幀以上。該方法的主要貢獻包括:1)用可以快速計算的簡單矩形特徵作為人臉圖像特徵;2)基於AdaBoost將大量弱分類器進行組合形成強分類器的學習方法;3)採用了級聯(Cascade)技術提高檢測速度。目前,基於這種人臉/非人臉學習的策略已經能夠實現准實時的多姿態人臉檢測與跟蹤。這為後端的人臉識別提供了良好的基礎。

沙蘇哈(Shashua)等於2001年提出了一種基於商圖像[13]的人臉圖像識別與繪制技術。該技術是一種基於特定對象類圖像集合學習的繪制技術,能夠根據訓練集合中的少量不同光照的圖像,合成任意輸入人臉圖像在各種光照條件下的合成圖像。基於此,沙蘇哈等還給出了對各種光照條件不變的人臉簽名(Signature)圖像的定義,可以用於光照不變的人臉識別,實驗表明了其有效性。

巴斯里(Basri)和雅各布(Jacobs)則利用球面諧波(Spherical Harmonics)表示光照、用卷積過程描述朗博反射的方法解析地證明了一個重要的結論:由任意遠點光源獲得的所有朗博反射函數的集合形成一個線性子空間。這意味著一個凸的朗博表面物體在各種光照條件下的圖像集合可以用一個低維的線性子空間來近似。這不僅與先前的光照統計建模方法的經驗實驗結果相吻合,更進一步從理論上促進了線性子空間對象識別方法的發展。而且,這使得用凸優化方法來強制光照函數非負成為可能,為光照問題的解決提供了重要思路。

FERET項目之後,涌現了若幹人臉識別商業系統。美國國防部有關部門進一步組織了針對人臉識別商業系統的評測FRVT,至今已經舉辦了兩次:FRVT2000和FRVT2002。這兩次測試一方面對知名的人臉識別系統進行了性能比較,例如FRVT2002測試就表明Cognitec, Identix和Eyematic三個商業產品遙遙領先於其他系統,而它們之間的差別不大。另一方面則全面總結了人臉識別技術發展的現狀:較理想條件下(正面簽證照),針對37437人121,589 幅圖像的人臉識別(Identification)最高首選識別率為73%,人臉驗證(Verification)的等錯誤率(EER[14])大約為6%。FRVT測試的另一個重要貢獻是還進一步指出了目前的人臉識別演算法亟待解決的若干問題。例如,FRVT2002測試就表明:目前的人臉識別商業系統的性能仍然對於室內外光照變化、姿態、時間跨度等變化條件非常敏感,大規模人臉庫上的有效識別問題也很嚴重,這些問題都仍然需要進一步的努力。

總體而言,目前非理想成像條件下(尤其是光照和姿態)、對象不配合、大規模人臉資料庫上的人臉識別問題逐漸成為研究的熱點問題。而非線性建模方法、統計學習理論、基於Boosting[15]的學習技術、基於3D模型的人臉建模與識別方法等逐漸成為備受重視的技術發展趨勢。

總而言之, 人臉識別是一項既有科學研究價值,又有廣泛應用前景的研究課題。國際上大量研究人員幾十年的研究取得了豐碩的研究成果,自動人臉識別技術已經在某些限定條件下得到了成功應用。這些成果更加深了我們對於自動人臉識別這個問題的理解,尤其是對其挑戰性的認識。盡管在海量人臉數據比對速度甚至精度方面,現有的自動人臉識別系統可能已經超過了人類,但對於復雜變化條件下的一般人臉識別問題,自動人臉識別系統的魯棒性和准確度還遠不及人類。這種差距產生的本質原因現在還不得而知,畢竟我們對於人類自身的視覺系統的認識還十分膚淺。但從模式識別和計算機視覺等學科的角度判斷,這既可能意味著我們尚未找到對面部信息進行合理采樣的有效感測器(考慮單目攝像機與人類雙眼系統的差別),更可能意味著我們採用了不合適的人臉建模方法(人臉的內部表示問題),還有可能意味著我們並沒有認識到自動人臉識別技術所能夠達到的極限精度。但無論如何,賦予計算設備與人類似的人臉識別能力是眾多該領域研究人員的夢想。相信隨著研究的繼續深入,我們的認識應該能夠更加准確地逼近這些問題的正確答案。

㈨ aam library怎麼編譯

該項目實現了完整的aam演算法,但是詭異的是,原本在googlde code上的http://code.google.com/p/aam-library/
該項目現在竟然無法訪問(PS,難道是因為效果太好了,被閉源了?)

由於OpenCV出現比較晚,因此aam是基於opencv1.0用C++編寫的。在aam的reamde裡面,作者提到了需要用opencv1.0並且需要修改opencv的幾處代碼才能正確使用aam。

現在嘗試想將aam移植到Android,然而android的opencv是2.2以上的,最新版本是2.3。這個確實讓人頭疼了。

抱著試試看的態度直接現在VS2008裡面用OPENCV2.3來編譯aam,運行完全沒有問題!

於是馬上興奮地進入aam的移植工作…

㈩ 匯編程序:從鍵盤輸入兩個十進制數然後把這兩個數相加,並將結果顯示在屏幕上

data segment

num1 db 0;3 p(?)

num2 db 0;3 p(?)

data ends

code segment 'code'

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov si,offset num1

輸入一組數

mov ah,01h

int 21h

sub al,'0';;

mov dl,al

mov cl,3

shl al,cl

shl dl,1

add al,dl

mov [si],al

mov ah,01h

int 21h

sub al,'0'

add [si],al

mov ah,01h

int 21h

mov bx,offset num2

再輸入一組數

mov ah,01h

int 21h

sub al,'0'

mov dl,al

mov cl,3

shl al,cl

shl dl,1

add al,dl

mov [bx],al

mov ah,01h

int 21h

sub al,'0'

add [bx],al

mov ah,02h

mov dl,0dh

int 21h

mov dl,0ah

int 21h

把兩組數求和

mov al,[bx]

add al,[si];al=sum

xor ah,ah

mov cl,100

div cl

mov bx,ax

test al,al

jz @f

add al,'0'

mov dl,al

mov ah,02h

int 21h

@@:

mov al,bh

xor ah,ah

mov cl,10

div cl

mov bx,ax

add al,'0'

mov dl,al

mov ah,02h

int 21h

add bh,'0'

mov dl,bh

mov ah,02h

int 21h

mov ah,4ch

int 21h

code ends

end start

input example:

12 34<Enter>

or

02 08<Enter>

(10)aam演算法擴展閱讀:

十進制轉二進制代碼:

void dectobin( int n ){

int result=0,k=1,i,temp;

temp = n;

while(temp){

i = temp%2;

result = k * i + result;

k = k*10;

temp = temp/2;

}

printf("%d ", result);

}

演算法分析:

在實現模2取余後需要逆序輸出,這個地方通過不斷乘以10來實現後一位比前一位的位數多10,不需要再通過數組或者逆序函數來實現。

熱點內容
代碼分析演算法 發布:2024-10-09 00:47:11 瀏覽:160
晶元寫程序需要配置哪些文件 發布:2024-10-09 00:38:39 瀏覽:934
存儲儲存搬運 發布:2024-10-09 00:28:42 瀏覽:717
吃雞電腦適合什麼配置 發布:2024-10-09 00:18:24 瀏覽:228
java線程實例 發布:2024-10-09 00:05:34 瀏覽:193
文檔放在安卓手機哪裡 發布:2024-10-08 23:35:00 瀏覽:439
我的世界伺服器拔刀強化 發布:2024-10-08 22:59:37 瀏覽:430
伺服器換ip寶塔面板 發布:2024-10-08 22:58:56 瀏覽:433
如何通過伺服器搭建網站 發布:2024-10-08 22:58:54 瀏覽:240
賽爾編程 發布:2024-10-08 22:30:12 瀏覽:164