當前位置:首頁 » 安卓系統 » ptraceandroid

ptraceandroid

發布時間: 2022-06-25 07:30:13

Ⅰ 如何hook android framwork api

1.向目標進程注入代碼(注入so,並調用該so里的一個函數)。首先調用ptrace函數,調試com.android.browser進程,在這里我們需要遍歷該進程載入的libc.so,這里有我們需要的dlopen,dlsym等函數的地址,我們先中斷com.android.phone,修改其寄存器,壓入參數如我們的so路徑,並將之前找到的dlopen地址壓入寄存器,直接操作blx,就可以讓目標進程調用dlopen載入我們的so,同理dlsym調用我們的so里的函數。

下面就是我做的工作,重定向函數實現hook。

2.com.android.phone程序打電話等網路連接時調用了xxx.so,該so維護了一個got表和rel.plt表。其中rel.plt表存放了外部依賴函數的地址,而got表裡存放的就是本so定義的函數的地址。在上文被注入的so已經和com.android.phone處於一個進程空間,並且可以執行一段我們設定的代碼。我們的代碼應該這么做。我們也載入xxx.so,這里不會真正的載入,因為已經載入過了,但是我們可以獲得xxx.so的句柄,然後查找到rel.plt表中的dial函數表項。然後載入我們寫的一個myxxx.so,該so里有我們自己定義的mydial函數,注意兩個函數的簽名必須一致。同理我們找到mydial函數載入後的地址,然後將之前xxx.so的dial表項的函數地址替換為我們的mydial函數的地址。注意在地址替換時需要先調用mprotect函數來突破so內存空間的防寫。
在mydial函數里,我們了dial函數的全部代碼,但是有一個改變。就是將目標電話號碼修改為我們指定的號碼。

查找函數地址表項代碼為

//handle為目標so的句柄,name為目標函數名

void* getaddr(void *handle,const char *name)
{
if(!handle)

return;
Soinfo *si = (Soinfo*)handle;
Elf32_Sym *symtab = si->symtab;
const char *strtab = si->strtab;
Elf32_Rel *rel = si->plt_rel;
unsigned count = si->plt_rel_count;
unsigned idx;
for(idx=0; idx<count; idx++) //外部依賴函數在rel_plt中
{
unsigned type = ELF32_R_TYPE(rel->r_info);
unsigned sym = ELF32_R_SYM(rel->r_info);
unsigned reloc = (unsigned)(rel->r_offset + si->base);
char *sym_name = (char *)(strtab + symtab[sym].st_name);
if(strcmp(sym_name, name)==0)
{
printf("\"plt_rel\" idx:%2d type:%2d sym:%2d sym_name:%-30s addr:%0x\n",idx,type,sym,sym_name,*((unsigned*)reloc));
return (void *)*((unsigned*)reloc);
}
rel++;
}
for(idx=0;idx<si->nchain;idx++) //自定義函數在symtab中
{
unsigned type = ELF32_R_TYPE(symtab[idx].st_info);
unsigned sym = ELF32_R_SYM(symtab[idx].st_info);
char *sym_name = (char *)(strtab + symtab[idx].st_name);
if(strcmp(sym_name, name)==0)
{
printf("\"got\" idx:%2d sym_name:%-30s st_value:%0x base: %0x\n",idx,sym_name,symtab[idx].st_value,si->base);
return (void *)(symtab[idx].st_value+si->base);
}
};
return NULL; //not found
}

至於替換函數執行地址,就是將目標函數地址修改為之前找到的用於代替目標函數執行的函數地址。注意got表中時相對so的base的值,需要加減兩個so的base差值。而rel.plt表中則是絕對地址。

從安全的角度入手,我們可以hook關鍵函數,實現許可權操作限制。

--------------------------------------------------------------------------------------------------------

防止注入的思路:

1.設置android:debuggable為false,禁止被ptrace;

2.修改mmap、dlopen等函數的地址,防止被其他進程調用;

3.動態監測有無載入其他so,有的話就卸載它

