首页
社区
课程
招聘
[原创]2016腾讯的游戏安全竞赛题PC第一题解答
发表于: 2016-3-13 12:42 13183

[原创]2016腾讯的游戏安全竞赛题PC第一题解答

2016-3-13 12:42
13183
收藏
免费 3
支持
分享
最新回复 (28)
雪    币: 163
活跃值: (103)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@%"最长的位置是0x3F,二进制最长6BIT,所以可以把4个字节压缩成3个字节,当时我在把3个字节还原成4个字节的时候,花了点时间。话说第一轮的结果出来没有?

上传的附件:
2016-3-13 12:53
0
雪    币: 68
活跃值: (104)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
是的 3个字节还原4个字节我也是花时间最多的哈,结果是14号公布吧 不过我看到题的时候是9号了,9号24:00提交 ,咱不是学生这能围观了
2016-3-13 12:59
0
雪    币: 193
活跃值: (1210)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
只能膜拜一下了
2016-3-13 13:16
0
雪    币: 144
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
围观一下,分享实录
2016-3-13 18:58
0
雪    币: 47147
活跃值: (20420)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
6
编辑了一下你的帖,把题目上传上来了。
2016-3-13 19:34
0
雪    币: 68
活跃值: (104)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
第一次传附件 弄的乱七八糟   谢谢坛主大大帮忙
2016-3-13 20:00
0
雪    币: 423
活跃值: (501)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
小弟刚刚初学逆向这些,根据大哥的提示也成功断到大哥那些地址,跟大哥上面一致,我想用直接爆破跳转去修改这个程序,联系下,但是出现了一点疑问..求指点下,
我直接跳转到 xor eax,eax  然后把直接强行把eax赋值1,改成 mov eax,1



然后往下面跟踪 也发现 eax的值修改为1



但是程序运行后,提示的确实乱码,我不太理解,求解答

2016-3-14 04:09
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
9
首先你破坏了汇编指令那就肯定错了。

------------------------------------------
在我选中的指令处下端点,然后寄存器窗口-ESP-右键“数据窗口跟随”-再看数据窗口:
你会发现账户名,然后继续单步下去的话会看见字符串注册失败成功 往下在拉一些就可以看见你输入的序列号。


在楼主说的xor,eax.eax处下个断点,F9-F8-寄存器窗口修改eax为1


往下走一步


结果:


再试试?
上传的附件:
2016-3-14 10:04
0
雪    币: 423
活跃值: (501)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
置1是可以的提示注册成功的 可是我就是想这种内存修改代码试试 楼主已经公布了算法的了 所以自己想试试内存改代码的
2016-3-14 11:44
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
11
那就JMP或CALL更改。
2016-3-14 12:02
0
雪    币: 68
活跃值: (104)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
003821E4      83C4 04       add esp,4
003821E7      33C0          xor eax,eax  这个汇编指令只占内存2个字节
003821E9      8B5484 7D     mov edx,dword ptr ss:[esp+eax*4+7D]
003821ED   .  8B4C24 54     mov ecx,dword ptr ss:[esp+54]

你修改成 mov eax,1 是占5个字节的
破坏了mov edx,dword ptr ss:[esp+eax*4+7D]这条指令 这是通过指针取失败成功的字符的 你破坏了 就造成  没有取堆栈的字符 直接压栈EDX 显示乱码了

你可以这样爆破,在判断用户名长度跳转这里直接JMP到  003821E4。
003821E4      83C4 04    add esp,4  这里是3个字节+上下面xor eax,eax  正好是5个字节
003821E7      33C0         xor eax,eax  这个汇编指令只占内存2个字节

00381F96     /0F87 4B020000 ja Tencent2.003821E7   ;  原来的
00381F9C   . |33C0          xor eax,eax

00381F93   .  83F8 0E       cmp eax,0E
00381F96    - E9 7962CBFF   jmp 00038214       修改后JMP无条件跳转,不管用户名长度如何都跳到成功

003821DF   .  E8 C30A0000   call Tencent2.00382CA7
003821E4      B8 01000000   mov eax,1   //修改后没有破坏下面要执行的指令
003821E9      8B5484 7D     mov edx,dword ptr ss:[esp+eax*4+7D]
003821ED   .  8B4C24 54     mov ecx,dword ptr ss:[esp+54]
003821F1   .  8D4424 74     lea eax,dword ptr ss:[esp+74]
2016-3-14 14:10
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
为什么我在
IsDebuggerPresent
下断点不走呢?
2016-3-14 14:27
0
雪    币: 443
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
楼主试试上面内联汇编部分换成下面这样能不能生成你要的,我只是个新手,如果说错了,不要骂我
a = *(int*)&strb[i] / 10;
2016-3-14 14:53
0
雪    币: 68
活跃值: (104)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
[QUOTE=gs笨笨;1419862]楼主试试上面内联汇编部分换成下面这样能不能生成你要的,我只是个新手,如果说错了,不要骂我
a = *(int*)&strb[i] / 10;[/QUOTE]

楼上正解 测试通过
2016-3-14 17:04
0
雪    币: 234
活跃值: (1659)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
16
分析的不错,支持一下
2016-3-14 19:03
0
雪    币: 423
活跃值: (501)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
[QUOTE=wliupengw;1419846]003821E4      83C4 04       add esp,4
003821E7      33C0          xor eax,eax  这个汇编指令只占内存2个字节
003821E9      8B5484 7D     mov edx,dword ptr ss:[esp...[/QUOTE]

明白了, 谢谢大哥~测试通过
2016-3-14 19:43
0
雪    币: 229
活跃值: (94)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
18
不对呀,楼主,我看你3个恢复四个时候,好像不是它那个加密算法的逆运算呀,                miadie[0]=neu_lastword21[i*3+0];
                miadie[1]=neu_lastword21[i*3+1];
                miadie[2]=neu_lastword21[i*3+2];
                password[2+i*4]=0x20;
                password[3+i*4]=miadie[2]-password[2+i*4]<<6;//((miadie[1]^((password[1+i*4]<<4)))&0xf)<<2;
                password[1+i*4]=(miadie[1]^((password[2+i*4]>>2)&0xf))>>4;
                password[0+i*4]=(miadie[0]-((password[1+i*4]>>4)&3))%4;
我这样算不知道为什么得不到正解呀
2016-3-16 20:15
0
雪    币: 229
活跃值: (94)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
19
楼主,我就是密码还原部分不懂,而且也没有看懂你的思路哦,好像你没有严格按照加密的逆运算来搞,而且好像很多你都是直接当0的,能讲解一下吗
2016-3-16 20:40
0
雪    币: 284
活跃值: (3579)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
20
你说有段汇编怎么用C++写,那个是指令里有个算数右移sar,牵扯的符号位的问题,那个变量a要定义为有符号数int
2016-3-18 02:08
0
雪    币: 68
活跃值: (104)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
21
嗯,搞明白了。 就是一个有符号除法 我没有转换有符号类型才出错
2016-3-19 19:40
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
我也是断在GetDlgItem这里,一直F8下去,堆栈都没有出现过注册成功或者失败的字样诶,是不是要跟进call里面的?
2016-3-19 22:22
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
不错不错
2016-3-21 01:01
0
雪    币: 229
活跃值: (94)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
24
是不是说要看出它的左移右移要看出是哪一种乘除运算,再做反向运算?不一定对照着汇编做反向运算????
2016-3-21 14:44
0
雪    币: 229
活跃值: (94)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
25
是不是说做算法反向的时候,需要看懂那些左移右移代表的乘除含义,再做运算级的反向?不要做汇编级的反向?
2016-3-21 14:46
0
游客
登录 | 注册 方可回帖
返回
//