avatar

CTF-Re-安恒杯第二题

CTF-Re-安恒杯第二题

下载文件 点击下载
首先把程序导入IDA进行分析,然后选中_main,然后F5大法

通过简单的分析我们知道了

1
TRLT5amLBoLT5Z6Fa5LqN6mkTomqR66Da4LqX5mgBwkkP5wmTZ6D====

是真码,也就是我们需要逆向的密码。
在比较真码前一条代码进行F5

发现是一个循环,循环里面还有一个call,继续进入F5

经过简单的分析就是取出5个char,然后将前四个通过移位使得eax填满且恰好等于四个字符,比如31323334
然后将最后一个放到edx
然后将eax和0x1F进行与运算,运算完,右移2位,然后继续运算,edx也会进行运算,其实它的本质就是将5个字符的二进制模式下拆成5份,然后再5份5份的读出转化为数字,然后在一个密码表里当做序号的值转化为密文。
密码表如下

1
NoPqRsTuVwXyZaBcDeFgHiJkLm765432

所以我们只需将真码先通过密码表逆运算,算出我们与运算之后数据,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
crypto_txt  = "TRLT5amLBoLT5Z6Fa5LqN6mkTomqR66Da4LqX5mgBwkkP5wmTZ6D===="
table = "NoPqRsTuVwXyZaBcDeFgHiJkLm765432"
base = [0,0,0,0,0,0,0,0]
flag = [0,0,0,0,0,0,0,0]
for i in range(0,55,8):
for j in range(0,8):
base[j] = crypto_txt[i+j]
for j in range(0,8):
flag[j] = 0;
for k in range(0,32):
for l in range(0,8):
if(table[k] == base[l]):
flag[l] = k;
flag[0] = flag[0]<<35
flag[1] = flag[1]<<30
flag[2] = flag[2]<<25
flag[3] = flag[3]<<20
flag[4] = flag[4]<<15
flag[5] = flag[5]<<10
flag[6] = flag[6]<<5
print ("%x"%(flag[0]+flag[1]+flag[2]+flag[3]+flag[4]+flag[5]+flag[6]+flag[7]))

运行结果如下

但是这个并不是最终的结果,因为前面还有很多代码,我们继续探索

1
sub_1161100(byte_1165018);

上面那个call中,其实是对英文字母的偏移替换

将小写替换为 (原码 - 84) % 26 +97
将大写替换为 (原码 - 52) % 26 +65

所以我们只需要将替换后的字母表输出出来,然后对着修正就好了
代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#31306e373870706e33726f30306f373072326f706f70357333726f7171393337000000
str = "\x31\x30\x6e\x37\x38\x70\x70\x6e\x33\x72\x6f\x30\x30\x6f\x37\x30\x72\x32\x6f\x70\x6f\x70\x35\x73\x33\x72\x6f\x71\x71\x39\x33\x37\x00\x00\x00"
table = []
print str;
for i in range(97,123):
j = (i - 84) % 26 + 97;
table.append(j);
print(chr(i)+" -> "+chr(j));
for i in str:
if(0 <= (ord(i)-97) and (ord(i)-97) <= 27):
for j in range(0,27):
if(ord(i)-97 == j):
print chr(table[j]),
continue
print("%c"%i),

效果如下

明显flag就是
10a78cca3eb00b70e2bcbc5f3ebdd937

验证一下

是正确的

总结:从这个Re中,我们学到了base的变种,还有字母表替换的灵活使用

文章作者: 咲夜南梦
文章链接: http://yoursite.com/2018/11/16/CTF-Re-AnHeng2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 咲夜南梦's 博客
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论