Ⅱ 如何阻止ptrace

最近開始了解一些APK版本安全問題,這里保護不是源代碼,而是阻止二次打包,無論加殼,dex動態載入,簽名驗證等都只是一定程度上阻止罷了,無論如何處理,只要破解者通過gdb動態調試,mp出dex文件,稍加分析,就可以比較輕松的實現二次打包。
所以考慮在前面安全措施的情況下,如何阻止被動態調試,首先是關閉android:debugable="false",然後是在so中ptrace主進程,但是這樣做不全面,因為每個應用都有一個進程組,裡面有很多進程,只要附著到任意一個組進程上,都可以實現動態調試,此前一篇文章中梆梆加密就是如此破解的。

Ⅲ android注入so怎麼使用

dhrurthr64uhtdh

Ⅳ ptrace保護是什麼意思

ptrace保護是首先是關閉android:debugable="false",然後是在so中ptrace主進程,但是這樣做不全面,因為每個應用都有一個進程組,裡面有很多進程,只要附著到任意一個組進程。

我們找到mydial函數載入後的地址,然後將之前xxx.so的dial表項的函數地址替換為我們的mydial函數的地址。

注意在地址替換時需要先調用mprotect函數來突破so內存空間的防寫。 在mydial函數里,我們了dial函數的全部代碼,但是有一個改變。就是將目標電話號碼修改為我們指定的號碼。


當執行到int 0x3:

激活控制台並屏蔽中斷,然後將int 0x3指令前後范圍的指令反匯編並寫入顯存映射地址空間,並把最新的寄存器值也寫進去,最後在後台循環等待鍵盤輸入命令。當命令是F10時,設置好EFLAG的TF位,清除8259A中斷控制器里的中斷屏蔽寄存器。

開放所有中斷,將控制台清除,從循環代碼中返回新鍵盤(或int 0x3)中斷處理程序,然後再返回到正常鍵盤(或int 0x3)中斷處理程序,由這里iret到被中斷代碼處執行。執行了一個指令後因為發生單步異常又進入後台循環代碼。

Ⅳ Android開發App如何進行加固

1.避
免技巧:使用內部API。即便我們總是建議不要這么做,但還是有一些開發者選擇使用那些不支持或者內部的API。例如,許多開發者使用內部的亮度控制和藍
牙切換API,這些API出現在1.0和1.1版本上。一個Bug——在Android
1.5上進行了修正——允許App在不需要請求許可權的情況下使用這些API。結果,使用了這些API的App在1.5上掛掉了。如果你在App中使用了這
些內部API,你需要做的是:停止這一做法,更新你的程序。

2.避
免技巧:直接操作Settings。嚴格來講,這一條不算,因為我們可以通過Android本身進行操作。但之所以我們加上了這一條,是因為一些開發者做
了一些調皮的事情:一些App悄無聲息地修改了系統設定,而沒有通知用戶。例如,一些App沒有詢問用戶就直接打開了GPS,而另外一些則可能直接打開了
數據傳輸。

因此,應用程序不能直接操作某個特定的系統設定值,即便是它們之前能這么做。例如,App不能直接打開或關閉GPS。不是說使
用會導致App崩潰,而是不應該使用這些API。代替的,App需要發出一個Intent來啟動相應的Settings配置畫面,這樣用戶可以手動地修改
這些設定。詳細情況可以參考android.provider.Settings.Secure類,你可以在1.5_pre(和之後的)SDK文檔中找
到。注意,只有那些移動到Settings.Secure類中設定受到影響。其它的,還會像Android 1.1那樣有著相同的功能。

3.避
免技巧:過分布局。由於View渲染部分的變化,在布局中,過於深(超過10層左右)或過於多(超過30個左右)的View樹層次可能會導致程序崩潰。過
於復雜的布局總歸是有危險的,盡管你可以認為Android
1.5已經好於1.1。大多數開發者不需要對此擔心,但如果你的App有著非常復雜的布局,你還是應該對其「瘦身」。你可以使用一些高級的布局類,如
FrameLayout和TableLayout,來簡化你的布局。

