瞎折腾了一晚上,终于搞明白怎么在模拟器上直接运行修改后的apk文件了,在实体机上测试实在是忒麻烦鸟。 我们知道DDMS是动态调试android的利器,它提供了各种强大的功能,如查看运行的线程信息,文件浏览,Logcat等,对于我们搞逆向的来说,主要还是看它的log信息了,废话少说,来简单看下DDMS调试的原理吧。 1. 每一个Android应用都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是 一个独立的进程空间。虚拟机的线程机制,内存分配和管理,Mutex等等都是依赖 底层操作系统而实现的。所有的Android应用线程都对应一个Linux线程,虚拟机 因而可以更多的依赖操作系统的线程调度和管理机制。 2. DDMS在IDE与设备货模拟器之间起着中间人的角色 3. DDMS启动时会与ADB之间简历一个device monitoring service用于监控设备。当 设备断开或链接时,这个service就会通知DDMS 4. 当一个设备链接上时,DDMS和ADB之间又会建立VM monitoring service用于监 控设备上的虚拟机 5. 通过ADB Deamon与设备上的虚拟机的debugger建立链接,这样DDMS就开始与 虚拟机对话了。 详见:http://www.doc88.com/p-672405491094.html 也就是说,如果要使用DDMS调试,就必须启动adb调试。Adb是模拟器,那么怎么才能将修改后的apk文件放到模拟器里面呢?以前都是使用IDE直接调试,这可把我给难住了,首先还是看下adb的命令吧,可能会从里面得到些提示: adb install [-l] [-r] file_spec 这条命令用于安装或者重新安装一个Android应用程序。其中-l选项为防复制锁,它可 以禁止安装好的应用程序被复制到其他设备上使用。其中的-r选项用于重装应用程序时保留之前的数据。命令中的file_spec参数必须是一个合法的并经数字签名过的.apk文件。 adb uninstall [-k] package 这条命令用于从目标设备上卸载指定的应用程序。其中package参数必须是应用程序的全名。如果在卸载应用程序的时候希望保留应用程序的数据,则可以加上-k选项。 adb push local remote 这条命令用于将计算机上的某个文件复制到目标设备的指定目录下。 adb pull remote local 这个命令用于将目标设备上的一个文件复制到计算机上。 详见:http://blog.163.com/susu_sf/blog/static/1710602532010102244939506/ 看到这些命令,登时觉得有戏,先来试下 Adb install 命令: 擦,竟然出来个错误,应该是找不到文件,好吧,那么就找下目录,看下能不能直接把修改后的文件放到/data/local/tmp/目录下: 来到模拟器的目录下,好吧,我哭了,全是img文件,那么也就是说,如果我想把修改后的文件放进去,那么我就必须编辑解析img文件,感觉这个成本较高,再想想其他办法吧。。 来看另一个命令: adb push local remote 通过这条命令,我是可以先把文件传上去的,然后再进行安装,那岂不就ok,好吧,继续: 因为不知道模拟器上的路径,所以先随便试下root目录吧,如果我们能够正常得把apk文件传上去,并且在模拟器上找到,那么只要双击就可以正常安装了: 好吧,root目录是不可读的。 此时忽然想到之前的那个安装错误: 如果,我把文件传到这个目录,然后之间通过install命令安装不就完了?很happy,都成功了,那么最后一步,到模拟器上看下是否有我安装的apk文件: 安装成功,接下来就可以正常调试了,小伙伴们,加油!!!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课