工作之中一点点小小的总结,欢迎讨论、矫正以及继续补充
(一)关于网络抓包
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公布:https://bugs.eclipse.org/bugs/show_bug.cgi?id=279137
2、MIUI开发版系统,在安装一些风险性的APP的时候,会默认报INSTALL_FAILED_CONTAIN_VIRUS的错误,本来的处理的逻辑应该是:安全中心->病毒扫描->安装监控关掉即可。但是就目前最新的MIUI开发版4.8.8上述操作即便是重启后仍然无效,解决办法是使用钛备份先备份后再卸载掉"安全中心"。
(六)断点调试问题
1、编译的时候line number没有设置,导致断点无效,参考
http://stackoverflow.com/questions/957822/eclipse-unable-to-install-breakpoint-due-to-missing-line-number-attributes
2、Eclipse+apktool的方式调试的时候,再怎么调整断点都无法被触发的话,那么就重新换一个Eclipse的工作目录,这样ecliipse的配置都恢复为了默认,能解决因为配置文件变化引起的断点无效的现象。注意这种调试的方式,不要使用开发者选项里面的那个调试应用,那样的话断点同样断不下来。
(七)畅想
写一个Xposed插件,主要支持在开发者选项中,点击选择调试应用的时候,那些在配置文件中没有设置debugable为true的应用也可以显示在列表里面,这样的好处是调试的时候不用反编译了,直接在列表里面选择要调试的应用程序。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)