逆向做题记录
特殊的base64
这道题故名思意 ,肯定是base64改变字母表,顺便复习下之前写过的脚本
首先打开ida先找改变后的字母表,找到后再找到密文就可以得到flag了。
re4-unvm-me
为什么开始做攻防世界的题了,因为buu后面的题有亿点点难。这道题时py反编译,用在线网站python反编译 - 在线工具 (tool.lu)可以快速得到源码
1 |
|
flag的长度小于69且是五的倍数,然后flag每五个一组和上面给的MD5进行对比,所以只要把上面的MD5全部拼在一起就可以得到flag
flag:ALEXCTF{dv5d4s2vj8nk43s8d8l6m1n5l67ds9v41n52nv37j481h3d28n4b6v3k}
流浪者
题目先给出了str1,然后让str1的每个元素和字母表进行对比,反着来可以得到a1(v5),v5(在原函数中也是进行了变化,因此可以将v5逆回去得到flag
flag:flag{j0rXI4bTeustBiIGHeCF70DDM}
actf universe_final_ans
打开ida发现有一个条件函数和一个比较函数,说明程序关键在这两个函数
打开第一个函数发现是方程组,用这库写完后得到前一半flag
第二个函数我死活分析不出来,卡住了。后来实在没办法就去参考了下题解,发现大家都没分析出来第二个函数,都是采用运行elf文件得到第二个部分。给了我启示,不要死磕在解出函数,如果程序有两个函数,可以尝试下将第一个部分的flag带入,说不定就能得到第二部分flag
buuctf 刮开有奖
用ida打开后发现是windows程序,同时看了下字符串,出现了ABCD.....789这类字符串,怀疑有base64加密,只调用了DialogBoxParamA这个api,打开dialogfunc函数后发现了主程序
对4010F0函数进行封装后的得到v7变化后的值
点开v4v5调用的sub_401000发现调用了BCD....789这个字符串,肯定了用base64加密,base64解密后,将每个字符串对应string下标后得到flag: flag{UJWP1jMp}
wusctf2020 level1
用ida打开程序后发现主函数特别简单就是进行了移位和相乘,并且用fclose fopen fprintf将得到的数据存入了flag.txt文件中,只要将flag.txt文件中的数据提取出来,并且进行反移位后就可以得到flag
flag为flag{d9-dE6-20c}
[MRCTF2020]Transform
首先用ida打开找到主函数后跟进分析
这里要注意一点:存储flag的str字符串在进行异或时是str[dword_40f040]所以会先把str打乱
发现主函数进行了异或操作,于是找到数据
用shift+e提出数据后写脚本得到答案即可
flag为flag{Tr4nsp0sltiON_Clph3r_1s_3z}
FlareOn4 login
第一次做java类的题目,挺简单的但还是记录一下,用vscode打开html文件后得到
可知用了rot13加密,解密后就可以得到flag:flag{ClientSideLoginsAreEasy@flare-on.com}
FlareOn6 OverLong
首先看了下题目名字overlong和hint:
1 |
|
我猜测真正的数据应该是被隐藏了。
先用IDA打开程序,发现程序除了一个MessageBox api什么都没有
于是逐个分析函数
发程序在401160函数执行了28次,同时402008处的数据给出了,但特别多超过了28个
于是我开始分析,但没分析出来QAQ,看了题解后得知要使用动态调试。于是又开始跟着题解用OD开始解题,
先是F9运行了下程序,发现窗口出现的英文字母的总和正好是0x1c,于是开始寻找含有0x1c的指令,并将其数值改大,就可以出现flag:flag{I_a_M_t_h_e_e_n_C_o_D_i_n_g@flare_on.com}
动态调试我刚刚接触,做的比较少,我对于使用题目要使用动态调试的情况的理解:第一个就是程序基本没有字符串或者没有给出明显的提示;二是程序本身比较复杂或者给出的数值很大很多,需要一个一个的动态给出。
这是我目前的理解,以后可能做多了会有更多的理解。
[MRCTF2020]hello_world_go
观看反编译找到关键函数cmpstring,得知flag肯定和这个比较函数有关,跟进后就发现了flag:flag{hello_world_gogogo};
[WUSTCTF2020]level3
看题目给出的提示发现这道题要用到base64加密,但又和普通的base64加密有所不同。于是继续查找函数。
找到这个可疑的函数,后发现了base64字母表的变换规律:
但是因为不会写变异后的base64解密脚本,于是查看了题解,按着题解的脚本写了一遍后得到了flag:
flag{Base64_is_the_start_of_reverse}
[WUSTCTF2020]Cr0ssfun
这题比较常规,反编译后发现了主函数中的关键函数check(),点进去后发现他给出了a1数组的每个下标的字母,将每个字母提取出来后,输出就可以得到flag:
得到flag: wctf2020{cpp@nd_r3verse@re_fu} 修改为 flag{cpp@nd_r3verse@re_fu}
[FlareOn3]Challenge1
我一个一个改str1后再base64得到了flag
flag{sh00ting_phish_in_a_barrel@flare-on.com}
后来看了题解按着题解的步骤,抄了下代码:
[ACTF新生赛2020]Oruga
首先找关键函数,发现是迷宫题:
于是开始找迷宫,发现以下汇编语言,找到迷宫:
输出迷宫:
手打得到flag:flag{MEWEMEWJMEWJM}