首页
社区
课程
招聘
[原创]IPhone 平台下破解:Crack Firewall ip
2010-3-30 11:41 9051

[原创]IPhone 平台下破解:Crack Firewall ip

2010-3-30 11:41
9051
PS:仙果代朋友而发
目录:
0x1.题记
0x2.调试环境及工具
0x3.破解过程
0x4.结语

0x1.题记
手上拿到一台港台行货的IPhone,随即开始摆弄,进过一系列的越狱等工作,终于可以把玩。
由于大意电话没有通过wifi上网而是通过GPRS,又没有GPRS流量,所以
白白浪费了一些话费.于是萌生了安装防火墙的念头.
来到Rock App的主页,很快就发现了Firewall ip这款软件,评价还不错,
于是就装到了电话上.迅速浏览下程序的设置页面,发现”block if not on
wifi”这项功能正是我需要的,呵呵.
由于这是Rock App上面的一个付费软件,只能试用10天,程序启动时也会显示
“Trial expires x day”. 恩,这个嘛.........抄家伙:

0x2.调试环境及工具
1.Firewall ip 1.3.9
2.IDA pro 5.5
3.010 Editor
4.vc 2008
5.windows 7_En

0x3.破解过程
一.推测验证:程序如何计算试用期剩于天数?
当然,我们的电话还没有先进到自己去测某个分子的原子周期来计算距离
1900年已经过去多久,那么一般办法有两种:通过网络到指定服务器或是本地取
得当前日期,取得日期后与保存在“某个地方”的安装日期做比较。验证一下,
在“设置->通用->日期”与时间菜单里,将日期调后一天,重新运行软件,发
现原来显示还有10天试用期,现在已经变成了还有11天。那么证明程序是通
过本地来取得日期的。那么这样就可以简单达到延长试用期的目的了,如果我
告诉你文章这里就结束了,你会鄙视我的,呵呵,继续。

二. 程序通过调用什么函数取得当前日期?
对iphone SDK 我的前置知识为零,我更不清楚系统层级别的一些函数。那么又只
有猜测了,通过iphone SDK某个函数取得当前日期,那么函数名字里面得有个关键
字“date”吧,(啥,这也猜不到,-_-#),用ida 将主程序FirewallGUI载入(此处
省去将程序拷到windows主机N个步骤),在 ida 导入函数表里面找到了这个函数,
如图:


然后查看了下这个函数的引用情况,如图:


还好调用的情况不是很复杂,查看下反汇编代码:如图:


黄色高亮的那一行就是引用NSDate的地方,继续往下看,看到什么问题没有?
86400.0这个数字比较可疑,这是一个程序中使用的常量,什么常量呢?(作者身高
的浮点数,薪水......), 3600 X 24 = 86400,就是一天有24个小时有86400秒钟。
FLDD D7,=86400.0
FDIVD D6,D5,D7

结合这两条指令来看,第一条指令是将86400.0赋给D7,下一条指令是用D5的值除
以D7然后将结果保存到D6中,小学生现在都清楚了,它是在计算有多少天。那么修
改这里就可以达到我们的目的了,我们虽然尚不清楚被除数D5怎么得来的,但是我
可以修改86400这个常量,如果我把86400修改为 86400 X 2 = 172800 的话,那
么在程序看来,要过172800秒才算是过一天,86400 X 365,86400 X 365 X 20(二十
年又是一好汉),86400 X 2012 (-_-#)....

三.修改测试。
  86400.0 因该是浮点数,结合指令来看好像是双精度浮点数,ida 里面搜索到
86400.0是这样保存的
          
00 00 00 00 00 18 F5 40

  我想把它修改为 86400 X 2 = 172800 ,但是怎么修改呢?不知道怎么转换的。
只有用vc 2008来转换了,用到了下面的几行代码

#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
double i= 172800; //将172800赋给双精度变量i
_asm
{
 
lea eax,i //将变量i在内存中地址赋给eax
int 3 //中断断点,程序断下来后,在内存中查看浮点数保存形式
}
return 0;
}

如图


 蓝色部就是172800双精度浮点在内存中的“样子”了。然后用010 Editor
搜索00 00 00 00 00 18 F5 40 然后将其替换为00 00 00 00 00 18 05 41。
 
 修改完成后,将程序传回电话,然后运行程序,各位看官因该还记得开始的时候,
我将日期调后了一天,显示还有11天过期,运行程序后提示变回了还有10天过期,
再往后调一天,也就是总共把日期往后调整了两天,现在程序就显示还有11天过期
了,看来前面的推测是正确的了。现在就可以将这个数字改大一点然后一直试用了,
需要注意的是程序传回去的时候需要执行 chmod +x  命令。

0x4 结语
Question for U :)
a.程序将安装日期放在那里的?
b.如果将86400改为零的话....
本文没有技术含量权当抛砖引玉,高手一笑而过。
crack_firewall_ip.pdf

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞6
打赏
分享
最新回复 (12)
雪    币: 56
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
myheartred 1 2010-3-30 11:44
2
0
图都挂了~~
雪    币: 1489
活跃值: (955)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
仙果 19 2010-3-30 11:46
3
0
你刷新下,我这里显示的是正常的
雪    币: 1489
活跃值: (955)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
仙果 19 2010-3-30 12:07
4
0
如果显示不了图片
大家登陆上论坛就可以看到了
雪    币: 431
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
riusksk 41 2010-3-30 13:03
5
0
我这边图片显示正常
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
foxabu 13 2010-3-30 13:19
6
0
objective-C....膜拜
雪    币: 339
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ghban 2010-5-26 21:54
7
0
精彩 呵呵 才看到:86400也能唤起LZ的灵感,还有用vc 2008看172800双精度浮点在内存中的“样子”。
  收获不小。
雪    币: 178
活跃值: (134)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
pmma 1 2010-5-27 20:55
8
0
学习楼主的iphone相关的crack,在做iphone的东西,却没去关注crack,呵呵
雪    币: 204
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whyIII 2010-5-27 23:34
9
0
羡慕楼主的iphone。呵呵
雪    币: 2166
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lofrank 2010-5-28 10:30
10
0
用VC去看浮点数在内存中的位置,好主意啊,学习了
雪    币: 421
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
大头和尚 2010-5-28 11:14
11
0
文章写的深入浅出。幽默风趣。大家风范。

86400修改为 86400 X 2 = 172800 的话,那
么在程序看来,要过172800秒才算是过一天,86400 X 365,86400 X 365 X 20(二十
年又是一好汉),86400 X 2012 (-_-#)....

看到这里狂笑数秒。
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hackbozy 2012-9-5 00:04
12
0
学习了,标记下
雪    币: 163
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sinmon 2012-9-5 09:35
13
0
不错,膜拜楼主
游客
登录 | 注册 方可回帖
返回