今天結合登錄功能講解反射獲取Java層字段的值。
1.打開eclipse工具,找到昨天文章分享裏面創建好的「yijindaxue」工程,在工程中找到「res」目錄,右鍵選擇「New」選項下的「Android XML File」,彈出一個創建佈局文件的對話框,填寫佈局文件名稱爲「activity_login」,選擇佈局文件類型爲「LinearLayout」,然後點擊Finish完成佈局文件的創建,如下圖所示。
2.編寫佈局xml文件的代碼,分爲兩個步驟進行操作:
第一步:在根LinearLayout(線性佈局)標籤中添加屬性
android:gravity=「center_vertical」,使其內容豎向居中。
第二步:將之前編寫的登錄界面的代碼複製到該文件中。
3.佈局代碼編寫完成後,切換到預覽界面,如下圖所示。
1.在「yijindaxue」工程中找到src目錄下的包名爲com.yijindaxue的文件並選中,右鍵選擇「New」下的「Class」,彈出新建類的對話框,在對話框中填寫類名爲LoginActivity後,點擊Finish完成LoginActivity類的創建,如下圖所示。
2.LoginActivity類創建完成後,開始編寫Java代碼,如下圖所示。
在「yijindaxue」工程中找到「AndroidManifest.xml」文件,修改程序入口界面爲「LoginActivity」,再添加一個活動組件「MainActivity」,如下圖所示。
在「yijindaxue」工程下選中src目錄右鍵選擇最後一項,properties,點擊該選項彈出彈窗,複製Location對應的值,也就是文件的路徑D:\Android \data\yijindaxue\src,複製成功後關閉對話框,如下圖所示。
點擊左下角「windows」圖標,輸入「cmd」命令打開窗口,輸入「D:」切換到D盤,然後執行命令「cd D:\Android\data\yijindaxue\src」,進入src目錄,緊接着執行命令「javah -jni com.yijindaxue.LoginActivity」生成「.h」頭文件,如下圖所示。
返回「yijindaxue」工程界面,選中src目錄,右鍵F5刷新,看到一個com_yijindaxue_MainActivity.h文件,將該文件移動至jni文件夾中,然後雙擊打開該文件,如下圖所示。
在「yijindaxue」工程中找到「jni」目錄下的「yijindaxue.c」文件,雙擊打開該文件,編寫相應的C代碼。
使用「#include」命令導入之前生成的頭文件,然後將頭文件中的函數複製粘貼至下圖方框位置,刪除「;」,並添加{},在對應的類型後面添加兩個變量名env和obj,如下圖所示。
編寫C代碼,反射獲取Java層字段的值,如下圖所示。
1.調用FindClass函數獲取對應的類。
2.獲取Java層實例字段的值:
3.獲取Java層靜態字段的值:
4.調用strcmp函數來比較用戶輸入的賬號和密碼是否正確。
在「yijindaxue」工程下選中jni目錄,右鍵選擇「properties」,點擊該選項彈出彈窗,複製「Location」對應的值,也就是文件路徑D:\ Android\data\yijindaxue\jni,複製成功後關閉對話框,如下圖所示。
點擊左下角「windows」圖標,輸入「cmd」命令打開窗口,輸入「D:」切換至D盤,然後執行命令「cd D:\Android\data\yijindaxue\jni」進入jni目錄,緊接着執行「ndk-build」命令生成動態鏈接庫「.so」文件,如下圖所示。
由於在調用native方法之前,要先加載so庫,否則程序會崩潰,所以要將so庫的位置進行修改,將MainActivity.java文件中的so庫加載代碼剪切至LoginActivity. java文件中,如下圖所示。
打開雷電模擬器,運行應用程序:選中「yijindaxue」工程=>右鍵選擇Run As選項=> 點擊Android Application。
運行該程序後,當輸入正確的賬號和密碼,會彈出彈窗提示登錄成功,並且跳轉到了主頁面。
登錄功能實現流程完成:
1、新建activity_login佈局文件,編寫代碼是登錄界面。
2、新建LoginActivity類,編寫Java層登錄邏輯。
3、修改AndroidManifest.xml文件。
4、執行javah命令生成.h頭文件,並將頭文件移到jni文件夾。
5、編寫C代碼,獲取Java層字段的值。
6、使用NDK工具編譯.c文件生成動態鏈接庫.so文件。
7、修改so庫加載位置。
8、運行應用程序。
如果你也對安卓逆向感興趣。可以加下方的羣,大家一起討論問題,或者掃描下方二維碼關注公衆號,關注回覆 「安卓逆向」 獲取免費教程
安卓逆向交流學習:1139349849
vx:Yjxiaox