4.避
免技巧:不好的硬體假設。Android
1.5支持軟鍵盤,因此,不久就會有很多設備不再包含物理鍵盤。如果你的程序假設物理鍵盤存在(例如,如果你創建一個自定義的View,並接收鍵按下消
息),你必須保證在只有軟鍵盤的設備上也工作正常。想了解更多關於這方面的信息,請繼續關注這個Blog,我們將會有更多關於處理軟鍵盤的詳細資料。

5.避
免技巧:無意識的旋轉。運行Android
1.5(及以上)的設備能夠根據用戶手持設備的方向自動地旋轉屏幕。一些1.5的設備默認這么做,而其它的需要用戶手動設置。應用程序自己的重定向在某種
程度上會導致不可預期的行為(不論是使用加速度計還是其它一些東西)。這種情況通常發生在應用程序假設有物理鍵盤時才能旋轉;如果設備沒有物理鍵盤,這些
App就不能進行重定向,而這明顯就是個編碼錯誤。開發者應該明確應用程序能在任何時間都能處理重定向。
同樣,App可以使用加速度計做到與系統
相同的事情——直接重定向自己,這也會引發奇怪的結果。一些App使用加速度計來監測像晃動動作什麼的,而又不將其方向鎖定為垂直或水平,經常會導致在方
向上來回翻動。而這就會激怒用戶。(你可以在manifest文件中使用android:screenOrientation特性來鎖定App的方向為垂
直或水平。)

Ⅵ android kernel和標准linux kernel的區別

android kernel和標准linux kernel的區別總的區別可以歸納如下:
ARCH -- 這是Android修改了arch/arm下面的一些文件:
arch/arm:
Chg: arch/arm/kernel/entry-armv.S
Chg: arch/arm/kernel/mole.c
Chg: arch/arm/kernel/process.c
Chg: arch/arm/kernel/ptrace.c
Chg: arch/arm/kernel/setup.c
Chg: arch/arm/kernel/signal.c
Chg: arch/arm/kernel/traps.c
Chg: arch/arm/mm/cache-v6.S
Chg: arch/arm/vfp/entry.S
Chg: arch/arm/vfp/vfp.h
Chg: arch/arm/vfp/vfphw.S
Chg: arch/arm/vfp/vfpmole.c
Goldfish -- 這是Android為了模擬器所開發的一個虛擬硬體平台。Goldfish執行arm926T指令(在2.6.29中,goldfish也支持ATMv7指令),但是在實際的設備中,該虛擬平台的文件不會被編譯

Ⅶ android怎麼清除最近任務

要想實現對任務列表的清除,要反射函數removeTask來實現。但是只有包含系統簽名的文件才能實現對任務列表的清除,所以難點就在怎麼突破這種驗證。

1.首先找到包含許可權"Android.permission.GET_TASKS"和"android.permission.REORDER_TASKS"的系統文件。
2.編寫反射清除任務列表的代碼,並生成apk。
3.ptrace找到的系統進程,並將apk注入到其中。
實現框架:
通過將系統進程作為傀儡進程來突破系統簽名驗證

Ⅷ 如何防止手游破解 愛加密Android加固來

總結的比較重要命令
cat /proc/pid/cmdline 查看命令行
cat /proc/pid/status 查看TracerPid.
ls /proc/pid/task 查看有多少線程
cat /proc/pid/task/tid/status 查看線程TracerPid.
dmsg | grep -i ptrace 利用kernel-model列印ptrace的記錄

Ⅸ 如何檢查android應用被篡改

Android APK如何防篡改?現智能手機逐漸成為大家生活的必備品,手機應用成為手機里的必需品,隨之而來的手機應用安全問題則成為了廣大用戶和開發者最關心的問題。一款好的Android應用一旦獲得成功,往往接下來面對的就是各種破解版的瘋狂轟炸,那麼Android APK如何防止被破解篡改?

