1. 程式人生 > >一個android反除錯的學習

一個android反除錯的學習

前言

初學android逆向除錯,用阿里上次的比賽練練手,第二題就是一個包含android反除錯機制的題目,於是仔細除錯分析了一下其反除錯的原理,記錄下來。

除錯方法

這個apk核心功能在so檔案中實現,於是試圖動態除錯so檔案,在關鍵函式下斷點之後,attach,F9,程式直接就退出了,經過一番搜尋,找到一種除錯方法。

  1. adb shell am start -D -n com.yaotong.crackme/.MainActivity
  2. 啟動IDA的android_server
  3. adb forward tcp:23946 tcp:23946
  4. IDA attach 到要除錯的程序上
  5. jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

    之後在JNI_Onload下斷點,就可以除錯了。

反除錯

這個apk的反除錯,是在JNI_Onload函式裡,建立了一個執行緒,然後在這個執行緒的執行函式中,迴圈檢查tracerpid,該執行緒的執行函式如下圖。

主要除錯了一下這個檢測函式。首先通過getpid獲取當前程序號。

程序號在R0中。接下來通過sprintf拼接處/proc/pid/status字串,為後面讀取該其資訊做準備。
這裡寫圖片描述
隨後通過fopen,開啟該檔案。

之後通過strstr和fgets,迴圈讀取資料,直到找到tracerpid,這裡沒有截圖。當找到tracerpid後,通過sscanf提取其資料。
這裡寫圖片描述


可以看到,tracerpid為0x6DD4,即28116。也就是其除錯程序pid為28116。當tracerpid大於等於1時,認為當前程序正在被除錯中,跳到kill函式上,將當前程序退出。下圖為命令列得到的/proc/29592/status資訊,和android_server的pid,和除錯分析相對應。
這裡寫圖片描述
這裡寫圖片描述

總結

可以看到,這個apk的反除錯方法還是相對簡單,就是查詢其tracerpid的值,然後只要其大於0,就認為被除錯,從而退出。後面對該apk的破解就不寫出了,網上有很多方法。關於android的安全方面的學習,後面還要努力!

相關推薦

一個android除錯學習

前言 初學android逆向除錯,用阿里上次的比賽練練手,第二題就是一個包含android反除錯機制的題目,於是仔細除錯分析了一下其反除錯的原理,記錄下來。 除錯方法 這個apk核心功能在so檔案中實現,於是試圖動態除錯so檔案,在關鍵函式下斷點之後,

Android除錯筆記

