1. 程式人生 > >Android開發——後臺獲取使用者點選位置座標(可獲取使用者支付寶密碼)

Android開發——後臺獲取使用者點選位置座標(可獲取使用者支付寶密碼)

1. getevent命令

我們首先是根據adb shell getevent命令獲取到被點選位置的資訊。

這裡要說明的是,不同的手機手機獲得的點選輸出是不一樣的。以我的真機為例,輸出如下

/dev/input/event0 3 39 3e1
/dev/input/event0 1 14a 1
/dev/input/event0 1 145 1
/dev/input/event0 3 35 406  //x座標
/dev/input/event0 3 54 1083  //y座標
/dev/input/event0 0 0 0
/dev/input/event0 3 39 ffffffff
/dev/input/event0 1 14a 0
/dev/input/event0 1 145 0
/dev/input/event0 0 0 
我看到網上很多人的輸出很簡單,這樣分析起來還比較簡單。因廠家而異吧,我的輸出就有些複雜,通過我的大量點選測試分析,在本機上,上面除了xy座標,其他指令是固定的,當然我也獲得很多其他指令(每一行的倒數第二個數),因為不是必須的,所以沒列出來。經過查閱資料,其他訊號的對應資訊如下。
#define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
#define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */
#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */

2. sendevent實現模擬長按

我很好奇如果把輸出的這些指令原封不動地給系統返還回去會有什麼結果,我以為會是簡單的重複點選,可是把1中獲得的訊號全部通過shell命令輸入,獲得的竟然是長按的效果。很意外,具體是因為什麼我也不清楚。可能在其他手機上就不是這個效果了。

這裡需要注意的是,我們獲得的是16進位制,輸入必須是10進位制,需要自行轉換一下。

根據不同的解析度,獲得的16進位制如何轉換為真實的座標值,這篇博文已經講述的很詳細了。

其他的比如模擬點選,滑動,輸入等操作已經在前面使用ADB進行模擬點選的文章裡介紹過了。

3. 密碼獲取

通過2中的連結文,已經介紹過了如何通過程式碼形式執行Shell命令。

這裡當然是將“getevent”作為命令寫入指令碼啦。注意要開啟子執行緒,否則會引起ANR

然後就開啟了使用者點選,我們只要拿到Runtime.getRuntime().exec("su").getInputStream()流並分析“35”以及“36”後的16進位制數,即可得到使用者的點選位置。這個流是錯誤流和正確流分開的,注意處理不當會阻塞。可按照以下幾種方法避免阻塞。

(1)可以通過將redirectErrorStream 屬性設定為true合併錯誤流和正確流。

(2)顯然可以想到兩種流,開啟兩個執行緒去接收。

(3)在已知輸出順序的情況下,調整處理流的程式碼順序。(不通用)

具體的如何從使用者大量的點選事件中獲取密碼。便是根據演算法來決定的了,演算法越精密,獲取到使用者密碼的可能性越大。

這裡可以提供一個思路:

1. 通過Accessibility機制只監聽支付寶。具體如何配置已經在Accessibility機制實現模擬點選介紹過了。

2. 在獲取到點選座標之後,可以通過判斷連續6個點均處於螢幕的下方來認為這是一組密碼(當然是不準確的),具體的篩選密碼的條件可以通過你的聰明才智去實現。

拿到密碼之後,便可以通過模擬點選去實現自動轉賬了。這個前面已經使用ADB Shell命令實現模擬點選中介紹過了。


相關推薦

Android開發——後臺獲取使用者位置座標獲取使用者支付密碼

1. getevent命令我們首先是根據adb shell getevent命令獲取到被點選位置的資訊。這裡要說明的是,不同的手機手機獲得的點選輸出是不一樣的。以我的真機為例,輸出如下/dev/inpu

JavaScript 獲取滑鼠位置座標

謝謝博主對我學習上的幫助 在一些DOM操作中我們經常會跟元素的位置打交道,滑鼠互動式一個經常用到的方面,令人失望的是不同的瀏覽器下會有不同的結果甚至是有的瀏覽器下沒結果,這篇文章就上滑鼠點選位置座標獲取做一些簡單的總結,沒特殊宣告程式碼在IE8,FireFox,Chro

JS 獲取螢幕位置座標 並 新增icon

