2015_NJUPT_CTF_Reverse300

今天到学校的线下CTF玩了一下,奥满教室的汉子心好碎T T

逆向只有两道题,一个apk的我就没看了,整理一下Reverse300的思路。

附件:http://pan.baidu.com/s/1c0qeDdm   密码:2id4

1. 查看一下字符串,发现可疑字符串。

 

 

 

2.向上回溯,观察跳到这里的条件,经过图中两个断点处的跳转可以跳到可疑字符串,F9运行程序,断在第一个断点处,但跳转未实现,强制跳转一下。004016C9处也强制跳转一下。

 

 

 

 

 

 

 

 

 

3.程序来到了这里,这里是一个很关键的地方,我们记下这个地址00428c54,往下看就知道这里的关键了。

4.004018B8处强制跳转一下,004018DA处强制不跳转,00401930处的函数执行完后,00428c54处的内容变了,变成了一个32位字符串,小vi第一反应是个md5值。

5.接下来又来了一个新的字符串 "0kk`d1a`55k222k2a776jbfgd`06cjjb",并且在004019BB处解密,解密算法为取出该字符串的每个字符和"S"异或,将解密后的字符串放到0012F3F8处。

0040194E   .  BE 4C304200   mov esi,5631a3f0.0042304C                ;  ASCII "0kk`d1a`55k222k2a776jbfgd`06cjjb"
00401953   .  8DBD 14FDFFFF lea edi,dword ptr ss:[ebp-0x2EC]
00401959   .  F3:A5         rep movs dword ptr es:[edi],dword ptr ds>
0040195B   .  A4            movs byte ptr es:[edi],byte ptr ds:[esi]
0040195C   .  B9 37000000   mov ecx,0x37
00401961   .  33C0          xor eax,eax
00401963   .  8DBD 35FDFFFF lea edi,dword ptr ss:[ebp-0x2CB]
00401969   .  F3:AB         rep stos dword ptr es:[edi]
0040196B   .  66:AB         stos word ptr es:[edi]
0040196D   .  AA            stos byte ptr es:[edi]
0040196E   .  66:8B0D 48304>mov cx,word ptr ds:[0x423048]
00401975   .  66:898D 08FDF>mov word ptr ss:[ebp-0x2F8],cx
0040197C   .  8A15 4A304200 mov dl,byte ptr ds:[0x42304A]
00401982   .  8895 0AFDFFFF mov byte ptr ss:[ebp-0x2F6],dl
00401988   .  33C0          xor eax,eax
0040198A   .  8985 0BFDFFFF mov dword ptr ss:[ebp-0x2F5],eax
00401990   .  66:8985 0FFDF>mov word ptr ss:[ebp-0x2F1],ax
00401997   .  8885 11FDFFFF mov byte ptr ss:[ebp-0x2EF],al
0040199D   .  8D8D 14FDFFFF lea ecx,dword ptr ss:[ebp-0x2EC]
004019A3   .  51            push ecx
004019A4   .  E8 77080000   call 5631a3f0.00402220
004019A9   .  83C4 04       add esp,0x4
004019AC   .  50            push eax
004019AD   .  8D95 14FDFFFF lea edx,dword ptr ss:[ebp-0x2EC]
004019B3   .  52            push edx
004019B4   .  8D85 08FDFFFF lea eax,dword ptr ss:[ebp-0x2F8]
004019BA   .  50            push eax
004019BB   .  E8 45F6FFFF   call 5631a3f0.00401005             ;此处为解密函数

解密后的字符串:

6.接下来将上面得到两个字符串传到函数0040E570中,这个函数中分别对比两个字符串,相等验证通过。

;验证函数
0040E570  /$  55            push ebp
0040E571  |.  8BEC          mov ebp,esp
0040E573  |.  57            push edi
0040E574  |.  56            push esi
0040E575  |.  53            push ebx
0040E576  |.  8B75 0C       mov esi,[arg.2]
0040E579  |.  8B7D 08       mov edi,[arg.1]
0040E57C  |.  8D05 44904200 lea eax,dword ptr ds:[0x429044]
0040E582  |.  8378 08 00    cmp dword ptr ds:[eax+0x8],0x0
0040E586  |.  75 3B         jnz X5631a3f0.0040E5C3
0040E588  |.  B0 FF         mov al,0xFF
0040E58A  |.  8BFF          mov edi,edi
0040E58C  |>  0AC0          /or al,al
0040E58E  |.  74 2E         |je X5631a3f0.0040E5BE
0040E590  |.  8A06          |mov al,byte ptr ds:[esi]
0040E592  |.  46            |inc esi
0040E593  |.  8A27          |mov ah,byte ptr ds:[edi]
0040E595  |.  47            |inc edi
0040E596  |.  38C4          |cmp ah,al
0040E598  |.^ 74 F2         |je X5631a3f0.0040E58C
0040E59A  |.  2C 41         |sub al,0x41
0040E59C  |.  3C 1A         |cmp al,0x1A
0040E59E  |.  1AC9          |sbb cl,cl
0040E5A0  |.  80E1 20       |and cl,0x20
0040E5A3  |.  02C1          |add al,cl
0040E5A5  |.  04 41         |add al,0x41
0040E5A7  |.  86E0          |xchg al,ah
0040E5A9  |.  2C 41         |sub al,0x41
0040E5AB  |.  3C 1A         |cmp al,0x1A
0040E5AD  |.  1AC9          |sbb cl,cl
0040E5AF  |.  80E1 20       |and cl,0x20
0040E5B2  |.  02C1          |add al,cl
0040E5B4  |.  04 41         |add al,0x41
0040E5B6  |.  38E0          |cmp al,ah
0040E5B8  |.^ 74 D2         \je X5631a3f0.0040E58C
0040E5BA  |.  1AC0          sbb al,al
0040E5BC  |.  1C FF         sbb al,0xFF
0040E5BE  |>  0FBEC0        movsx eax,al
0040E5C1  |.  EB 34         jmp X5631a3f0.0040E5F7
0040E5C3  |>  B8 FF000000   mov eax,0xFF
0040E5C8  |.  33DB          xor ebx,ebx
0040E5CA  |.  8BFF          mov edi,edi
0040E5CC  |>  0AC0          /or al,al
0040E5CE  |.  74 27         |je X5631a3f0.0040E5F7
0040E5D0  |.  8A06          |mov al,byte ptr ds:[esi]
0040E5D2  |.  46            |inc esi
0040E5D3  |.  8A1F          |mov bl,byte ptr ds:[edi]
0040E5D5  |.  47            |inc edi
0040E5D6  |.  38D8          |cmp al,bl
0040E5D8  |.^ 74 F2         |je X5631a3f0.0040E5CC
0040E5DA  |.  50            |push eax
0040E5DB  |.  53            |push ebx
0040E5DC  |.  E8 2F000000   |call 5631a3f0.0040E610
0040E5E1  |.  8BD8          |mov ebx,eax
0040E5E3  |.  83C4 04       |add esp,0x4
0040E5E6  |.  E8 25000000   |call 5631a3f0.0040E610
0040E5EB  |.  83C4 04       |add esp,0x4
0040E5EE  |.  38C3          |cmp bl,al
0040E5F0  |.^ 74 DA         \je X5631a3f0.0040E5CC
0040E5F2  |.  1BC0          sbb eax,eax
0040E5F4  |.  83D8 FF       sbb eax,-0x1
0040E5F7  |>  5B            pop ebx
0040E5F8  |.  5E            pop esi
0040E5F9  |.  5F            pop edi
0040E5FA  |.  C9            leave
0040E5FB  \.  C3            retn

 

