当前位置: 首页 > news >正文

销售网站建设考核指标旅游网站开发目的6

销售网站建设考核指标,旅游网站开发目的6,中国最厉害的网站建设公司,杭州网站如何制作easyre、内涵的软件、xor、不一样的flag: buuctf reverse部分题解(实时更新)_reverse 题解-CSDN博客 请见小库里的blog。 reverse1 查壳发现没有,而且是64位 粗略改一下部分函数名,看看主要逻辑。 第一个for循环暂…

easyre、内涵的软件、xor、不一样的flag:

buuctf reverse部分题解(实时更新)_reverse 题解-CSDN博客

请见小库里的blog。

reverse1

查壳发现没有,而且是64位

粗略改一下部分函数名,看看主要逻辑。

第一个for循环暂时不知道干什么的,但是一眼就看到最后几行的strcmp。 看来就是str1和str2的比较,str1是我们自己输入的,那么主要就是分析str2。第二个for循环明显是把o变成0(需要按r转换一下字符)。双击str2就知道str2的内容。

reverse2

查出来是64位。可以放虚拟机运行一下看看,进去就是直接输入flag。

我们拖进IDA看看。

一样的字符替换逻辑。SHIFT+F12就可以看到原始的flag。 替换即可。

新年快乐

光看代码什么也看不出,看看能不能通过动调拿到信息。

题目上说就是一个字符串! 在看了一下发现有壳,忘记脱壳了!!!脱完壳直接就看出来答案了,服了。

reverse3

查壳,是32位。

看一下关键代码。看样子是输入了一个字符串,经过sub_4110BE函数处理之后,又获得了一个Destination字符串,并且来比较。那么我们看看这个函数的逻辑是什么。点进去发现一个全局变量,有如下编码表。怀疑是base64编码。

注意有个for循环,估计是将这个Destination字符串前11位每一位都加了1,我们只需要搞个脚本给他返回去即可。Str2就是我们需要比较的字符串,其实我们已经有这个字符串的值,所以写脚本也是比较好写的。然后base解码即可。

import base64
a='e3nifIH9b_C@n@dH'
c=''
for i in range(0,len(a)):c+=(chr(ord(a[i])-i))
print('base64:'+c)
c=bytes(c,encoding='utf-8')
mydecode=base64.b64decode(c)
print('flag'+str(mydecode,encoding='utf-8'))

上述代码运行结果: 

helloword

这是一个apk文件,进去啥玩意都没有。所以猜测藏在了安装包里了flag。

还算简单,mainActivity里面就是flag。

SimpleRev (未完成)

这是一个64位ELF文件。下面是关键代码。

unsigned __int64 Decry()
{char input; // [rsp+Fh] [rbp-51h]int v2; // [rsp+10h] [rbp-50h]int v3; // [rsp+14h] [rbp-4Ch]int i; // [rsp+18h] [rbp-48h]int keylen; // [rsp+1Ch] [rbp-44h]char src[8]; // [rsp+20h] [rbp-40h] BYREF__int64 v7; // [rsp+28h] [rbp-38h]int v8; // [rsp+30h] [rbp-30h]__int64 v9[2]; // [rsp+40h] [rbp-20h] BYREFint v10; // [rsp+50h] [rbp-10h]unsigned __int64 v11; // [rsp+58h] [rbp-8h]v11 = __readfsqword(0x28u);*(_QWORD *)src = 0x534C43444ELL;v7 = 0LL;v8 = 0;v9[0] = 0x776F646168LL;v9[1] = 0LL;v10 = 0;text = join(key3, (const char *)v9);          // kills--key3strcpy(key, key1);                            // adsfk key1strcat(key, src);v2 = 0;v3 = 0;getchar();keylen = strlen(key);for ( i = 0; i < keylen; ++i ){if ( key[v3 % keylen] > '@' && key[v3 % keylen] <= 'Z' )key[i] = key[v3 % keylen] + 32;++v3;}printf("Please input your flag:");while ( 1 ){input = getchar();if ( input == '\n' )break;if ( input == 32 ){++v2;}else{if ( input <= '`' || input > 'z' ){if ( input > '@' && input <= 'Z' ){str2[v2] = (input - 39 - key[v3 % keylen] + 97) % 26 + 97;++v3;}}else{str2[v2] = (input - 39 - key[v3 % keylen] + 97) % 26 + 97;++v3;}if ( !(v3 % keylen) )putchar(32);++v2;}}if ( !strcmp(text, str2) )puts("Congratulation!\n");elseputs("Try again!\n");return __readfsqword(0x28u) ^ v11;
}

这就是一个自己写的算法,接下来进行仔细分析。

首先,在末尾可以看出比较的是text,所以我们先给text求出来。程序自定义了一个join函数,实际上就是拼接俩字符串。这也是个小端序文件要注意。此外,v9应该理解为字符串,因为其最后一个是0,相当于0x0。编写脚本求出text先。

看程序代码,str2明显是需要求出来。str2会和key相等。根据算法来看,我们应该先求出key,再考虑具体的算法。所以接下来计算key。

程序这段代码实现了对key的进一步操作,就是转为小写。(注意ASCII码+32)v3只是一个计数器罢了

 

 

接下来就可以看看是如何利用key来生成str2的。 

待更新

[GXYCTF2019]luck_guy

直接进入关键函数看看。

unsigned __int64 get_flag()
{unsigned int v0; // eaxint i; // [rsp+4h] [rbp-3Ch]int j; // [rsp+8h] [rbp-38h]__int64 s; // [rsp+10h] [rbp-30h] BYREFchar v5; // [rsp+18h] [rbp-28h]unsigned __int64 v6; // [rsp+38h] [rbp-8h]v6 = __readfsqword(0x28u);v0 = time(0LL);srand(v0);for ( i = 0; i <= 4; ++i ){switch ( rand() % 200 ){case 1:puts("OK, it's flag:");memset(&s, 0, 0x28uLL);strcat((char *)&s, f1);strcat((char *)&s, &f2);printf("%s", (const char *)&s);break;case 2:printf("Solar not like you");break;case 3:printf("Solar want a girlfriend");break;case 4:s = 0x7F666F6067756369LL;v5 = 0;strcat(&f2, (const char *)&s);break;case 5:for ( j = 0; j <= 7; ++j ){if ( j % 2 == 1 )*(&f2 + j) -= 2;else--*(&f2 + j);}break;default:puts("emmm,you can't find flag 23333");break;}}return __readfsqword(0x28u) ^ v6;
}

首先题目是一个随机数生成,我们肯定不可能赌运气一遍遍地运行的。分析一下switch函数的几个子项,case 1直接显示出来了flag。首先f1已经知道了,主要就是看f2怎么来搞得。主要看情况4和情况5.他们应该控制着f2。

 首先要注意,checksec检查出来是小端序,所以s这个应该是小端序储存,也就是阅读习惯与咱们是相反的。然后f2被赋值为s。5应该是在4之后对f2进行操作。我们可以根据这个算法写出python脚本。得到结果和F1拼接即可。

s = [0x69, 0x63, 0x75, 0x67, 0x60, 0x6F, 0x66, 0x7F]
# 手动转换一下,因为本身是小端序储存,转到python顺序需要更改。
result = []
for i, value in enumerate(s):if i % 2 == 1:result.append(chr(value - 2))else:result.append(chr(value - 1))# 打印结果
result_str = ''.join(result)
print(result_str)

Java逆向解密

反编译class看看:

分析一下,最下面是一个if验证输入的内容是否和KEYlist相等。main 方法应该就是一个输入了。我们主要看Encrypt。看到主要算法估计是c加上个@的ascii码再异或32.这样的话思路就很清晰了。

a=[180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]
b=''
for i in a:b+=chr((i^32)-ord('@'))#i^32需要加括号 因为运算优先级的问题
print(b)

http://www.dtcms.com/a/561397.html

相关文章:

  • 路由器端口镜像的配置与实验(eNSP)
  • vagrant+virtualBox使用记录
  • c++:析构与异常——noexcept的隐形爆炸
  • JavaEE多线程进阶
  • 网站建设结课总结如何在亚马逊开店流程及费用
  • 学习网页制作的网站如何修改网站源文件
  • 停车场管理|停车预约管理|基于Springboot的停车场管理系统设计与实现(源码+数据库+文档)
  • 计算机网络---ICMP协议(Internet Control Message Protocol,互联网控制消息协议)
  • 网站如何做淘宝客网站做要钱
  • 做公司网站需要什么资料开源手机网站系统
  • 成都网站优化公司哪家好南京哪家网络公司做网站优化好
  • Java 通配符
  • java-learn(9):常见算法,collection框架
  • 海口网站建设维护网校 039 网站建设多少钱
  • 网站建设的频道是什么济南企业网站制作费用
  • 外卖餐饮小程序带商城系统餐桌预定点餐寄存排队等待在线点单程序
  • 广州市公司网站建设价格wordpress播放音乐
  • Onnxruntime源码解析
  • Typescript - type 类型别名(通俗易懂教程)
  • 专业建站lhznkj挂机宝做网站
  • 单位网站建设 管理制度wordpress中文视频插件下载
  • 【ComfyUI】混元3D 2.0 Turbo 多视图生成模型
  • 【SAM】eval_coco.py说明
  • 阜宁网站制作具体报价手机端网页设计尺寸规范
  • 青岛做网站和小程序的公司大连长建个人主页
  • [MySQL] JDBC
  • 从零开始学习Redis(六):Redis最佳实践(使用经验总结)
  • 秦皇岛建设网站西安百度seo代理
  • 备案 几个网站职业生涯规划
  • Ruby CGI Cookie 使用指南