1)程式碼執行時間檢測 通過取系統時間,檢測關鍵程式碼執行耗時,檢測單步除錯,類似函式有:time,gettimeofday,clock_gettime. 也可以直接使用匯編指令RDTSC讀取,但測試ARM64有相容問題。 time_t t1, t2; time (&

Android除錯之 AntiEmulator 檢測安卓模擬器

八種方法檢測是否存在模擬器 檢查特定的幾個關鍵點 0×1 檢測“/dev/socket/qemud”,“/dev/qemu_pipe”這兩個通道 程式碼demo: Java 123456789101112131415161718private

Android 除錯、so檔案注入

關鍵程式碼: Thread t=new Thread(new Runnable() { @Override public void run() {

Android安全/應用逆向--29--在JNI_onload函式處下斷點避開針對IDA的除錯

7-6、在JNI_onload函式處下斷點避開針對IDA的反除錯 為了防止apk中的so檔案被動態除錯,開發者往往會使用一些反除錯手段來干擾黑客的動態除錯。其中最常見的就是在so檔案中檢測TracerPid值。通過在JNI_onload下斷點即可避開反除錯。 反

Android學習筆記整理(5)--Android程式除錯

每個Android應用上線之前都會進行一系列的測試,確保應用能夠正常使用。通常使用JUnit單元測試,另外還可以使用LogCat(日誌控制檯)來除錯錯誤。一、JUnit單元測試1.配置JUnit環境在進行JUnit測試時,我們需要在AndroidManifest.xml的&l

個人安卓學習筆記---第一個Android應用程式

今天是學習Android的第二天,昨天我們主要學習瞭如何配置Android開發環境和第一個Android程式,HELLOWORLD。但是並沒有解釋清楚,我們現在來看一下,適用Eclipse開發Android應用大致需要的步驟: 1.建立1個Android專案 2.在XML佈局

Android native除錯方式及使用IDA繞過除錯

    0x00     為了避免我們的so檔案被動態分析,我們通常在so中加入一些反除錯程式碼,常見的Android native反除錯方法有以下幾種。     1、直接呼叫ptrace(PTRACE_TRACEME, 0, 0, 0),參考Android Native反除

android。apk編譯學習,精簡實用版

作為一個開發者,你可能會很想知道這些效果介面是怎麼去實現的,這時,你便可以對改應用的APK進行反編譯檢視。下面是我參考了一些文章後簡單的教程詳解。 (注:反編譯不是讓各位開發者去對一個應用破解搞重灌什麼的,主要目的是為了促進開發者學習,借鑑好的程式碼,提升自我開發水平

ANDROID編譯工具APKTOOL原始碼除錯過程

APKTOOL是目前反編譯ANDROID apk的主要工具,可以反編譯出APK裡的資原始檔和smali程式碼,而有些APK開發者為了防止自己的程式碼被反編譯,針對APKTOOL工具加固程式碼,使得APKTOOL無法執行正常,比如這篇文章介紹的Android應用資

自己收集的資料 僅供學習使用——————Android編譯(經驗證)

在學習Android開發的過程你,你往往會去借鑑別人的應用是怎麼開發的,那些漂亮的動畫和精緻的佈局可能會讓你愛不釋手,作為一個開發者,你可能會很想知道這些效果介面是怎麼去實現的,這時,你便可以對改應用的APK進行反編譯檢視。下面是我參考了一些文章後簡單的教程詳解。 (注

android 編譯 除錯入門資料

0x01 反編譯出錯 1.插入無效指令是部分逆向工具崩潰 原理:大部分逆向工具都是線性讀取位元組碼並解析, 如dex2jar,baksmali,apktool等,當遇到無效位元組碼時,就會引起反編譯工具解析失敗。例如:新版的dex2jar 遇到這種情況任然沒法轉化成jar,

Android一個妹zhi的學習之路_心得體會

       今天停下來,思考了一下Android學習路線,發現自己有點亂了。看了一篇部落格,給了我很大的感觸,思索下我開通了部落格,想把自己的一些感悟和總結在部落格上分享。 -----------------------------------------------

修改Android手機核心,繞過除錯

0x1.手機裝置環境 Model number: Nexus 5 OS Version: Android 4.4.4 KTU84P Kernel Version: 3.4.0-gd59db4e 0x2.Android核心提取 查詢Android裝置的boot分割槽

Android應用基礎學習記錄

應用 ctp 例如 case 推薦 都沒有 變量命名規則 bytearray href 01_前言 前言,了解了Android的情況。這裏也介紹一下本文。本文是記錄學習Android應用程序開發過程,視頻中使用的Android2.2版本號,我以4.2版本號為基礎,找

一個Android studio JNI程序

say debug native mil 教程 lib 國內 generate mea 現在網上有很多實用JNI的教程,本文主要用於記錄自己實現的方法和遇到的坑。 第一步,下載NDK. NDK可以去谷歌Android developer上下載。國內也有些中國版

嵌入式學習容易嗎?該如何選擇一個好的嵌入式學習路線?

-c building 缺陷 電路 lan dev 而後 嵌入式linux 組成   嵌入式開發大概要學習那些知識呢?淩陽教育的老師說對於嵌入式開發我們要從它的最基本的步驟開始學習   1、基礎知識:   目的:能看懂硬件工作原理,但重點在嵌入式軟件,特別是操作系統級軟件,

三張圖教你生成一個Android jar 庫。

教程 water b2c 是把 eas mod div log 第三方 我看到非常多教人使用第三方開源組件的Android教程。都是在教基於源代碼project的庫導入,個人覺得非常不妥,覺得最恰當的方式是把源代碼project生成一個jar再導入到目標project上

android編譯odex文件

lis 目錄 trac 依賴 andro xheditor span sys 放置 關於android的反編譯工具,相信大家並不陌生 如APK-TOOL,dex2jar APK-TOOL 用於反編譯出布局文件 下載地址http://code.google.co

android monkey測試學習

發生 退出 adb 解決 ash 隨機 級別 監視 信息 前提是:有安卓環境,能用adb命令 一、Monkey 測試的目的? 該工具可用於測試穩定性。 開發人員結合monkey 打印的日誌 和系統打印的日誌,解決測試中出現的問題 二、Monkey 測試的特點?Monkey