Tags:追码,分析流程

如图2,

西普CTF-此处无声-以夕阳落款

要求得到用户名为hello的注册码作为Key提交。

这次比较正统了。C++编写,无壳无反调试。有字符串参考,故表示无压力。

字符串参考下断。单步F8跟踪就好。

如图3,

西普CTF-此处无声-以夕阳落款

判断

00401053 . E8 78010000 call CrackMe1.004011D0

为关键Call,F7跟进分析。

00401265 |> /0FBE4434 08 /movsx eax, byte ptr ss:[esp+esi+8]

0040126A |. |0FAFC0 |imul eax, eax

0040126D |. |0FAFC6 |imul eax, esi

00401270 |. |03C6 |add eax, esi

00401272 |. |33D2 |xor edx, edx

00401274 |. |B9 42000000 |mov ecx, 42

00401279 |. |8D7C24 08 |lea edi, dword ptr ss:[esp+8]

0040127D |. |F7F1 |div ecx

0040127F |. |83C9 FF |or ecx, FFFFFFFF

00401282 |. |33C0 |xor eax, eax

00401284 |. |80C2 21 |add dl, 21

00401287 |. |885434 28 |mov byte ptr ss:[esp+esi+28], dl

0040128B |. |46 |inc esi

0040128C |. |F2:AE |repne scas byte ptr es:[edi]

0040128E |. |F7D1 |not ecx

00401290 |. |49 |dec ecx

00401291 |. |3BF1 |cmp esi, ecx

00401293 |.^\72 D0 \jb short CrackMe1.00401265

有兴趣可以分析一下上面代码,经过上面处理,用户名hello处理后为!GA0U

而后分析,注册码加前缀Happy@后得到真码“Happy@!GA0U”。

坑爹的地方出现了- -

提交Key果断直接提交Happy@!GA0U。却发现木有加分,后来知道,答案为用户名:注册码形式,即hello:Happy@!GA0U,晕倒。

孔子曰:审题很重要。

第三题:5分

TAG:算法,注册机,MD5+RC6

如图4,

西普CTF-此处无声-以夕阳落款

传说压轴题目出现了。要求给出nsfocus的注册码。

因为涉及到MD5与RC6加密算法,所以比较烦人,后来了解当初比赛没一组提交此题答案。

无壳,但有所保护,可以无视。

运行起来,bp MessageBoxA下断点回溯可以一点一点找到关键代码。

首先判断

00401882 |. 83F9 20 cmp ecx, 20 ; 判断长度32位

00401885 |. 75 28 jnz short CrackMe2.004018AF

00401887 |. 33C9 xor ecx, ecx

00401889 |> 8A0411 /mov al, byte ptr ds:[ecx+edx]

0040188C |. 3C 30 |cmp al, 30 ; 与0比较

0040188E |. 7C 04 |jl short CrackMe2.00401894

00401890 |. 3C 39 |cmp al, 39 ; 与9比较

00401892 |. 7E 08 |jle short CrackMe2.0040189C

00401894 |> 3C 41 |cmp al, 41

00401896 |. 7C 0A |jl short CrackMe2.004018A2 ; 与A比较

00401898 |. 3C 46 |cmp al, 46

0040189A |. 7F 06 |jg short CrackMe2.004018A2 ; 与F比较

0040189C |> 41 |inc ecx

0040189D |. 83F9 20 |cmp ecx, 20

004018A0 |.^ 7C E7 \jl short CrackMe2.00401889

004018A2 |> 83F9 20 cmp ecx, 20 ; 这里正常

004018A5 |. 75 08 jnz short CrackMe2.004018AF

004018A7 |. B8 01000000 mov eax, 1

这里确定注册码为32位,且字符只可能为0-F。瞬间不淡定了,32位,很可能就出现MD5。而注册字符只可能是0-F。

接着分析。越分析越没头绪,越来越复杂。

到最后比较之处,如图5。

西普CTF-此处无声-以夕阳落款

在数据窗口发现如下部分。

0012F664 35 47 82 5C 33 8C 85 77 9A 67 45 7A 6D 5C 16 47 5G俓3寘w歡Ezm\G

0012F674 F6 AD DD 6C 46 EB B6 44 BD A2 65 36 6E 8C A6 75 霏輑F攵D舰e6n對u

0012F684 B9 B7 DD 1C 42 1E 00 5B C9 A7 F7 0B 84 8E 3D 0E 狗?B.[骚?剮=

其中B9B7DD1C421E005BC9A7F70B848E3D0E是nsfocus的MD5值。

F6ADDD6C46EBB644BDA265366E8CA675是个人输入的注册码[这里为展示输入为正确注册码]。

而上面一串3547825C338C85779A67457A6D5C1647瞬间让我不淡定了。

也就是说,CrackMe判断方式为Eecode(Key)=MD5(Name)。

加密算法只用到0-F,且可能有自身的密钥串3547825C338C85779A67457A6D5C1647。猜想可能用到RC6加密算法。

因为有一种方式为RC6Decrypt(MD5(Name))=Key。也算是偶尔查到看雪的一个帖子。

这样用RC6解密试一下,如图6,

西普CTF-此处无声-以夕阳落款

密钥串果然是3547825C338C85779A67457A6D5C1647

好吧,周折之下总算得到Key:********************************

总结:

其实也没什么好总结的

第一关考察DotNet的基础知识及基础的找码知识。

第二关是一个普通程序的追码测试。

第三关则涉及到反调试与密码学知识。
Flag:

温馨提示: 此处内容需要评论本文后刷新才能查看,支付2元即可直接查看所有Flag。

小广告:关于获取西普实验吧所有Writeup请点击这里查看索引

查看所有Flag需要付费,需要获取所有Flag的童鞋请访问这里成为付费用户,可以自助把自己的注册邮箱加入网站白名单,即可免回复看到本站所有Flag

Flag大全地址:所有Flag

PS:本站不是实验吧的官方站点,纯粹是个人博客,收取Flag费用仅是维持服务器费用,做站不易,且行窃珍惜,如果喜欢我的博客,愿意捐赠的,可以扫描下面的二维码

微信二维码:
支付宝二维码: