REVERSE-PRACTICE-CTFSHOW-1

  • 逆向签到题
  • re2
  • 逆向4
  • 逆向5

逆向签到题

ida打开即可得到明文flag

re2

附件是一个加密过的flag文本和勒索病毒exe
运行程序,输入1,回车,直接退出,ida分析
选项1的逻辑为,打开flag.txt和enflag.txt,要求输入正确的密钥,然后使用密钥对明文flag进行RC4加密,密文写到enflag.txt

分析check_key部分,简单的异或运算和比较

写脚本可得到密钥

s="DH~mqqvqxB^||zll@Jq~jkwpmvez{"
key=""
for c in s:key+=chr(ord(c)^0x1f)
print(key)
#[Warnning]Access_Unauthorized

程序用密钥对明文flag进行RC4加密,现已知密文和密钥,写RC4解密脚本即可得到flag

#include<stdio.h>
void rc4_init(unsigned char* s, unsigned char* key, unsigned long Len_k) //初始化函数
{int i = 0, j = 0;char k[256] = { 0 };unsigned char tmp = 0;for (i = 0; i < 256; i++) {s[i] = i;k[i] = key[i % Len_k];}for (i = 0; i < 256; i++) {j = (j + s[i] + k[i]) % 256;tmp = s[i];s[i] = s[j];s[j] = tmp;}
}
void rc4_crypt(unsigned char* Data, unsigned long Len_D, unsigned char* key, unsigned long Len_k) //加解密
{unsigned char s[256];rc4_init(s, key, Len_k);int i = 0, j = 0, t = 0;unsigned long k = 0;unsigned char tmp;for (k = 0; k < Len_D; k++) {i = (i + 1) % 256;j = (j + s[i]) % 256;tmp = s[i];s[i] = s[j];s[j] = tmp;t = (s[i] + s[j]) % 256;Data[k] = Data[k] ^ s[t];}
}
void main()
{unsigned char key[] = "[Warnning]Access_Unauthorized";unsigned long key_len = sizeof(key) - 1;unsigned char data[] = { 0xC3,0x82,0xA3,0x25,0xF6,0x4C,0x36,0x3B,0x59,0xCC,0xC4,0xE9,0xF1,0xB5,0x32,0x18,0xB1,0x96,0xAe,0xBF,0x08,0x35};rc4_crypt(data, sizeof(data), key, key_len);for (int i = 0; i < sizeof(data); i++){printf("%c", data[i]);}printf("\n");return;
}
//flag{RC4&->ENc0d3F1le}

逆向4

exe程序,要求输入正确的数字,ida分析
静态看不明白,起调试
可以看到,输入作为第一个参数,传入了sub_7FF62E5010E0函数

F7步入sub_7FF62E5010E0函数,先分析第一部分
21行和22行合并后,可以理解为,输入的数字对26取余,余数作为下标在一个table里取值,然后输入的数字除以26得到新的数字,再用新的数字对26取余,余数作为下标在table取值,以此类推,直到最后的数字除以26为0终止,取出的值放到一块连续的内存

然后分析第二部分
index是上面取出的值的数目,也就是说v7是从高地址向低地址依次取值的
因为上面先用余数作的下标,再做的除运算,于是每次取出的值可以理解为是按输入的数字的较小的部分取出的
暂时忽略在table里取值这一步,实际上就是小值存储在小地址,小端序的特点

v7依次取值,和7异或一下,结果存储到一块内存

sub_7FF62E501220函数是check的部分,最后要比较的字符串是明文可知的,每次循环比较两个字符

最后写脚本即可得到正确的输入数字

table=")(*&^%489$!057@#><:2163qwe"
ans="/..v4p$$!>Y59-"
ans_s=""
for c in ans:ans_s+=chr(ord(c)^7)
print(ans_s)
num=0
for c in ans_s:num *= 26index=table.find(c)num+=index
print(num)
#())q3w##&9^2>*
#2484524302484524302

逆向5

附件是一个dll和一个exe,exe运行直接弹窗,点击确定后直接退出,ida分析
main->sub_4015BD
可以看到,这里判断Str[1]是否等于1,而Str是给定的明文且Str[1]!=1,于是这个判断不成立

分析sub_401520函数,这里加载了另一个附件1.dll,然后找到了H
循环体中依次取Str中的值,然后作为参数传入H
最后sub_40163E函数里有个putchar打印H处理Str[i]后的内容

因为之前Str[1]!=1,所以不会执行sub_401520函数
起调试,停在那条if语句处,在执行jnz之前把ZF标志为由0改为1

修改后在下图所示语句处下断点,F9运行到此处,再F8执行sub_40163E函数,即可在黑窗看到flag

