首页
社区
课程
招聘
1
[原创]新手逆向学习--Win7下64位扫雷逆向以及辅助制作
发表于: 2017-5-6 20:29 12568

[原创]新手逆向学习--Win7下64位扫雷逆向以及辅助制作

2017-5-6 20:29
12568

 之前逆过XP下的扫雷程序,感觉XP下的扫雷很简单,但是发现网上对于Win7下的扫雷逆向很少很少,于是就试着继续逆一下Win7下的扫雷。这一逆发现难度提升了不只一个等级啊,经过两天的努力,终于整个逆完了它的扫雷算法。

 首先在Win7下的扫雷不再是像XP一样在一开始就布置好雷区,这样我们就可以在一开始就读取雷区内存,比较坑的是win7下的扫雷是在你点击第一块儿方块时才开始布置雷区。这样我首先在rand函数下断点,发现有好多地方会调用rand函数,我把每个调用rand函数的地方下了断点,然后把一直在调用的rand函数的那几个函数断点给去掉,这样我们就找到了程序的突破口。

 不断退出当前调用,并在上层函数的call调用处下断点,直到找到了一个疑是算法入口的函数。

 跟进函数,又发现一个call,继续跟进

 我发现这个函数便是调用rand函数的地方,估计核心就在此了,开干

 我们要对每个call都倍加小心,需要都看一下,我们发现这里好像是一个申请数组空间并填充的操作

 经过多次循环后,发现数组填充完毕,之后观察一下申请的数组空间中存储的东西

 发现没有了00 01 09 0A四个值。因为我是点击的第一个方块,我们可以重新调试,点击其他方块试一下,发现这个数组会将点击方块周围的的9个值去掉(包括点击方块自己),这样我们就理解了,程序不会在第一次点击方块周围产生雷。

 这时候我们估计就对这个程序有了一点点理解了,在点击第一块儿方块的时候,程序开始申请内存。这里它会有一个结构体存储了随机雷数组已用大小和总空间,然后生成一个数组,并将各个雷进行编号存入数组中。之后rand函数产生的随机雷就在这些数组中产生。接下来验证我们的想法:

 跟进下一个call,发现这里申请数组空间,并存储随机出来的雷值


 继续单步,发现有个小循环比较有意思


[注意]看雪招聘,专注安全领域的专业人才平台!

上传的附件:
收藏
免费 1
支持
分享
赞赏记录
参与人
雪币
留言
时间
PLEBFE
为你点赞~
2022-7-27 02:24
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
收起 
赞赏  CCkicker   +1.00 2017/05/08
最新回复 (22)
雪    币: 12876
活跃值: (9332)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
我来装个比:
直接call这个↓
void  __thiscall  UserInterface::ProcessMouseDown(void  *this,  unsigned  int  keyDown,  DWORD  wParam)
2017-5-7 09:28
0
雪    币: 2575
活跃值: (502)
能力值: ( LV6,RANK:85 )
在线值:
发帖
回帖
粉丝
3
hzqst 我来装个比: 直接call这个↓ void __thiscall UserInterface::ProcessMouseDown(void *this, unsigned int keyDown, ...
这个厉害呀
2017-5-7 11:04
0
雪    币: 4576
活跃值: (2211)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
不错  做个标记
2017-5-7 11:50
0
雪    币: 2347
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
厉害了word哥
2017-5-7 16:24
0
雪    币: 1380
活跃值: (116)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
6
hzqst 我来装个比: 直接call这个↓ void __thiscall UserInterface::ProcessMouseDown(void *this, unsigned int keyDown, ...
可以,我试试
2017-5-7 18:01
0
雪    币: 1365
活跃值: (196)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
顶一下帖吧
2017-5-8 15:29
0
雪    币: 29
活跃值: (294)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
原来我也想过分析这个,结果因为对x64不熟悉,并且比较复杂最终放弃了
2017-5-8 23:56
0
雪    币: 3757
活跃值: (1757)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
9
不错,很多地方值得借鉴
2017-5-10 21:19
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
liming
2017-5-21 16:36
0
雪    币: 2
活跃值: (77)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
一个扫雷弄得我头好大...
2017-6-3 14:43
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
强大的楼主,能否告诉压缩包密码?
2017-6-4 13:58
0
雪    币: 1380
活跃值: (116)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
何必自苦 强大的楼主,能否告诉压缩包密码?[em_10]
没密码啊,我既然共享出来了还加什么密码啊
2017-6-6 21:08
0
雪    币: 1573
活跃值: (198)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
14
楼主,我也是在win7  64位下尝试win7的扫雷,用CE找雷数的基址,就是找不到,是win7扫雷  雷数没有基址,还是什么原因,楼主试过没,请赐教
2017-6-26 11:42
0
雪    币: 1573
活跃值: (198)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
15
楼主,在rand函数下断后,程序会进入死循环,只有一个地方在调用啊,其他地方在哪?
2017-6-30 14:34
0
雪    币: 1573
活跃值: (198)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
16
00000000FFA5B539  |  FF  15  21  68  FD  FF                |  call  qword  ptr  ds:[<&rand>]                          |
2017-6-30 14:35
0
雪    币: 197
活跃值: (1378)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
感谢分享
2018-1-30 09:45
0
雪    币: 22
活跃值: (139)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
感谢分享,学习了
2018-1-30 10:06
0
雪    币: 37
活跃值: (213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
F12没效是因为直接发鼠标消息无效。
2018-9-5 11:56
0
雪    币: 2854
活跃值: (2907)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
可以可以
2018-9-5 13:58
0
雪    币: 185
活跃值: (85)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
vsc
21
我直接NOP掉写雷数的代码就已经无敌了。不用注入也不用外挂。直接修改游戏本体就可以了
最后于 2018-10-21 19:43 被vsc编辑 ,原因:
上传的附件:
2018-10-21 19:41
0
雪    币: 239
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
Thvoifar 楼主,我也是在win7 64位下尝试win7的扫雷,用CE找雷数的基址,就是找不到,是win7扫雷 雷数没有基址,还是什么原因,楼主试过没,请赐教
我一样的环境,ce找基址,也是没找到,什么原因?你解决了吗?
2020-3-7 17:00
0
雪    币: 239
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
hzqst 我来装个比: 直接call这个↓ void __thiscall UserInterface::ProcessMouseDown(void *this, unsigned int keyDown, ...
在x64dbg中用 bp  ProcessMouseDown ,显示 无效地址:“ProcessMouseDown”,怎么回事?
2020-3-7 17:15
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册