REVERSE-PRACTICE-BUUCTF-8

  • [GUET-CTF2019]re
  • 相册
  • [V&N2020 公开赛]strangeCpp
  • [BJDCTF2020]easy

[GUET-CTF2019]re

elf文件,有upx壳,脱壳后ida分析
字符串交叉引用来到主逻辑函数sub_400E28
逻辑清晰,获取输入,验证输入,重要的是sub_4009AE函数

进入sub_4009AE函数,是对输入每个字符的验证,输入长度为32,这里没有验证input[6]

写脚本,由于程序没有验证input[6],即“#”位置的字符,试出来为“1”时提交成功

相册

apk文件,用jadx-gui没发现主逻辑
用Apktool Box反编译apk,xiangce1->lib->armeabi->libcore.so
ida分析该so文件
shift+F12,在字符串窗口的最下面发现三段可疑字符串,很像base64

解这三段字符串,由题目的提示可知,flag的内容为完整的邮箱

[V&N2020 公开赛]strangeCpp

exe程序,运行后输出了本机系统相关的信息,按任意键结束,无壳,ida分析
在字符串窗口找到一些字符串,提示真正的flag需要找找

字符串交叉引用来到sub_140013AA0函数,该函数就是获取了本机系统信息然后打印,乍一看没什么特殊的地方

__int64 __fastcall sub_140013AA0(__int64 a1, __int64 a2, __int64 *a3)
{char *v3; // rdisigned __int64 i; // rcx__int64 v5; // rax__int64 v6; // rax__int64 v7; // rax__int64 v8; // raxchar v10; // [rsp+0h] [rbp-20h]struct _SYSTEM_INFO SystemInfo; // [rsp+28h] [rbp+8h]__int64 *j; // [rsp+78h] [rbp+58h]__int64 v13; // [rsp+98h] [rbp+78h]__int64 *v14; // [rsp+1A0h] [rbp+180h]v14 = a3;v3 = &v10;for ( i = 94i64; i; --i ){*(_DWORD *)v3 = -858993460;v3 += 4;}sub_1400110AA(&unk_140027033);GetSystemInfo(&SystemInfo);putchar(byte_140021004);putchar(byte_140021005);putchar(byte_140021006);putchar(byte_140021007);putchar(byte_140021019);putchar(byte_14002101A);putchar(byte_140021005);putchar(10);puts("Let me have a look at your computer...");for ( j = v14; *j; ++j ){v13 = *j;sub_140011226("%s\n", v13);}std::basic_ostream<char,std::char_traits<char>>::operator<<(std::cout, sub_140011127);dword_140021190 = SystemInfo.dwNumberOfProcessors;sub_140011226("now system cpu num is %d\n", SystemInfo.dwNumberOfProcessors);if ( dword_140021190 < 8 ){puts("Are you in VM?");_exit(0);}if ( GetUserNameA(Str1, &pcbBuffer) ){v5 = sub_140011172(std::cout, "this is useful");std::basic_ostream<char,std::char_traits<char>>::operator<<(v5, sub_140011127);}v6 = std::basic_ostream<char,std::char_traits<char>>::operator<<(std::cout, sub_140011127);v7 = sub_140011172(v6, "ok,I am checking...");std::basic_ostream<char,std::char_traits<char>>::operator<<(v7, sub_140011127);if ( !j_strcmp(Str1, "cxx") ){v8 = sub_140011172(std::cout, "flag{where_is_my_true_flag?}");std::basic_ostream<char,std::char_traits<char>>::operator<<(v8, sub_140011127);_exit(0);}system("pause");sub_1400113E3(&v10, &unk_14001DE50);return 0i64;
}

仔细观察发现,在sub_140013AA0函数开始的部分,几个putchar的参数的存储地址并不连续

进入到data段,在“welc”和“om”之间有一个在sub_140013AA0函数中没有用到的数组

交叉引用这个数组来到sub_140013580函数,分析知道,有一个arg和这个数组的元素依次异或后输出,重要的是求出这个arg

arg首先作为参数传入了sub_140011384函数,返回结果存储在result中,下面的if语句对result和arg都有要求,进入sub_140011384函数,可知resul可由arg求出

写脚本即可得到flag

#include<stdio.h>
void main()
{unsigned char arr[] = { 0x26, 0x2C, 0x21, 0x27, 0x3B, 0x0D, 0x04, 0x75, 0x68, 0x34,0x28, 0x25, 0x0E, 0x35, 0x2D, 0x69, 0x3D };__int64 result = 607052314;int arg = 0;while (arg <= 14549743){int v5 = arg >> 12;int v6 = arg << 8;if (result ==(v6^v5)*291){printf("%d——", arg);for (int i = 0; i < 17; i++){printf("%c", arr[i] ^ arg);}printf("\n");}arg += 1;}return;
}

运行结果

[BJDCTF2020]easy

exe程序,运行后提示要找flag,无壳,ida分析
main函数没什么特殊的地方

在函数窗main函数的上面有一个ques函数,ques函数没有要求输入,但是有输出打印