7.分析到这里,我们知道两个字符串中,"c8837b23ff8aaa8a2dde915473ce0991"是不变的,由程序给出的"0kk`d1a`55k222k2a776jbfgd`06cjjb"和"S"逐个异或得到,需要验证的是另外一个字符串,那么这个字符串是从哪里来的呢?回到该字符串出现的地方,再次分析一下,发现该值为计算00428c54处存放的数据的MD5值,嘿嘿预感是对的。这时候我们MD5解密一下"c8837b23ff8aaa8a2dde915473ce0991",解密后为"123321",重新跑一下程序,将00428c54改为"313233333231"(ascii"123321"),往下运行,果然出现了flag~

 

ps:后来来了一个妹子,比赛结束之后就消失了,还木有要个电话,T Tnozuonodie

转载于:https://www.cnblogs.com/Viwilla/p/4957160.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用 JavaScript 编写的杀死幽灵游戏(附源代码) 杀死鬼魂游戏是使用 Vanilla JavaScript、CSS 和 HTML 画布开发的简单项目。这款游戏很有趣。玩家必须触摸/杀死游荡的鬼魂才能得分。您必须将鼠标悬停在鬼魂上 - 尽量得分。鬼魂在眨眼间不断从一个地方移动到另一个地方。您必须在 1 分钟内尽可能多地杀死鬼魂。 游戏制作 这个游戏项目只是用 HTML 画布、CSS 和 JavaScript 编写的。说到这个游戏的特点,用户必须触摸/杀死游荡的幽灵才能得分。游戏会根据你杀死的幽灵数量来记录你的总分。你必须将鼠标悬停在幽灵上——尽量得分。你必须在 1 分钟内尽可能多地杀死幽灵。游戏还会显示最高排名分数,如果你成功击败它,该分数会在游戏结束屏幕上更新。 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox。要玩游戏,首先,单击 index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
javascript 中的 Paint War Game 是使用 HTML、CSS 和 JavaScript 开发的。谈到游戏玩法,这款游戏的主要目标是建造比敌人更多的油漆砖。您所要做的就是使用 WASD 键输入玩家的动作。您可以使用 VS Code 来运行该项目。 关于项目 每次您的玩家走过一块瓷砖时,它都会被涂成您的团队颜色。您必须在同一块瓷砖上走 4 次才能获得更多游戏点数。瓷砖会被您的团队挡住,并且不能再被偷走。如果您走过另一支球队的瓷砖,它会像您第一次走过时一样被涂上颜色。如果您创建一个封闭的被阻挡瓷砖图形,图形内所有未被阻挡的瓷砖都将固定为您的团队颜色。这个游戏充满乐趣,创造和重新即兴发挥会更有趣。 要运行此项目,我们建议您使用现代浏览器,例如 Google Chrome、  Mozilla Firefox。该游戏可能还支持 Explorer/Microsoft Edge。 演示: javascript 中的 Paint War Game 是使用 HTML、CSS 和 JavaScript 开发的。谈到游戏玩法,这款游戏的主要目标是建造比敌人更多的油漆砖。您所要做的就是使用 WASD 键输入玩家的动作。您可以使用 VS Code 来运行该项目。 关于项目 每次您的玩家走过一块瓷砖时,它都会被涂成您的团队颜色。您必须在同一块瓷砖上走 4 次才能获得更多游戏点数。瓷砖会被您的团队挡住,并且不能再被偷走。如果您走过另一支球队的瓷砖,它会像您第一次走过时一样被涂上颜色。如果您创建一个封闭的被阻挡瓷砖图形,图形内所有未被阻挡的瓷砖都将固定为您的团队颜色。这个游戏充满乐趣,创造和重新即兴发挥会更有趣。 要运行此项目,我们建议您使用现代浏览器,例如 Google Chrome、  Mozilla Firefox。该游戏可能还支持 Explorer/Microsoft Edge。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值