程序员的分析力
来源:互联网 发布:js为div添加点击事件 编辑:程序博客网 时间:2024/04/28 19:13
内容摘要: 讲述疑难问题分析的一般思路、方法以及常用工具,辅助提升程序员的开发效率。
很早就有打算写这样一篇文章的冲动,把自己工作近5年来,从最初的煎熬到后来的有力量制衡,期间过程中遇到一些疑难问题分析及解决思路整理提炼出来,供入行不久,行道尚浅的同学一些可能有益的参考。这个文章里,我们的讨论对象,主要是疑难棘手问题,就像医学上那种听起来骇人的疑难杂症。这个文章的目标,当然是帮助大家克服畏难,有所解脱。我会逐步从自身前提、关键思路及有效工具来展开,提供针对这类问题的通用性指导,最终帮助建立内含实力的信心,提高大家的分析力。
不得不先讲到前提,这是进入后面其它论述的基础要素,这里我总结的前提,包含有程序员精神和技术广度。程序员精神这个概念,最初是从现在用得已经很广泛的企业家精神吸取过来的,目前没有公认的定义,我一直认为是持久激情,追根究底,主动承担,兑现承诺与冒险的综合。特别强调一下持久激情,虽然这个文章的最终目的是降低大家面对疑难问题时的投入,但是千万不要以为就能以浮躁轻松的心态去处理以后的问题,只有具备持久耐力与激情的打算,才能集中精力静下心来全神贯注。技术广度是另一个基础,如果你提前了解涉猎诸多相关领域的知识,这样会使你更如鱼得水。反之,试想,如果在做协议分析,连http的请求响应格式都不清楚,又叫人情何以堪?
具备了以上前提条件,我们可以接下来进一步讲讲疑难问题分析的关键思路。一般来讲,有这样的步骤。
首先,大致理清熟悉现有业务流程,逆向思考,抓住准确的切入点。
其次,依靠有效工具去查找定位原因。
最后,根据定位到的原因,结合现状,确定形成解决方案。
以上文字写得有些抽象难懂,我们来看几个实际的疑难问题例子,借以直白化这三个步骤,加深大家的理解和真实体会,
实例1,puff代理,ie下载文件后,保存却不在既定选择的位置里
问题描述:使用puff v0.03翻墙,ie打开页面,并下载任意一个文件,选择保存到某一位置,如c:\tools\ADT-18.0.0.zip,下载完成后,却没有发现c:\tools\ADT-18.0.0.zip。
分析步骤:
首先,让我们大致理清一下这个问题的操作过程,比较简单,核心过程就是我们选定一个要下载的文件,并选择其在本地要存放到的目标位置,然后确定让ie开始负责下载。从下载进度条转动情况来看,下载过程应该已经正常完成。只不过可能在最后保存文件的时候,出现了问题。所以,我们现在初步抓住保存文件这个动作,作为切入点。
其次,确定将保存文件这个动作成为切入点后,脑中想到,保存文件,总是一定要读写磁盘,对吧?那么我们使用文件访问监视工具,ProcessMonitor,来监视下载过程中的磁盘文件访问情况,这样检查确认文件到底保存到什么地方去了,为什么不是我们选择的目标位置。
观察后发现,文件竟然莫名其妙地保存到了C:\Documents and Settings\zhang\Application Data\Thinstall\puff\%drive_C%\tools\ADT-18.0.0.zip。
最后,根据发现的原因,我们的解决方案,当然是直接到C:\Documents and Settings\zhang\Application Data\Thinstall\puff\%drive_C%\tools\ADT-18.0.0.zip去拿下载后的文件罗。
收工。
实例2,Android支付宝用户名密码存储逆向分析
问题描述及分析步骤,较长,要耐心阅读。请参见专门文档,\\mbj-builder01\2 新人培养\cases\Android支付宝用户名密码存储分析.docx。
最后,我把这些年来用起来感觉很有效的工具,贴出来供大家参考借鉴,“假舆马者,非利足也,而至千里;假舟楫者,非能水也,而绝江河。君子生非异也,善假于物也。”,共勉。
以下所有工具,共享放在\\mbj-builder01\3 tools目录,
搜索
技术搜索当然用Google,其它搜索引擎基本不能满意。
变换关键词,非常重要,一个关键词没有发现好的搜索结果,更换成另一个关键词,有时就会柳暗花明。记住,持久耐心与激情。
有时Google上不去,那就翻墙。
翻墙工具
puff011,折腾了很久,才找到的一个很方便工具,以前的puff003现在不能用了。这次找到了原始源,http://www.erights.net/,以后作者有更新,从这里直接下。
反编译
IDA,专业级反汇编工具,支持反编译多种处理器类型的二进制代码,如exe、dll、so等。
dex2jar,转换.dex成.jar。
DJ Java Decompiler/jd-gui,反编译.class到.java。
校验
Hash,文件md5摘要信息提取。
网络抓包
HTTP Analyzer,只能抓取HTTP协议数据包。
Wireshark,专业抓取各种协议数据包,很强大,手机和桌面都有支持。
文件系统访问监视,进程线程监视,注册表访问监视
这三个工具,以前分别由单独一个程序来提供,现在已经统一整合到ProcessMonitor。另外,微软提供的其它有用工具集合,参考这里,
http://technet.microsoft.com/zh-cn/sysinternals/bb842062
文件及目录比较工具
Araxis.Merge.Professional,很好用,支持过滤器去掉.svn比较。
文件解锁
Unlocker,文件被哪些进程占用?删除不了?用它全搞定。
虚拟机
VMware-workstation,经典的老牌虚拟机软件。
16进制工具
WinHex,16进制字节形式,查看文件原始字节内容。
网速限制工具
p2pover,有了它,pc上也可以模拟网络速度不好的情况。
TrafficShaperXpSetup,xp上很好用,win7上暂时未兼容。
远程调试工具
Windbg,动态远程调试其它进程。
DebugView,查看系统范围内的日志输出。
- 程序员的分析力
- 不做程序员的分析
- 【推荐】程序员发展前途分析及成为程序员的必备条件
- 如果上帝是程序员的C++分析
- 一个程序员面试题目的简单分析
- 一个程序员的SWOT分析V1.0
- 《黑马程序员》 继承的分析。。。第七天
- 黑马程序员_ 变量的内存分析
- 黑马程序员_ArrayList_HashSet及Hashcode的分析
- 面向.Net程序员的dump分析
- 面向.Net程序员的dump分析
- 黑马程序员--变量的内存分析
- 从程序员的角度分析微信小程序
- 从程序员的角度分析微信小程序
- 从程序员的角度分析微信小程序
- 需求分析不畅更多的是程序员的责任
- 黑马程序员---ArrayList和HashSet的比较、hashCode的分析
- 《程序员的度量,改善软件团队的分析学》读书笔记
- 用Js操作导出Excel
- VS 2010项目中添加lib库
- WINCE6.0+S3C2443下SD卡驱动
- PHP Cookie
- linux下删除乱码文件名的方法
- 程序员的分析力
- 快速读取大文本文件.richTextBox和StringBuilder用法
- ant学习笔记
- Android中读取短信信息
- Android如何进行数字签名与优化
- 何为“反向代理”
- eclipse行号显示
- 如何为 Windows Azure 托管服务配置自定义域名
- PHP Session