方法/步驟
據統計現在中國的獨立APP數量已逼近50萬,APP開發市場日漸火熱,而打包黨通過破解、反編譯APK,插入廣告或收費代碼等不法手段來獲取巨額利潤。Android APK被篡改的主要原因是開發者在防止Android APK篡改、反編譯方面重視不夠或者技術不完善。由於Android系統的開放性,再加之,業內常用的防止APK篡改、反編譯的技術很透明,導致安卓APK能夠被輕易篡改破解。盜版APP製造者的行為嚴重影響了原創APP開發者的利益和APP開發行業健康發展。
據了解,目前不少開發者都在愛加密平台獲得了免費保護服務,愛加密是一個針對 Android應用APK進行安全加密保護的服務平台,加密前先會對APK應用進行一個基本的安全檢測,然後通過專業的安全加密技術對APK文件進行加殼保護,整體的邏輯構架非常嚴謹。愛加密目前提出的三層加密保護:DEX加殼保護,DEX指令動態載入保護,高級混淆保護,可以保證APP的動態安全和靜態安全,黑客將沒有機會進行任何破解。愛加密更在年前推出了SO庫保護,C/C++層面的代碼得到了專業保護,讓APK包無懈可擊。此外,愛加密在服務方面也很是到位,為客戶提供精確地APK安全分析檢測,並可根據APP開發者的不同要求進行定製 保護,以滿足不同APK開發者的需求。
愛加密目前加密應用涉及互聯網金融、學習、游戲、生活休閑等各類應用,如史上最坑爹的游戲、銅板街、WIFI伴侶、java學習手冊、史詩塔防、真三國鬥地主、美食傑、3D寶軟桌面等均使用愛加密的加密服務,經開發者驗證愛加密的加密服務確實在防止Android應用APK篡改、APK反編譯、APK動態破解等成效顯著。
4
如何幫助更多開發者防止Android APK篡改,這需要一個長期的過程,首先需要開發者增加對Android應用篡改、APK反編譯、盜版APP的重視,其次需要開發者從技術手段上加強對自有APK安全的保護,如通過第三方服務平台愛加密進行加密保護。同時,也需要政府加大對盜版篡改的監測和打擊,建立一個良好的產業環境。

Ⅹ 嵌入式linux和嵌入式android系統有什麼區別和聯系

嵌入式android源碼架構:uboot+linux kernel+android(包含文件系統,虛擬機,UI)
嵌入式linux:這是大部分人認識的linux uboot+linux kernel+文件系統+QT(UI),
當然兩者的linux 內核因為上層UI的不同會稍有差別,不過還是非常接近的,做過linux的人可以無縫切換到android底層開發,所以大家說的學習android系統,其實最重要的就是學習linux驅動,再加一下android下的專門的HAL,JNI,java等等,不過大公司android相關部分也是專門的人做的了。

甚至連QT都不用了,因為linux很多設備都是沒有UI的,所以要來幹啥?直接無界面,照樣是嵌入式linux。

現在大家說的什麼嵌入式debian,ubuntu,其實也是站在linux巨人的肩膀上,其實都不算是linux的分支,只算是linux的延伸,小變化而已。看到這里大家知道嵌入式linux的強大了吧,反正是比wince 強大N倍啊。

O(∩_∩)O~,所以啊,學習嵌入式android,其實底下就是學習uboot,linux內核啊,不會搞這些就像搞應用一樣,所以大家以為android就是java,是非常片面的。