REVERSE-PRACTICE-CTFSHOW-1相关推荐

  1. ctfshow逆向reverse笔记

    re1 逆向签到题 直接ida打开就可以看到flag.可以直接找main函数. flag{7ujm8ikhy6} re2 用ollydebug打开,我的ida不好使了.... 这里是简单的异或 DHm ...

  2. linux内核路由反向检查,反向路径过滤——reverse path filter

    反向路径过滤--reverse path filter 一.原理 先介绍个非对称路由的概念 参考<Understanding Linux Network Internals>三十章, 30 ...

  3. CTFshow sql注入 上篇(web171-220)

    目录 前言 题目 web 171(万能密码) web 172(回显内容过滤,base64或者hex编码绕过) web 173(回显内容过滤,base64或者hex编码绕过) web 174 (布尔盲注 ...

  4. java中Collections常用方法总结(包括sort,copy,reverse等)

    1.sort(Collection)方法的使用(含义:对集合进行排序). 例:对已知集合c进行排序public class Practice {public static void main(Stri ...

  5. A Guide To Reverse Tethering

    By Kevin Pocock on February 04, 2013 Using a mobile device such as a smartphone to act as a hotspot ...

  6. CTFSHOW WEB入门

    ----------信息搜集---------- 源码泄露 查看源码即可 前台JS绕过 直接开发者工具查看源码 当然也可以抓包查看 也可以禁用js查看源码 协议头信息泄露 或者抓一下包也可 robot ...

  7. picoCTF,Reverse Engineering,逆向类,42/55

    picoCTF,Reverse Engineering,42/55 2019 picoCTF 01.vault-door-training,50分 02.vault-door-1,100分 03.va ...

  8. [ctf.show.reverse] 红包六

    下来是个压缩包,解开后一个原码,解码后是notflag,发现压缩包有5k大而解出的java文件只有1k,显然包里还有内容未解出 用010打开包发现有两个EzJar.class文件,手工切出解压 imp ...

  9. ctfshow 月饼杯(第二届) 部分WriteUp

    Misc 杂项签到 右键附件,从链接另存文件.然后用16进制编辑器或者你想用notepad也彳亍看文件尾,有一串base64,解码即可. ctfshow{we1come_to_mooncake_cap ...

  10. CTFSHOW新手杯MISC部分WriteUp

    引文 之前复现了CTFSHOW新人杯的WEB方向部分题目,今天就复现一下MISC为主的题目,可能有些读者不太明白MISC方向是什么意思,简单来说就是"杂项",包括:隐写,压缩包处理 ...

最新文章

  1. Hadoop集群搭建(七:MySQL的安装配置)
  2. 解析:一种合适的数据中心建造方式有多重要?
  3. 你是否真正理解了泛型、通配符、类型擦除
  4. 1 java基础增强
  5. 用 Webpack 解决应用性能问题
  6. Chrome插件-JSONView
  7. 判断平面内两直线平行c语言,总结平行线的判定课后测试题
  8. 软件体系结构复习指南
  9. 二十四节气之夏至养生篇
  10. Uvalive 5713 - Qin Shi Huang's National Road System(枚举+最小瓶颈路)
  11. 简谈:java种关于BigDecimal的坑
  12. html背景视频如何自动播放,使用视频作为网页背景的技术探讨
  13. 《北京爱情故事》:四个女人的爱情
  14. R语言 画图坐标文字旋转方向
  15. java swing实现简单KFC点餐系统
  16. 【算法题】求一个字符串的最长不重复子串
  17. 最好用的格式转换器!
  18. 我们计划招收300名数据人,免费攻读R语言数据分析
  19. 机器学习笔记之指数族分布——最大熵原理与softmax激活函数的关系
  20. IDC、CDN、云服务商如何进行IPv6改造升级?

热门文章

  1. 我的20132014
  2. [Leetcode][第130题][JAVA][被围绕的区域][DFS][BFS]
  3. git连接jenkins_开普勒云平台:如何配置gitlab与Jenkins
  4. mysql low_case_MySQL8.0的坑之lower_case_table_names
  5. 1026 程序运行时间 (15 分)
  6. ff14拆区后哪个服务器人最多,FF14拆区可以转服吗 拆区期间转服教程
  7. spring security:第一个程序解析
  8. apache httpd mysql_Centos7安装配置Apache(httpd)+php+mysql+phpMyAdmin
  9. bootice 此功能仅在uefi环境下可用_电脑新手必掌握基础知识:BIOS、EFI与UEFI详解!...
  10. 从此明白了卷积神经网络(CNN)