今天上午在移动区丢了个小demo,好多抓包出来的是请求吾爱的网址,那这结果对不对呢,很明显,不可能这么简单
那为什么我希望大家不解包进行分析呢,因为软件没有做加密处理,只要一反编译,答案自然就出来了
正确答案,请求的是www.baidu.com
0x0 简介
那这种东西有什么用途呢,其实最简单的还是应用于软件安全,既然玩破解的人这么多,我们就要想着如何去对抗破解,抓包分析也是破解的很常见的一个手段
通过抓包,往往我们可以得到很多非常重要的数据,甚至有些开发者不对请求数据进行任何加密处理,抓包时直接可以抓到明文的帐号,密码或者其它参数。
0x1 实现
本案例没有任何什么高大上的加密手段,仅仅只是判断了几个条件而已
首先定义两个变量获得系统当前的端口号和代{过}{滤}理地址,此处图省事直接在oncreate方法中调用的,大家可以自定义一个服务或者广播在实现全程监听,正常情况下,系统默认返回的端口号是-1,代{过}{滤}理地址是null
那经常用fiddler抓包的就知道了,我们使用fiddler抓包得设置手机的wifi代{过}{滤}理
其次,不设置代{过}{滤}理的话我们可以使用模拟器进行抓包啊,为了软件的兼容性和多平台,很多开发者也并不限制软件在模拟器上运行,不过只要加了“爱加密”的壳子就无法在模拟器上运行了,那模拟器抓包不需要
设置任何东西,反正走的是电脑的网络,如今的模拟器越做越厉害,可以模拟手机号,imei,运营商,gps等等,那我们该怎么办呢
我这里使用了两个较为简单的判断,一是获取运营商,二是获取蓝牙地址,使用这两个方法得添加两条权限
[Java] 纯文本查看 复制代码 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
jd-gui的效果很糟糕,这逻辑都乱了,实现的过程是获取手机卡的运营商信息,并分别对国内三大运营商进行对比,如果符合任意一个,则返回真,否则返回假
其次是获取当前设备的蓝牙地址,在无蓝牙的设备上,返回的是空,模拟器当然不存在蓝牙这个玩意,毫无疑问,返回的肯定是假,当然高手说不定能模拟蓝牙地址
0x2 运行
我事先定义了真实的网址为
[Java] 纯文本查看 复制代码 private String url = "[url=https://www.baidu.com/";]https://www.baidu.com/";[/url]
然后在按钮按下之前进行了判断
[Java] 纯文本查看 复制代码 if ((App.port != -1) || (App.host != null) || (!getSim()) || (getBluetooth())) {
this.url = "[url=http://www.52pojie.cn/forum.php";]http://www.52pojie.cn/forum.php";[/url]
}
如果符合其中的任意一项条件,则将地址改为吾爱的地址,自然大家常用使用的抓包工具抓出来的都是错误的网址啦。
0x3 总结
那这种小demo破解的话非常简单,只需要将那些判断直接跳过即可,那在大工程中就没这么简单了,代码量及其庞大,也很难找到关键点,尤其是那种网址相似的,腾讯自家的应用实现的是如果抓包工具开启,
则软件会自动无法联网,这也是一种保护手段,那此demo何解?
tcpdump可破~
|