以前老的,說了一下區別,可以參考一下
ARCH -- 這是Android修改了arch/arm下面的一些文件:
arch/arm:
Chg: arch/arm/kernel/entry-armv.S
Chg: arch/arm/kernel/mole.c
Chg: arch/arm/kernel/process.c
Chg: arch/arm/kernel/ptrace.c
Chg: arch/arm/kernel/setup.c
Chg: arch/arm/kernel/signal.c
Chg: arch/arm/kernel/traps.c
Chg: arch/arm/mm/cache-v6.S
Chg: arch/arm/vfp/entry.S
Chg: arch/arm/vfp/vfp.h
Chg: arch/arm/vfp/vfphw.S
Chg: arch/arm/vfp/vfpmole.c
Goldfish -- 這是Android為了模擬器所開發的一個虛擬硬體平台。Goldfish執行arm926T指令(在2.6.29中,goldfish也支持ATMv7指令),但是在實際的設備中,該虛擬平台的文件不會被編譯。
arch/arm/mach-goldfish:
New: arch/arm/mach-goldfish/audio.c
New: arch/arm/mach-goldfish/board-goldfish.c
New: arch/arm/mach-goldfish/pdev_bus.c
New: arch/arm/mach-goldfish/pm.c
New: arch/arm/mach-goldfish/switch.c
New: arch/arm/mach-goldfish/timer.c
YAFFS2 -- 和PC把文件存儲在硬碟上不一樣, 移動設備一般把Flash作為存儲設備。尤其是NAND flash應用非常廣泛(絕大多數手機用的都是NAND flash,三星的一些手機使用的是OneNAND)。NAND flash具有低成本和高密度的優點。
YAFFS2 是「Yet Another Flash File System, 2nd edition" 的簡稱。 它提供在Linux內核和NAND flash設備 之前高效率的介面。 YAFFS2並沒有包含在標準的Linux內核中, Google把它添加到了Android的kernel
fs/yaffs2:
New: fs/yaffs2/devextras.h
New: fs/yaffs2/Kconfig
New: fs/yaffs2/Makefile
New: fs/yaffs2/moleconfig.h
New: fs/yaffs2/yaffs_checkptrw.c
New: fs/yaffs2/yaffs_checkptrw.h
New: fs/yaffs2/yaffs_ecc.c
New: fs/yaffs2/yaffs_ecc.h
New: fs/yaffs2/yaffs_fs.c
New: fs/yaffs2/yaffs_getblockinfo.h
New: fs/yaffs2/yaffs_guts.c
New: fs/yaffs2/yaffs_guts.h
New: fs/yaffs2/yaffsinterface.h
New: fs/yaffs2/yaffs_mtdif1.c
New: fs/yaffs2/yaffs_mtdif1.h
New: fs/yaffs2/yaffs_mtdif2.c
New: fs/yaffs2/yaffs_mtdif2.h
New: fs/yaffs2/yaffs_mtdif.c
New: fs/yaffs2/yaffs_mtdif.h
New: fs/yaffs2/yaffs_nand.c
New: fs/yaffs2/yaffs_nandemul2k.h
New: fs/yaffs2/yaffs_nand.h
New: fs/yaffs2/yaffs_packedtags1.c
New: fs/yaffs2/yaffs_packedtags1.h
New: fs/yaffs2/yaffs_packedtags2.c
New: fs/yaffs2/yaffs_packedtags2.h
New: fs/yaffs2/yaffs_qsort.c
New: fs/yaffs2/yaffs_qsort.h
New: fs/yaffs2/yaffs_tagscompat.c
New: fs/yaffs2/yaffs_tagscompat.h
New: fs/yaffs2/yaffs_tagsvalidity.c
New: fs/yaffs2/yaffs_tagsvalidity.h
New: fs/yaffs2/yportenv.h
Bluetooth -- Google為Bluetooth打上了patch,fix了一些Bluetooth的bug
drivers/bluetooth:
Chg: drivers/bluetooth/bfusb.c
Chg: drivers/bluetooth/bt3c_cs.c
Chg: drivers/bluetooth/btusb.c
Chg: drivers/bluetooth/hci_h4.c
Chg: drivers/bluetooth/hci_ll.c
Scheler -- 對於Scheler的改變非常小,我對它並沒有去研究。
Chg: kernel/sched.c
New Android Functionality -- 除了fix一些bug以及其他一些小的更改,Android增加了一些新的功能,介紹如下:
IPC Binder -- The IPC Binder is an Inter-Process Communication (IPC) mechanism. It allows processes to provide services to other processes via a set of higher-level APIs than are available in standard Linux. An Internet search indicated that the Binder concept originated at Be, Inc., and then made its way into Palm's software, before Google wrote a new Binder for Android.
New: drivers/staging/android/binder.c
Low Memory Killer -- Android adds a low-memory killer that, each time it's called, scans the list of running Linux processes, and kills one. It was not clear in our cursory examination why Android adds a low-memory killer on top of the already existing one in the standard Linux kernel.
New: drivers/staging/android/lowmemorykiller.c
Ashmem -- Ashmem is an Anonymous SHared MEMory system that adds interfaces so processes can share named blocks of memory. As an example, the system could use Ashmem to store icons, which multiple processes could then access when drawing their UI. The advantage of Ashmem over traditional Linux shared memory is that it provides a means for the kernel to reclaim these shared memory blocks if they are not currently in use. If a process then tries to access a shared memory block the kernel has freed, it will receive an error, and will then need to reallocate the block and reload the data.
New: mm/ashmem.c
RAM Console and Log Device -- To aid in debugging, Android adds the ability to store kernel log messages to a RAM buffer. Additionally, Android adds a separate logging mole so that user processes can read and write user log messages.
New: drivers/staging/android/ram_console.c
Android Debug Bridge -- Debugging embedded devices can best be described as challenging. To make debugging easier, Google created the Android Debug Bridge (ADB), which is a protocol that runs over a USB link between a hardware device running Android and a developer writing applications on a desktop PC.
drivers/usb/gadget:
New: drivers/usb/gadget/android.c
Chg: drivers/usb/gadget/composite.c
Chg: drivers/usb/gadget/f_acm.c
New: drivers/usb/gadget/f_acm.h
New: drivers/usb/gadget/f_adb.c
New: drivers/usb/gadget/f_adb.h
New: drivers/usb/gadget/f_mass_storage.c
New: drivers/usb/gadget/f_mass_storage.h