想要看看ques函数打印了什么东西,要调试这个exe程序,在main函数return前下断点

程序停下后,去到ques函数的第一条指令处,设置为当前IP

在ques函数return前下断点,F9执行完ques函数,打印的内容即为flag

REVERSE-PRACTICE-BUUCTF-8相关推荐

  1. BUUCTF Reverse/findKey

    BUUCTF Reverse/findKey 先看文件信息:32位程序,没有加壳 打开看看,标题为find flag,也没啥有用的信息 IDA32位打开,找到start函数,看到有个main,跟随跳转 ...

  2. BUUCTF Reverse helloword、findit

    BUUCTF Reverse helloword.findit helloword findit 一天一道CTF题目,能多不能少 记录一下这两道题,这两道题是安卓逆向的题目~ 第一次接触安卓逆向的题目 ...

  3. BUUCTF Reverse/Ultimate Minesweeper

    BUUCTF Reverse/Ultimate Minesweeper 先看文件信息,没有加壳,且为net编写的程序 运行是一个扫雷游戏,只要点错一个就会自动退出(左上角显示的是雷的数目,一共有897 ...

  4. BUUCTF Reverse xor

    题目:BUUCTF Reverse xor 一些犯傻后学到了新东西的记录 查壳,没壳,IDA打开 main函数很好理解,输入一个长度为33的字符串,1-32位与前一位异或后与global相等,则判定f ...

  5. BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker

    BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker 先看下文件信息,没有加壳,32位程序 运行一下,又是一道字符串比较的题目 用IDA32位打开,分析一下 // positive ...

  6. BUUCTF Reverse/[GWCTF 2019]pyre

    BUUCTF Reverse/[GWCTF 2019]pyre 下载得到一个pyc文件,用这个在线反编译pyc,pyo反汇编出代码 print 'Welcome to Re World!' print ...

  7. BUUCTF reverse题解汇总

    本文是BUUCTF平台reverse题解的汇总 题解均来自本人博客 目录 Page1 Page2 Page3 Page4 Page1 easyre reverse1 reverse2 内涵的软件 新年 ...

  8. BUUCTF Reverse(helloworld)

    BUUCTF Reverse(helloworld) 题目附件下载下来之后,是.apk后缀,所以可能是安卓逆向. 这里我用的工具是Android Killer,下载地址:https://xiazai. ...

  9. BUUCTF Reverse/[WUSTCTF2020]Cr0ssfun

    BUUCTF Reverse/[WUSTCTF2020]Cr0ssfun 先看文件信息, IDA64位打开,很简单的题目,只要一个个输入就行 都是返回的这种元素 _BOOL8 __fastcall i ...

  10. [BUUCTF]Reverse——[网鼎杯 2020 青龙组]jocker

    网上大部分是动调,我尝试IDC解一下, 无壳,32位,放入IDApro,查看main函数 查看wrong和str函数,借出假的flag a=[0x66,0x6B,0x63,0x64,0x7F,0x61 ...

最新文章

  1. 2022-2028年中国音像制品行业投资分析及前景预测报告
  2. python软件安装步骤-初学者python详细安装步骤_编程工具
  3. 大工13秋《专业英语(计算机英语)》在线测试2,大工13秋《专业英语(计算机英语)》在线测试2答案...
  4. 使用supervisor启动hbase
  5. 论MOS管开关对电源的影响
  6. 计算机打字比赛活动策划书怎么写,打字比赛策划书范文.docx
  7. 关于jedis2.4以上版本的连接池配置,及工具类
  8. linux找出重复数字,C语言笔试经典-查找多位数重复数字以及次数
  9. php 实现错字检查,PHP每日一练:编写写字符串检查函数
  10. 实操调试成功 基于NI-VISA的USBTMC接口程控仪器连接
  11. dede后台登陆提示 验证码不正确 解决办法
  12. 在PS中,1PX等于多少毫米?
  13. php strtok函数,strtok函数的使用示例
  14. Visual Assist X 10.9 builds 2333 with patch.7z
  15. 陈启峰 Size Balanced Tree
  16. hacks cheats injection
  17. 华为鸿蒙麒麟玉兔_华为!《鸿蒙出世:中国神兽图鉴》
  18. 视频加密播放 blob java
  19. CDN源站数据同步优化总结
  20. 如何选择免费CRM软件?有什么功能?

热门文章

  1. ubuntu下软件中心闪退问题解决
  2. asp.net 根据当前时间计算是否股票、期货、黄金交易日期
  3. 关于Java中的HashMap
  4. cocos 禁掉快速点击_win10系统快速运行debug程序的技巧
  5. shell变量里的字符替换
  6. 站怎么点都是一样_老鼠被卡在轮胎里,像是被点了穴道一样:这可怎么办才好?...
  7. 四阶混合累积量matlab_12m氢燃料电池城市客车电电混合动力系统设计方案
  8. python实现多人聊天udp_python—多任务版udp聊天机器人
  9. 计算机网络项目实训教程课后答案,计算机网络项目实训教程
  10. node python复用代码_python-代码复用(函数、lambda、递归、PyInstaller库)