CTF小白学习笔记(Reverse)-i春秋 CrackMe-1

主要考察动态调试,不过动态调试的过程就略去了

解题过程

运行一下,大概就是如果输入的是flag就成功:
在这里插入图片描述

查壳发现无壳,直接上IDA:
在这里插入图片描述点进DialogFunc
在这里插入图片描述这里关键步骤应该在sub_401210里,如果返回值是751,那就成功了,点进去看看
在这里插入图片描述这里有几个可疑变量,v68, String。经过调试发现v68是个恒定的字符串,长度18,值为:

BinGzLFormiChunQiu

String就是输入字符串。这里可疑看出输入时36个字符

在这里插入图片描述
这个判断就是确保输入的字符都是0-9 A-F, 也就是输入是16进制字符串

在这里插入图片描述
这中间是个漫长的加密过程,具体过程就不慢慢研究了,179行的赋值操作值得注意。经过动态调试发现,src每次取出36个字符中的2个字符,然后v23就是把这两个字符转化成byte(比如src = ‘EF’, v23就是0xEF)

在这里插入图片描述这里就很关键了,v23各种加密后赋值到v72字符串中,最后v72字符串和Dst字符串比对,Dst字符串是写死的,值为

3C 81 64 30 E8 EE 0A 90 20 1B 46 52 C8 20 FE D4 8C FE

所以说这个程序执行了18次加密过程,每次都是上下文无关的,加密过程很复杂,不好逆向。那就只能hash了(算出从0x00-0xFF加密过后的字符)

每次输入18个,搞了好多次,dump出一个hash表

    0   1  2  3  4  5  6  7  8  9  A  B  C  D  E  F   
0	2F 86 FD BC 5B 92 69 08 07 3E 35 14 53 4A 01 60
1	9F 36 6D EC 0B 82 19 F8 B7 2E 25 84 43 BA B1 D0
2	CF A6 1D DC 7B B2 89 28 A7 DE 55 34 F3 6A A1 00
3	3F D6 0D 0C AB 22 B9 18 57 4E 45 A4 63 DA 51 70
4	6F C6 3D FC 9B D2 A9 48 47 7E 75 54 93 8A 41 A0
5	DF 76 AD 2C 4B C2 59 38 F7 6E 65 C4 83 FA F1 10
6	0F E6 5D 1C BB F2 C9 68 E7 1E 95 74 33 AA E1 40
7	7F 16 4D 4C EB 62 F9 58 97 8E 85 E4 A3 1A 91 B0
8	AF 06 7D 3C DB 12 E9 88 87 BE B5 94 D3 CA 81 E0
9	1F B6 ED 6C 8B 02 99 78 37 AE A5 04 C3 3A 31 50
A 	4F 26 9D 5C FB 32 09 A8 27 5E D5 B4 73 EA 21 80
B	BF 56 8D 8C 2B A2 39 98 D7 CE C5 24 E3 5A D1 F0
C	EF 46 BD 7C 1B 52 29 C8 C7 FE F5 D4 13 0A C1 20
D	5F F6 2D AC CB 42 D9 B8 77 EE E5 44 03 7A 71 90
E	8F 66 DD 9C 3B 72 49 E8 67 9E 15 F4 B3 2A 61 C0
F	FF 96 CD CC 6B E2 79 D8 17 0E 05 64 23 9A 11 30

本来还想写脚本的不过这个表本身就有规律,而且也就18个数字,直接手动算flag得了,最终flag为:

flag{838EFBFFE7D9CDDFCFC4C1C5C7CFC9CBB3C9}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值