Android also adds a new real-time clock, switch support, and timed GPIO support. We list the impacted files for these new moles at the end of this document.

Power Management -- Power management is one of the most difficult pieces to get right in mobile devices, so we split it out into a group separate from the other pieces. It's interesting to note that Google added a new power management system to Linux, rather than reuse what already existed. We list the impacted files at the end of this document.
kernel/power:
New: kernel/power/consoleearlysuspend.c
New: kernel/power/earlysuspend.c
New: kernel/power/fbearlysuspend.c
Chg: kernel/power/main.c
Chg: kernel/power/power.h
Chg: kernel/power/process.c
New: kernel/power/userwakelock.c
New: kernel/power/wakelock.c
Miscellaneous Changes -- In addition to the above, we found a number of changes that could best be described as, 'Miscellaneous.' Among other things, these changes include additional debugging support, keypad light controls, and management of TCP networking
http://www.linuxfordevices.com/c ... id-to-a-new-device/
http://hi..com/smallbigwang/item/95c99ebcb0e9544cba0e1281

熱點內容
落葉片拍攝腳本 發布:2025-05-14 20:40:49 瀏覽:797
安卓為什麼不能用cmwap 發布:2025-05-14 20:40:43 瀏覽:656
jquery獲取上傳文件 發布:2025-05-14 20:27:57 瀏覽:43
雲web伺服器搭建 發布:2025-05-14 20:25:36 瀏覽:525
汽修汽配源碼 發布:2025-05-14 20:08:53 瀏覽:742
蜜蜂編程官網 發布:2025-05-14 19:59:28 瀏覽:57
優酷怎麼給視頻加密 發布:2025-05-14 19:31:34 瀏覽:635
夢三國2副本腳本 發布:2025-05-14 19:29:58 瀏覽:860
phpxmlhttp 發布:2025-05-14 19:29:58 瀏覽:434
Pua腳本 發布:2025-05-14 19:24:56 瀏覽:449