当前位置: 首页> 游戏> 手游 > [CTF]-Reverse:纯逻辑分析题型综合解析

[CTF]-Reverse:纯逻辑分析题型综合解析

时间:2025/7/11 8:46:38来源:https://blog.csdn.net/2301_79326813/article/details/141404571 浏览次数:0次

C语言:

字符串爆破:

例题(BUUCTF SimpleRev):

 查壳

看ida

这里的中心就是两个字符串和一个计算式子,text=killshadow和str2=adsfkndcls,计算式子str2[v2] = (v1 - 39 - key[v3 % v5] + 97) % 26 + 97

完整exp:

#include<stdio.h>
int main()
{char key[11]="adsfkndcls";char text[11]="killshadow";char str2[11];char flag[11];int v1=0,v2=0,v3=0,v5=0;v3=v5=10;while(1){for(v1='A';v1<='z';v1++){str2[v2] = (v1 - 39 - key[v3 % v5] + 97) % 26 + 97;if(str2[v2]==text[v2]){flag[v2]=v1;v3++;break;}}v2++;if(v2==10){break;}}printf("%s",flag);
}

最后flag是flag{KLDQCUDFZO}

ascll码逆向:

例题(SWPUCTF 2021 新生赛 re2):

无壳

直接看ida

完整exp:

result=list('ylqq]aycqyp{')
for i in range(len(result)):if (ord(result[i])<=94 or ord(result[i])>96) and (ord(result[i])<=62 or ord(result[i])>64):result[i]=chr(ord(result[i])+2)else:result[i]=chr(ord(result[i])-24)
result=''.join(result)
print(result)

输出的是{nss_c{es{r}

因为a与{加密都得y所以要适当修改一点

{nss_caesar}

#补充点:这里的if的范围因为是逆回去的,所以范围要减2。

Python:

取模逆运算:

例题(SWPUCTF 2021 新生赛 fakebase):

题目:

flag = 'xxxxxxxxxxxxxxxxxxx's_box = 'qwertyuiopasdfghjkzxcvb123456#$'
tmp = ''
for i in flag:tmp += str(bin(ord(i)))[2:].zfill(8)
b1 = int(tmp,2)
s = ''
while b1//31 != 0:s += s_box[b1%31]b1 = b1//31print(s)# s = u#k4ggia61egegzjuqz12jhfspfkay

简单的来说,前面的循环是把字符串转换为了二进制,后面的循环则是不断地将一个数进行整除,并将余数储存起来。只不过这里换了个形式存储余数。

在取余模运算中,我们有了除数和余数还不足以推出完整的b1,还缺少商,这个时候可以采用爆破的形式来推出完整的b1。

推出完整的b1之后可以用libnum的函数给我们推出原来的字符串。

完整exp:

import libnum
s='u#k4ggia61egegzjuqz12jhfspfkay'
s_box ='qwertyuiopasdfghjkzxcvb123456#$'for k in range(0,31):b1=kfor i in s[::-1]:b1=31*b1+s_box.index(i)print(libnum.n2s(int(b1)))

关键字:[CTF]-Reverse:纯逻辑分析题型综合解析

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: