通过逆向学习软件设计(2)
好久没有更新这个系列了(这个系列计划是完成大约3-4篇短文),换了新工作,开始做手机网游相关的东西,服务器、客户端都弄,加班也比较多,因此这个逆向学习软件设计的小系列就没有来的及更新。这次补上,另外完成这个系列后,我将会写一些关于手机网游开发的相关心得体会或者经验教训,在客户端上面:主要围绕Cocos2d-x游戏引擎的理解、使用、扩展;在服务器端上:主要围绕Linux64位服务器端的开发过程中的问题与解决方法,记录一下工作过程中的点滴。言归正传,接着分析这块不错的网络收音机软件。
本篇的目的有两个:第一、去除分析过程中软件自带的广告部分,记录相应的思路及实现方法;第二、定位最为关键的dat数据文件解码读取函数及其过程,为接下来的一到两篇最为核心的解码算法做铺垫。
由于在分析的过程中,发现软件会从网络上面获取相应的广告信息,当然这个对于免费软件来说无可厚非,但是对于用户来说还是不甚喜欢,毕竟好好的一款软件,打些算命之类的广告总觉得别扭。也影响分析的心情,因此首先把这个广告部分去掉再说。(如图1)
(图1、显示广告的区域)
首先,打开APIMonitor这个软件,在使用启动监视的功能,勾选相应的API类型(如图2)
(图2、API 过滤中选取相关的API类型进行过滤)
然后可以开启软件监控了,直到出现广告后即可停止监控,然后观察监控结果(如图3)。
(图3、通过APIMonitor获取的疑似广告页面URL)
通过将这个广告页面URL输入到浏览器中Check的结果,恰好满足刚才的猜想,现在疑似的问题就做实了,的确就是广告页面的URL。接下来用OD打开该软件进行动态分析,这个时候使用API断点就可以了,至于该断哪个API,这里需要说明一下,当然是WS2_32.send与WS2_32.recv了,注意一定是WS2_32下的哦,注意截取HTTP请求的内容及获取的内容,根据内容再来做进一步的分析即可(如图4)
(图4、send\recv获取的数据)
通过对send\recv获取去的数据进行分析,发现其关键的广告部分URL正是通过HTTP请求获取的,同样获取到得还有关键的版本升级信息,看到这里就不能通过屏蔽HTTP请求来达到屏蔽广告的目的了,除非你不想升级了。因此需要选择更加合理的方式来处理。这里观察一下获取数据的格式,针对这个格式,程序必定需要进行解析处理,做逆向的同时一定要有正向的思路作为辅助,如果你来解析这个地方如何办,针对特定字段,必然都有关键字的匹配判断过程,相应会出现类似if\switch..case的语句,那么接下来找到相关广告部分的解析处理函数就是去除广告的重点所在了。针对这类数据解析的要点,找关键字就是一个捷径,针对当前获取的数据我们不难发现其关键字有:ad、count、http等。这个时候,使用OD的字符串搜索功能即可,很快就找到了疑似函数体了,如图5:
(图5,疑似解析处理广告部分数据的函数体)
找到函数头,下断点,跑一下就可以知道是否就是了,通过实际运行发现这个函数就是一个处理广告数据的函数体,回溯到源头,发现其正是一个switch...case的处理,针对不同的关键字分类处理,用IDA找到该函数如下图6
(图6,处理recv到的数据的函数体)
接下来,将有关广告数据处理的函数调用nop掉,就可以完成去除广告了,这里稍微注意一下是否需要做堆栈平衡,运气不错,这里不需要:D,函数自平衡的。nop掉两个有关广告函数处理就完成了去除广告的效果了(图7)。
(图7,最终去除广告的效果,清爽多了)
接下来准备定位解密函数,由于整个电台自有数据的读取过程必然伴随相应的文件操作API的调用,因此,继续使用APIMonitor获取分析的宏观蓝图(图8)
(图8、关于电台数据文件使用的过程)
针对这个调用过程,很容易想到利用OD,使用API断点,采用栈回溯的方法定位相关的函数,从而找到最为关键的函数,分析出相应的解密算法。
文章的目的是学习如何做软件设计,如何实现,这里针对这些内容做一个简短的说明,回到这个学习软件设计上来。首先,这个网络收音机软件的数据组织形式是可以学习的,针对这类数据是如何组织分文件的方法等,都是可以学习,该具体采用定位索引文件+数据文件的方式,其中还有一些二分法的定位方式这些都是比较好的方法。另外,针对网络程序需要更新需要升级的特点如何来做到监控升级等,利用HTTP协议,及关键字格式的分析,这个也是可以学习的,获取的升级、广告、等相关的数据,首先是如何组织的,如果作为一个这方面的新手来说,可以参考该软件的实现方式来组织自己的网络应用程序升级更新的方式。(To be continued......)
通过逆向学习软件设计(2)相关推荐
- 基于android系统的单词学习软件设计与开发【附项目源码+论文说明】分享
基于android系统的单词学习软件设计与开发演示 摘要 随着手机使用的普及,人们获取与保存信息的方式已经发生了激动人心的转变.智能手机正在逐步融入我们的生活,并影响和改变着我们的生活.由于现在各种智 ...
- 学习软件设计的非功能性需求
非功能需求是产品必须具备的品质或者它将事情做到了多好,它们可以让产品有吸引力.易于使用.快速.可靠或者安全.通常并不改变产品的功能,功能性需求是让产品工作的需求,非功能需求是为工作赋予特征的需求.所以 ...
- 【软件设计】软件设计到底是什么?
软件设计的目的? Design is there to enable you to keep changing the software easily in the long term. 设计是为了让 ...
- 关于学习软件逆向分析意义的阐述
1对本课程教学地位的理解和想法(学习软件逆向分析的意义) 1.1逆向工程的起源 世界上最早的逆向工程其实来源于战争时期.在军事战争时期,各国之间常常存在水上作战,而船舶就成了运输和作战的重要工具.如下 ...
- 由学习《软件设计重构》所想到的代码review(二)
前言 对于一个程序员来讲如何来最直接的来衡量他的技术能力和产出呢?我想最直观的作法是看他的代码编写能力,就拿我经常接触的一些程序员来看,他们买了很多技术重构类书籍,但是看完后代码编写能力并没有显著提高 ...
- 面向对象软件设计——设计模式学习
工作也从开始C语言,转向现在的C++,表面上看得出,但实际中却没有把这种转变深入到思想中,究其原因还是对面向对象的软件设计不了解,有必要好好学习一下设计模式这个东东.本文就是设计模式学习第一篇-- 1 ...
- 【学习笔记】慕课网—Java设计模式精讲 第3章 软件设计七大原则-3-6 迪米特原则(最少知道原则)...
/** * 软件设计七大原则-迪米特原则 学习笔记 * @author cnRicky * @date 2018.11.10 */ 迪米特原则(最少知道原则) 一个对象应该对其他对象保持最少的了解.又 ...
- 初学者学习网页设计用什么软件最好?
初学者学习网页设计用什么软件最好?想学网页设计,什么软件适合初学者,功能又挺全的.功能很全很重要的. 最基本的是Dreamweaver,fireworks,flash简称网页三剑客,还有图片处理大师P ...
- 学习UI设计需要学习哪些软件?
学习UI设计到底需要掌握哪些软件呢?掌握设计软件是每一位想要从事设计朋友的第一件大事!因为熟练使用软件属于一门硬技能,设计师的想法通常都是通过设计软件,才能得以实现.不管我们有多么好的想法,都需要适合 ...
最新文章
- 资源 | 5月Python好文TOP 10新鲜出炉,你都看了吗?
- gitlab合并分支_GitLab-参考问题
- 前端学习(1977)vue之电商管理系统电商系统之按钮与文本框的切换
- 让你的silverlight更炫(一):从自定义控件说起
- Session共享的四种方法
- 彻底理解AMD和CMD
- centos6.5 安装svn可视化管理工具 if.svnadmin
- [bzoj] 2694 Lcm || 莫比乌斯反演
- 软考:数据库系统工程师
- C语言中的运算符大全(内附优先级表)
- 算法题目打卡:Ques20201012
- protocol buffer 使用
- 构建自己的GAFATA
- py6_Python 内置函数/普通自定义函数 及参数和返回值
- 电脑win10系统如何开定位服务器,Win10系统定位功能如何打开 Win10系统定位打开方法...
- 2022-2028年全球与中国SCADA石油和天然气行业发展趋势及投资战略分析
- 2022年6月大学英语六级翻译
- u大侠pe系统桌面计算机,如何使用U大侠PE系统修复引导文件
- 关于Paxos的历史
- 考研复试怎么穿搭?看这一篇就够了!