avatar

目录
2018巅峰极客网络安全技能挑战赛 RE(1) Simple Base-N

2018巅峰极客网络安全技能挑战赛 RE(1) Simple Base-N

通过这道题,又复习了一遍Base32的逆向
im

很干净,无壳无花,x86 C++

拖进IDA

IDA分析

搜索字符串
enter description here

定位,F5
im
im

首先要求输入长度大于等于10

1. Fake Flag

v3 = "guvf_vf_n_snxr_synt";是用来骗人的,其操作是在sub_401100进行操作然后比较,因此只要利用逆向思维,将v3看作已知,对sub_401100进行逆操作即可

sub_401100内部为

Code
signed int __thiscall sub_401100(const char *this)
{
const char *v1; // edi
unsigned int v2; // esi
char v3; // cl

v1 = this;
v2 = 0;
if ( strlen(this) )
{
do
{
v3 = v1[v2];
if ( (unsigned __int8)(v3 - 97) <= 0x19u )
v1[v2] = (v3 - 84) % 26 + 97;
if ( (unsigned __int8)(v3 - 65) <= 0x19u )
v1[v2] = (v3 - 52) % 26 + 65;
++v2;
}
while ( v2 < strlen(v1) );
}
return 1;
}

可以看出是对ASCII操作
84 -> ‘T’
97 -> ‘a’
52 -> ‘4’
65 -> ‘A’

脚本

im

当然了,这是假flag,仅供娱乐

True Flag

接着往下看
LABEL_9才是真正的加解密函数

编码表 sub_4012C0()

进入sub_4012C0();查看
enter description here

sub_401100刚刚分析过,这里仔细分析一下
i

接下来读取长度,+32是大写转换为小写操作++i** 及 i&1组合表示奇数位不变,偶数位转换

dword_40507C内容需要括住按C键重新分析,将数据识别为Char类型,结果如下
enter description here

‘2765’及‘43’也是转换成char类型得到的,值得注意的是,未转换之前为十六进制编码,且应倒序读取,dword_40507C加上4位数字(即5672)就来到了word_405080,也就是数字顺序为567234
或着在修复dword_40507C后,重新F5,即如下图,更加易于理解
enter description here

于是将ABCDEFGHIJKLMNOPQRSTUVWXYZ带入脚本得出
enter description here
再替换大小写,后面加567234即得出编码顺序
NoPqRsTuVwXyZaBcDeFgHiJkLm567234

BASE32 sub_401310()

回到主函数,分析最后一个需要的函数sub_401310()
enter description here

跟进sub_401170
enter description here
enter description here

下面case里的数据识别为char为”=”,结合题目叫Simple Base-N可以猜到应该是Base16/32/64类型的加密,并且编码表的内容我们也刚刚已经得出,为了继续印证猜想,往上看看,发现如下操作
enter description here

这看起来很眼熟,enter description here

之前写过一篇wp(2017第二届广东省强网杯线上赛Nonstandard),代码一模一样,看来就是Base32了。

解密脚本

于是直接用上次的脚本就好,带入密码weNTDk5LZsNRHk6cVogqTZmFy2NRP7X4ZHLTBZwg

Code
s = "weNTDk5LZsNRHk6cVogqTZmFy2NRP7X4ZHLTBZwg"
table = "NoPqRsTuVwXyZaBcDeFgHiJkLm567234"

def find(x):
if(x=='='):
return 0
return table.index(x)

for i in range(len(s)//8):
p = s[i*8:i*8+8]
t = 0
for j in p:
t = t<<5
t += find(j)
for j in range(5):
print(chr((t&0xff00000000)>>32), end='')
t = t<<8

Flag

enter description here
得出之后提交并不正确,通过凯撒移位,发现Rot13的结果是flag
enter description here

flag:Y@u_Kn@W_b@s332_@Nd_r0t13


Get it!

文章作者: kabeor
文章链接: https://kabeor.github.io/2018%E5%B7%85%E5%B3%B0%E6%9E%81%E5%AE%A2%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E6%8A%80%E8%83%BD%E6%8C%91%E6%88%98%E8%B5%9B%20RE(1)%20Simple%20Base-N/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 K's House

评论