首页
社区
课程
招聘
[原创]微信(IOS4.5版本)摇色子作弊方法
2013-2-11 18:43 88188

[原创]微信(IOS4.5版本)摇色子作弊方法

2013-2-11 18:43
88188
亲们新年快乐~

这几天和朋友用微信的摇色子功能玩真心话大冒险,输惨了,于是有了下文,分析了筛子点数产生的过程,和如何控制筛子点数.

环境:
越狱的IOS5.01,
微信4.5
一个无线路由连接电脑和手机设备
工具:
IDA(静态分析用),
GDB(调试和修改数据用),
SSH Secure Shell Client(连接手机使用),
SSH Secure File Transfer Client(在手机上获取Bin文件使用)

下面进入正题:

获取微信的可执行文件:
首先在手机上打开微信
然后用SSH Secure Shell Client 连接手机
然后用ps aux | grep App 命令查看当前进程,如下图所示,第一行就是了应用BIN文件存放的路径为
/var/mobile/Applications/3DF52C73-138B-42FC-9DC9-D3E1020AD6D0/MicroMessenger.app/MicroMessenger

图-1

然后打开SSH Secure File Transfer Client 在上述路径中获取微信的BIN文件MicroMessenger
然后第一步就完事了….

静态简单分析MicroMessenger:
首先将MicroMessenger拖进神器IDA ,等5分钟左右IDA分析出了6000+函数心中一阵窃喜,微信没加壳.
然后以看到色子就想到了随机数发生器,所以在IDA中查找发现了4处可疑的函数
_rand,_random,_srand,_srandom
然后静态分析告一段落

动态调试 MicroMessenger
首先电脑通过SSH Secure Shell Client 连接手机
然后根据图-1所示的进程ID:3035 附加进程 命令为 gdb –pid 3035
下断刚才发现的敏感函数
b *0x00A1EDE4 (_random)
b *0x00A1EDD4 (_rand)
b *0x00A1EFE4 (_srand)
b *0x00A1EFE4 (_srandom)
处理完成后断点信息如图-2所示:

图-2

然后找个好基友摇一下筛子~

然后发现应用被中断于断点
Breakpoint 2, 0x00a1ede4 in dyld_stub_random () 处,调用栈信息如下:

图-3
在图-3中发现有23层调用,由于对ios开发没有接触过也不清楚哪里是重点,这里换一种方法来定位关键函数:
在_random附近几层的调用下断点
b *0x00178f40
b *0x000762ce
完成断点操作后随意再发个系统表情
微信再次中断位置为:
Breakpoint 7, 0x000762ce in std::vector<unsigned long, std::allocator<unsigned long> >::_M_insert_aux ()
调用栈如图-4所示

图-4

对比两次调用栈发现发色子的调用栈#2层以后和发普通表情的调用情况一样
现在可以猜测下图-3中的第一层
#1  0x00178f40 in std::vector<zxing::qrcode::ECB*, std::allocator<zxing::qrcode::ECB*> >::_M_insert_aux ()
就是决定色子点数的关键函数:

关键函数动态调试:
在gdb中单步跟一下发现果然找对了注释信息已经添加如下
blx     0xa1ede4 <dyld_stub_random>	[COLOR="Red"];调用随机数发生器[/COLOR]
cmp     r4, #1	[COLOR="red"];摇色子的情况每次r4都是2也就是下面的跳转回实现[/COLOR]
bne.n   0x178f5e 	[COLOR="red"];这里跳转总是实现[/COLOR]
movw    r1, #21846      ; 0x5556
movt    r1, #21845      ; 0x5555
smmul   r1, r0, r1
add.w   r1, r1, r1, lsr #31
add.w   r1, r1, r1, lsl #1
subs    r0, r0, r1
adds    r4, r0, #1
b.n     0x178f78 
[COLOR="red"]0x178f5e:[/COLOR]
movw    r4, #43691      ; 0xaaab
movt    r4, #10922      ; 0x2aaa		[COLOR="red"];这里是一个固定值[/COLOR]0x2AAAAAAB
smmul   r4, r0, r4  [COLOR="red"];r4=r0*r4,R0是随意发生器产生的值[/COLOR]
add.w   r4, r4, r4, lsr #31
add.w   r4, r4, r4, lsl #1	[COLOR="red"];r4 = r4*3[/COLOR]
sub.w   r4, r0, r4, lsl #1	[COLOR="red"];r4 = r0-r4左移一位[/COLOR]
adds    r4, #4	;r4=r4+4
blx     0xa1ede4 <dyld_stub_random>
movw    r0, #62204      ; 0xf2fc
movt    r0, #179        ; 0xb3
movw    r2, #55878      ; 0xda46
movt    r2, #180        ; 0xb4
add     r0, pc
add     r2, pc
ldr     r1, [r0, #0]
ldr     r0, [r2, #0]
[COLOR="red"]0x00178f94:[/COLOR]
mov     r2, r4	[COLOR="red"];到这里发现r4的值=筛子点数+3此处r4的值决定色子的最终点数[/COLOR]
blx     0xa1f384 <dyld_stub_objc_msgSend>


色子随机算法分析:
通过上面的gdb调试分析发现了摇色子的实现算法如下:
_random产生随机数 记rnum
rnum和常数0x2AAAAAAB做乘法取高32位记h32
h32*3左移一位记lh32
rnum-lh32 = 色子点数+3

色子作弊方法:
要是想修改色子点数直接下断点
b *0x00178f94

修改r4寄存器的值就可以了,比如想摇出6点如图-5 图-6所示r4=6如果不改投掷出色子的点数应该是3通过set $r4=9 命令修改寄存器的值以后色子的点数为6

图-5

图-6
至此色子作弊的过程就介绍完了~再次祝福亲们新年快乐~~~~

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞3
打赏
分享
最新回复 (49)
雪    币: 276
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
邓韬 9 2013-2-11 18:50
2
0
占个沙发,过来学习,新年快乐。
雪    币: 79
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
wParma 1 2013-2-11 18:53
3
0
涛哥顶贴辛苦~我吃饭去了饿~涛哥新年快乐~
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
Mx¢Xgt 7 2013-2-11 18:55
4
0
厉害啊,看不懂!
雪    币: 3758
活跃值: (3212)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
曾半仙 12 2013-2-11 20:46
5
0
你这个ipa应该不是在商店下的, 所以DRM被去掉了.
雪    币: 415
活跃值: (71)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
冰川 1 2013-2-11 20:57
6
0
b *0x00A1EDE4 (_random)
b *0x00A1EDD4 (_rand)
b *0x00A1EFE4 (_srand)
b *0x00A1EFE4 (_srandom)
高手 :如何在GDB得到以上地址的?
雪    币: 29
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
糊涂蛋 2013-2-11 21:38
7
0
ios 完全看不懂,学习了。
雪    币: 79
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
wParma 1 2013-2-11 21:54
8
0
大仙说的对~ 貌似是用91助手升级的4.5最新版~
雪    币: 79
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
wParma 1 2013-2-11 21:55
9
0
to 冰川~
这个是在IDA中定位的~
functions window 里面就有~
雪    币: 79
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
wParma 1 2013-2-11 21:59
10
0
to Mx¢Xgt
我也是刚刚学习很多东西搞不明白~
不过貌似思路和windows的逆向没啥区别~
雪    币: 79
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
wParma 1 2013-2-11 22:03
11
0
to 糊涂蛋
不难亲~加油哦
雪    币: 147
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
迷茫之中 2013-2-11 22:15
12
0
好NB 。 好基友。 帮顶。 嘎嘎!吃自助归来。!!!
雪    币: 1756
活跃值: (741)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
yijun8354 12 2013-2-11 23:00
13
0
呵呵,居然和它较上劲了!
雪    币: 2321
活跃值: (4028)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
熊猫正正 9 2013-2-12 09:37
14
0
学习,观模~~
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
uwmnth 2013-2-12 10:05
15
0
安卓上有好的这种调试神器吗?
雪    币: 415
活跃值: (71)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
冰川 1 2013-2-12 10:29
16
0
谢谢,摸索中。
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
柒月y 2013-2-12 10:46
17
0
这个必须学习
雪    币: 429
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
riusksk 41 2013-2-12 20:00
18
0
有点意思,呵呵……
雪    币: 62
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
凭凡 2013-2-13 01:22
19
0
呵呵,换个平台玩的感觉貌似挺爽的嘛
雪    币: 79
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
wParma 1 2013-2-13 15:00
20
0
呸 赶紧 lol去~
雪    币: 79
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
wParma 1 2013-2-13 15:01
21
0
to riusksk
泉哥不要举报我~
雪    币: 79
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
wParma 1 2013-2-13 15:02
22
0
to yijun8354
我还发现r4=1,2,3的时候,色子动画完了出剪刀石头布~
雪    币: 1756
活跃值: (741)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
yijun8354 12 2013-2-13 15:23
23
0
有点意思,空了我也玩玩也
雪    币: 130
活跃值: (61)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ouyangtian 2013-2-13 15:57
24
0
从itunes下的完全看不到代码,都被加密的
雪    币: 79
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
wParma 1 2013-2-13 16:15
25
0
to ouyangtian
dump 内存镜像就行吧~ 然后再上IDA
游客
登录 | 注册 方可回帖
返回