[BUUCTF]REVERSE——[HDCTF2019]Maze】的更多相关文章

[HDCTF2019]Maze 附件 步骤: 例行检查,32位程序,upx壳 upx脱壳儿后扔进32位ida,首先检索程序里的字符串 有类似迷宫的字符串,下面也有有关flag的提示字符串,但是没法进行交叉引用跳转 查看main函数,没法f5,看汇编,下方有个奇怪的jnz指令,它跳转到了下一行,相当于没跳 它call了一个奇怪的地址,ida没法分析出来,百度后得知这个叫花指令,nop掉 之后就是这个call指令,不能全部nop,因为后面那个东西可能是有效代码(我先全部nop掉了没法f5).按d将其…
[ACTF新生赛2020]Oruga 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索字符串,根据提示来到关键函数 14行~18行就是让字符串的前5位是 actf{ ,sub_78A()是关键函数,分析可知应该是迷宫 byte_201020(推荐在16进制界面查看),查看迷宫图形 这个移动方法有点意思,从左上角去往!,点代表路,其他符号是障碍物,点的时候会一直走,遇到障碍物才会停下,手动走一下 flag{MEWEMEWJMEWJM}…
firmware 附件 步骤: 检查文件没有看出什么,ida载入一堆乱码,看了其他师傅的wp才知道要先binwalk对文件进行提取 120200.squashfs这是一个linux的压缩文件 我们需要firmware-mod-kit工具来进行解压. firmware-mod-kit工具:传送门 安装步骤: sudo yum install git build-essential zlib1g-dev liblzma-dev python-magic git clone https://githu…
[WUSTCTF2020]Cr0ssfun 附件 步骤: 例行检查,无壳儿,64位程序,直接ida载入,检索程序里的字符串,根据提示跳转 看一下check()函数 内嵌了几个检查的函数,简单粗暴,整理一下字符串,就是flag flag{cpp_@nd_r3verse_@re_fun}…
[FlareOn6]Overlong 附件 步骤: 例行检查,32位程序,不懂是个啥 32位ida载入,main函数很简单 处理函数 sub_401000 程序只对unk_402008的28位进行了处理,但是我看unk_402008并不止28位,实际长度是0xaf(0xb7-0x8) 运行了一下附件,发现弹框里的数据长度也是28,结尾是:,让人总觉得后面还有东西 将长度修改一下,让他将unk_402008完全处理一下看看,ida修改了不会保存,od动调修改需要将0x1c压入栈中,在栈中修改,我一…
[WUSTCTF2020]level3 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,找到关键函数 看样子是个base64加密,但又感觉没那么简单,再翻翻左边的函数,找到了base64加密变表的函数 将加密表变换一下写个解密exp import base64 table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' model = list("ABCDEFGHIJKLMNOPQRSTUVW…
[MRCTF2020]hello_world_go 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索程序里的字符串,有很多,直接检索flag 一个一个点过去,找到了flag 按a,提取字符串 flag{hello_world_gogogo}…
[GKCTF2020]BabyDriver 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索程序里的字符串,看到提示flag是md5(input),下方还看到了类似迷宫的字符串 找到关键函数 从o出发到#结束,碰到*失败,只能走'.',但是这个上下左右md5加密出来的东西不对 看了别人的wp才知道这里由于是sys文件,是由键盘过滤驱动获取键盘扫描码来控制上下左右,而不是ascll码 所以刚刚的上下左右对应的是IKJL 画出迷宫,走一下顺序是LKKKLLKLKKKLLLKKKLLL…
[MRCTF2020]Xor 附件 步骤: 例行检查,32位程序,无壳 32位ida载入,首先检索程序里的字符串,根据字符串的提示,跳转到程序的关键函数 根据flag,跳转到sub_401090函数 可以看到v0和byte_4212c0按位异或,最后得到byte_41EA08就会输出right 看一下byte_41EA08的值 直接写个异或的exp看一下byte_4212c0里的值 a="MSAWB~FXZ:J:`tQJ\"N@ bpdd}8g" s=""…
[FlareOn4]IgniteMe 附件 步骤: 例行检查,32位程序,无壳 32位ida载入 当满足第10行的if条件时,输出G00d j0b!提示我们成功,看一下sub_401050函数 3.sub_401050函数 byte_403180经过10~14行的操作后的值与byte_403000数组相同 v4的值,不大懂这个的结果是什么,动调后看到是0x4 v4返回的是一个定值,动态调试就能出来,v0就是接收函数的整的花里胡哨. 理一下,程序对我们输入的字符串,最后一个字符xor 0x4,然后…
crackMe 附件 步骤: 例行检查,32位程序,无壳 32位ida载入,已知用户名welcomebeijing,解密码,直接看main函数 可以看到程序是个死循环,只有满足sub_404830函数的条件,才能跳出循环 sub_404830函数里要让sub_404830函数返回1,必须要让v13=43924,v13经过了sub_401470的变换,先看sub_401470函数 _DWORD *__usercall sub_401470@<eax>(int a1@<ebx>, _B…
[WUSTCTF2020]level2 附件 步骤: 例行检查,32位程序,upx壳儿 脱完壳儿,扔进32位ida,习惯性的检索字符串,在我没找到什么关键信息,准备去看main函数的时候,将字符串拉到底,看到了一个眼熟的东西 wctf2020{Just_upx_-d}…
[BJDCTF2020]BJD hamburger competition 附件 步骤: 例行检查,64位程序,无壳儿 由于unity是用C++开发的,这里就不用IDA了,直接用dnspy看源码 在BJD hamburger competition_Data\Managed文件夹中找到Assembly-CSharp.dll(进去文件后第一个就是) 这个dll文件是程序的源码,用来存放C++工程. 试运行了一下程序,发现进去后我们可以点击一些"食材",在dnspy里找到有用的Button…
[WUSTCTF2020]level1 附件 步骤: 下载下来的附件有两个,output.txt里是一堆数字 64位ida打开第一个附件,检索字符串,发现了flag字样 双击跟进,ctrl+x交叉引用,找到了关键函数 程序很简单,一开始打开flag文件读出了flag文件里的内容,之后将里面的内容按照12行到18行的语句进行处理后输出. 附件里还有一个文件,output.txt,猜测就是输出后的内容,将里面的数据根据这个算法还原一下flag里的内容 exp a = [198,232,816,200…
[V&N2020 公开赛]CSRe 附件 步骤: 例行检查,无壳儿,但是有NET混淆,使用de4dot工具进行处理 之后用dnSpy打开,从入口点开始看程序 找到有关flag的信息 flag由str+text组成 str根据if (Class3.smethod_0("3" + str + "9") != "B498BFA2498E21325D1178417BEA459EB2CD28F8")可以推算出来 看一下Class3.smethod_…
[MRCTF2020]Transform 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,找到关键函数 一开始让我们输入一个长度为33位的字符串,之后使用数组dword_40F040打乱了我们一开始输入的v6的值,打乱后的结果在与dword_40F040异或之后得到byte_40F0E0数组里的值 理清楚程序干了什么直接写逆向算法 首先将dword_40F040和byte_40F0E0异或一下得到打乱后的输入的字符串 之后将打乱的字符串还原回去即可得到输入的字符串 dword_40F…
[GWCTF 2019]xxor 附件 步骤: 无壳,64位ida载入 程序很简单,首先让我们输入一个字符串,然后进行中间部分的操作,最后需要满足44行的if判断,看一下sub_400770函数 得到几个关系式 a1[2] - a1[3] = 2225223423 a1[3] + a1[4] = 4201428739 a1[2] - a1[4] = 1121399208 a1[0] = 3746099070 a1[5] = 550153460 a1[1] = 550153460 利用z3求解器求…
[ACTF新生赛2020]usualCrypt 附件 步骤: 例行检查,无壳,32位程序 32位ida载入,直接看main函数 逻辑很简单,一开始让我们输入一个字符串,然后该字符串经过sub_401080()函数加密,加密后得到byte_40E0E4里面的数据zMXHz3TIgnxLxJhFAdtZn2fFk3lYCrtPC2l9 看一下sub_401080函数 头部有一个sub_401000函数,中间看运算特征码可以判断是base64加密,尾部一个sub_401030函数 先从sub_4010…
[BJDCTF2020]easy 附件 例行检查,无壳,32位程序 32位ida载入,main函数和字符串理都没有找到有关flag的提示 根据main函数的提示,有关flag的函数应该被藏起来了,在左边的函数列表里一个一个查看,看到quess的函数长得有的像 给了10个数据,每两个数据进行一次变换,变换后长度为50,之后应该是对处理好后的数据进行按位判断,是1输出'*',否则输出' 空格 ',估计对处理后的数据转换成了2进制 32行到46行的处理数据里有些函数看不大懂,百度后发现是宏定义 所以我…
[V&N2020 公开赛]strangeCpp 附加 步骤 查壳,无壳,64位程序 64位ida载入,没有main函数,根据程序里的字符串,去查看函数 __int64 __fastcall sub_140013AA0(__int64 a1, __int64 a2, __int64 *a3) { char *v3; // rdi signed __int64 i; // rcx __int64 v5; // rax __int64 v6; // rax __int64 v7; // rax __i…
[GUET-CTF2019]re 附件 步骤: 查壳儿,upx壳,64位程序 upx脱壳儿,然后扔进64位ida,通过检索字符串,找到有关flag的信息定位到关键函数 让我们输入flag,然后满足sub_4009AE函数提示correct! 看一下sub_4009AE函数 对我门输入的flag字符串每一位*一个数据,然后进行了判断,除一下就可以算出flag的每一位 exp: a1 = chr(166163712 // 1629056) a2 = chr(731332800 // 6771600)…
[FlareOn4]login 附件 步骤: 是个网页,直接打开,查看网页源码 百度了几个函数 charCodeAt(0)是返回当前字符的Unicode 编码 String.fromCharCode返回Unicode对应的字符串 然后顺便了解到var rotFlag = flag.replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCo…
[ACTF新生赛2020]rome 附件 步骤 无壳,32位程序 32位ida载入,根据提示字符串"You are correct!",找到关键函数func v15 = 'Q'; v16 = 's'; v17 = 'w'; v18 = '3'; v19 = 's'; v20 = 'j'; v21 = '_'; v22 = 'l'; v23 = 'z'; v24 = '4'; v25 = '_'; v26 = 'U'; v27 = 'j'; v28 = 'w'; v29 = '@'; v…
[SUCTF2019]SignIn 附件 步骤: 无壳,64位ida载入 程序调用了 __gmpz_init_set_str 函数,这是一个 GNU 高精度算法库,在RSA加密中见过几次,加上65537这个比较铭感的数据,直接就确定了这是道RSA加密 关于RSA加密的原理可以看我之前的这篇文章 因此 C=ad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35 N=103461035900816914121390101299…
相册 附件 步骤: apk文件,习惯用apkide打开,看它反编译成了jar,就换jadx-gui打开,题目提示找邮箱,因此在导航栏里搜索mail 看到了sendMailByJavaMail(java里的实现邮件发送),跟进,右击点击查找 选择其中一个点击转到 右击MAILSERVER查看引用,发现是一个base64解密 之后没有找到什么敏感的信息,就去apkide里查看了一下libcore.so文件(C代码写的库文件,一般放在lib文件下.android是基于java的 但也可以调用c代码,s…
[ACTF新生赛2020]easyre 附件 步骤 查壳,32位程序,upx壳儿 脱完壳儿,扔进ida 分析 一开始给我们定义了一个数组, v4=[42,70,39,34,78,44,34,40,73, 63, 43, 64] 之后让我们输入一个字符串,根据43行的if判断可以知道我们输入的字符串的开头是ACT{},就是flag 根据48行的if判断可知.ACT{}括号里的值长度为12,v4=byte_402000[输入的数组的每一位值-1] 在ida里可以看到byte_402000数组的值 根…
Youngter-drive 附件 步骤: 例行查壳儿,32位程序,upx壳儿 利用网上找的upx脱壳儿工具脱完壳扔进ida,首先检索程序里的字符串,发现了有关flag的字样,跟进,当source=TOiZiZtOrYaToUwPnToBsOaOapsyS的时候才会输出flag 从main函数开始看程序 函数创建了两个进程,一个startaddress,一个sub_41119F 4. 先看startaddress 到sub_411940这里报错了 转汇编看一下,这边由于堆栈不平衡所以报错了 这边…
[GWCTF 2019]pyre 附件 步骤: 1.附件是pyc文件,用python打不开,百度后得知用python反编译工具打开,分享一个python反编译在线网站 反编译后是这段代码 #!/usr/bin/env python # visit http://tool.lu/pyc/ for more information print 'Welcome to Re World!' print 'Your input1 is your flag~' l = len(input1) #输入字符串…
[BJDCTF2020]JustRE 附件 步骤: 例行查壳儿,无壳儿,32位程序 32位ida载入,main函数没看懂,shift+f12检索了一下程序里的字符串,发现了一个类似于flag的字符串 双击跟进,找到关键函数 可以看到14行,输出了aBjdDD2069a4579,19999,0,aBjdDD2069a4579是BJD{%d%d2069a45792d233ac},19999和0填入到里面的%d位置,得到flag BJD{1999902069a45792d233ac}…
[2019红帽杯]easyRE 附件 步骤: ida载入,没有main函数,就先检索了程序里的字符串 发现了base64加密的特征字符串,双击you found me跟进,找到了调用它的函数,函数很长,我们分开看 首先我们输入的数据与它下表异或后等于数组a 数组a里的值,一开始ida分析出来是v17这种的参数,我改了一部分,太多了没有全部修改完,它这边定义了一个长度为36的数组,数值看图 先写个异或脚本,看一下我们输入的字符串是什么 a = [73,111,100,108,62,81,110,9…