.tips { position: absolute; z-index: 99; background: rgba(0,0,0,0.5); color: #fff; } (function ($) { var $selectedViewList = $

JS-設定/獲取滑鼠游標所在位置獲取滑鼠位置

滑鼠游標所在位置 // 設定滑鼠游標所在位置. function setCaretPosition(elem, pos){//設定游標位置函式 if(elem.setSelectionRange) { elem.focus(); elem.setS

Android開發實踐二:實踐

res>layout中.xml檔案中的<Button>控制元件中新增android:id="@+id/button1"可在src>……>中.java檔案中通過btn1=(Button)this.findViewById(R.id.button1)

Android開發實踐八:一個按鈕退出整個程式

# 參考資源 #https://blog.csdn.net/sinat_33921105/article/details/57096554main.java新增如下程式碼: public static

Android開發之--縮圖檢視大圖

android中點選縮圖檢視大圖的方法一般有兩種,一種是想新浪微博list頁面那樣,彈出一個視窗顯示大圖(原activity為背景)。另一種就是直接開啟一個新的activity顯示大圖。1、第一種方法我們可以使用自定義的AlertDialog來實現,程式碼如下: ImageView image=(Imag

控制檯上識別滑鼠位置座標

#include<windows.h> HANDLE hInput; /* 獲取標準輸入裝置控制代碼 */ INPUT_RECORD inRec;/* 返回資料記錄 */ DWORD numRead; /* 返回已讀取的記錄數 */ int Y,X

IOS 獲取手勢座標

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selecto

ubuntu Android開發eclipse不識別手機解決方法!附步步高vivo解決方法

也是花了我好久時間,最終才找到一個完整且簡單還可以直接見效的好方法。 方法兩個: 如果您的手機是比較好的大廠商牌子,如Moto,三星..什麼的,那麼就按部就班即可: 在終端輸入 sudo gedit /etc/udev/rules.d/51-android.rules在開

使用Glide實現在非WiFi環境手動下載圖片判斷Glide是否快取了圖片

1、概述 Glide作為Google推薦的一套快速高效的圖片載入框架,有很多人都在使用,我也不例外。不過在專案的需求中,難免會遇到一個這樣的需求:在非WiFi環境下,需要手動點選才能下載圖片。 這初步實現起來是很簡單的,但一些細節卻不好解決。比如,在使用移動

求解! vue2.0實現購物車小球掉落特效第一次動畫失效男默女淚的bug!

點選新增按鈕時有一個小球掉落到購物車的特效,第一次點選時動畫特效沒有出來,且沒有進入afterEnter方法。後面點選都沒有問題。 效果如圖:(第一次點選) 但是我在enter方法裡面下了一個斷點之後就有動畫效果,且進入了afterEnter。效果如下: 希望大

android 動態控制控制元件位置 控制元件位置位置

需求:進度圈顯示在手指點選位置 裝置:平板 解決辦法:將點選事件獲取到的位置(MotionEvent e)與控制元件設定位置建立聯絡 在網上找了很多都沒有解決問題,下面程式碼為自己摸索得到的解決辦法,可能不實用於所有,但已解決我的需求 main.setOnTouchListener

解決:Android App 在執行時候按下 home 鍵,讓App 在後臺執行,圖示再次進入時防止應用重新啟動

一:app 退出時,讓 app 在後臺執行,類似於 home 鍵的功能,最小化 重寫 onkeydown 和 onBackPressed 方法,主要是 movetoBack 方法。 注意在 MainA

滑鼠位置獲取資訊

//通過滑鼠點選位置獲取資訊 HitInfo = gridView1.CalcHitInfo(e.X, e.Y); if (HitInfo.InRowCell) {

js獲取頁面元素和滑鼠的位置

前端一些頁面效果實現時,往往需要操作大量的DOM物件,即要在某個特定的位置顯示某個元素。如:在滑鼠點選的位置顯示,就要獲取當前滑鼠的位置。 1 獲取滑鼠點選位置 2 獲取頁面元素位置 3 clientHeight、offsetHeight、scro

Android Studio 游標位置不在行首,而是跟隨滑鼠位置 問題解決

問題描述 AndroidStudio中游標的位置不是點選每行之後出現在每一行的行首,而是停留在滑鼠點選的位置,如下(游標停留位置前方並沒有空格): 解決 開啟了豎行選擇模式 關閉該模式即可解決問題。 組合鍵 Shift + Alt + Inser

android待機新增電量小部件,位置資訊圖示,模式切換需要改為四種

android版本為5.1 小部件功能的實現是在各自的應用程式裡面, 小部件新增的過程是在Launcher裡面 很明顯,電量小部件的實現是在Settings裡面 要寫一個widgets,必須用到AppWidgetProvider這個類 AppWidgetProvider它是

android判斷位置在一扇形區域內

android 判斷點選位置在一扇形區域內 在做仿支付寶記賬本介面效果時遇到了一個問題,在環形圖中點選每一個環是會顯示出不同的內容,因此,必須判斷使用者到底點選了哪個圓環,網上查閱資料說可以根據顏色來判斷,但是心裡總是覺得根據顏色不是很好的解決方案(雖然可以解

通過獲取滑鼠的位置來動態定位元素

$(document).on('click','.caina_span',function(e){ var block=$('.zan').css('display'); if($.tr