工作之中一点点小小的总结,欢迎讨论、矫正以及继续补充
(一)关于网络抓包
Fiddler由于是设置的IE的LAN代理,所以不是在PC环境下全局有效,仅对IE核的浏览器有效,但是由于需要设备设置代理,所以AndroidFiddler由于是设置的IE的LAN代理,所以不是在PC环境下全局有效,仅对IE核的浏览器有效,但是由于需要设备设置代理,所以Android 2.0的设备无法通过系统设置来设置代理,而且如果app在逻辑中有设置了代理的时候,再设置Fiddler代理的话就会影响程序逻辑。
解决方法:
Http Analyzer是一个PC环境下全局的抓包工具,可以抓取运行在模拟器上的网络包。
TCPDUMP 这个工具配置正确,可以抓取一些Fiddler不能抓取的包
(二)关于网络发包
A、Android层的HTTP请求,这个没得多说,HttpClient和HttpConnection两种,方式分为POST和GET.
B、webView里运行js发包,这种方式一般出于web app开发周期快更新方便等优势,出现的频率很高,js一般要用网络加载不会放在本地,加载本地html的时候很容易篡改,网络引用的js文件webView一般会放在cache里面修改起来会麻烦一些。
C、android socket的发包。比如聊天程序会使用udp,这种包请使用wireshark和修改Fiddler的socket抓取项。
关于抓包工具(无图无真相说个蛋啊)具体操作比较多,多点点吧。
D、最近碰到一个使用webView发送协议,但是它跨域访问了,最终通过Invoke我们自定义的webView的setAllowUniversalAccessFromFileURLs来实现,不过是通过反射调用的.
(三)函数逻辑的定位:
jeb支持函数跳转,可以定位到函数调用的位置
jdb 支持批量断点,知道函数的命名空间后就可以下断点了,可以打印出函数对应的调用堆栈实现回溯功能。
apktool+eclipse的调试方法适合像OD一样需要查看寄存器(但是为什么看不见P系列的寄存器,除了this),还有一个要赞下的功能是支持步进和查看线程栈,调试很方便。
(四)取巧方法
目的:打开app的调试阀(LogCat语句)
一般大型的程序开发都会封装打印类,反编译后找到打印类,修改hide掉打印语句的标志位,然后签名打包安装,运行前使用Xposed框架上的"Disable signature check"工具patch掉系统的签名认证。
目的:设置app为调试模式方式打开
A、可以使用命令行am start -D -n com.test.hello/.helloActivity的方式
B、可以在重打包的时候在androidManifest.xml文件中的application节点上添加android:debugable="true".
C、可以在开发者选项中点击“选择调试应用”,勾选我们要调试的app,但是这个的前提需要android:debugable的值不能为false,不然在列表项里面也找不到我们的应用。
附加的时候可以使用DDMS或者PS | grep来查看PID号
(五)Bug
1、处于jdk1.6.0_16之前的版本环境中时,Eclipse的Debug模式下调试断点可能不会停下来。Eclipse 在调试的过程中,已经创建好的线程ID是不变的,断点根据ID绑定于某个线程,但是在jdk1.6.0_14 中,这个ID值会被不可预知的改变,从而导致断点失效。Eclipse官方bug公布:
49aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1N6h3N6K6i4K6u0W2k6h3y4D9K9i4m8K6k6g2)9J5k6h3!0J5k6#2)9J5c8X3u0#2k6%4y4Q4x3V1k6K6K9r3!0%4i4K6g2X3j5Y4g2Y4i4K6u0W2j5$3N6A6i4K6y4r3K9h3c8Q4x3@1b7J5y4K6V1I4x3K6M7`.
2、MIUI开发版系统,在安装一些风险性的APP的时候,会默认报INSTALL_FAILED_CONTAIN_VIRUS的错误,本来的处理的逻辑应该是:安全中心->病毒扫描->安装监控关掉即可。但是就目前最新的MIUI开发版4.8.8上述操作即便是重启后仍然无效,解决办法是使用钛备份先备份后再卸载掉"安全中心"。
(六)断点调试问题
1、编译的时候line number没有设置,导致断点无效,参考
964K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4@1j5h3y4C8L8%4k6W2M7X3k6D9L8%4N6Q4x3X3g2U0L8$3#2Q4x3V1k6I4N6h3g2K6N6r3W2G2L8Y4y4Q4x3V1j5&6y4e0M7^5x3U0u0Q4x3V1k6W2j5$3I4A6M7s2y4W2i4K6u0V1N6h3&6S2j5X3I4W2i4K6u0V1N6r3!0Q4x3X3c8A6L8Y4y4@1j5h3I4D9i4K6u0V1j5Y4u0W2j5h3E0H3L8$3W2F1N6q4)9J5k6r3c8#2k6g2)9J5k6s2c8G2i4K6u0V1L8h3W2K6M7$3W2F1k6#2)9J5k6r3I4A6L8X3g2Q4x3X3c8F1N6h3#2T1k6i4u0Q4x3X3c8S2N6s2c8J5K9h3u0#2N6r3g2K6
2、Eclipse+apktool的方式调试的时候,再怎么调整断点都无法被触发的话,那么就重新换一个Eclipse的工作目录,这样ecliipse的配置都恢复为了默认,能解决因为配置文件变化引起的断点无效的现象。注意这种调试的方式,不要使用开发者选项里面的那个调试应用,那样的话断点同样断不下来。
(七)畅想
写一个Xposed插件,主要支持在开发者选项中,点击选择调试应用的时候,那些在配置文件中没有设置debugable为true的应用也可以显示在列表里面,这样的好处是调试的时候不用反编译了,直接在列表里面选择要调试的应用程序。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课