当前位置:首页 » 安卓系统 » 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

热点内容
饭团文件夹 发布:2024-05-20 10:56:18 浏览:574
win10系统重置密码是多少 发布:2024-05-20 10:47:51 浏览:992
java加包 发布:2024-05-20 10:39:12 浏览:713
网吧里的电影怎么传服务器 发布:2024-05-20 10:31:12 浏览:809
新年解压糖 发布:2024-05-20 09:50:55 浏览:55
以太坊价值在哪里存储 发布:2024-05-20 09:46:34 浏览:642
cgipython配置 发布:2024-05-20 09:29:06 浏览:865
在我的世界服务器中隐身 发布:2024-05-20 09:07:46 浏览:972
加西贝拉压缩机好吗 发布:2024-05-20 08:58:56 浏览:757
eve脚本航 发布:2024-05-20 08:56:59 浏览:591