逆向做题记录

特殊的base64

这道题故名思意 ,肯定是base64改变字母表,顺便复习下之前写过的脚本

首先打开ida先找改变后的字母表,找到后再找到密文就可以得到flag了。

屏幕截图 2022-01-21 151916 屏幕截图 2022-01-21 151830

re4-unvm-me

为什么开始做攻防世界的题了,因为buu后面的题有亿点点难。这道题时py反编译,用在线网站python反编译 - 在线工具 (tool.lu)可以快速得到源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/env python
# visit http://tool.lu/pyc/ for more information
import md5
md5s = [
0x831DAA3C843BA8B087C895F0ED305CE7L,
0x6722F7A07246C6AF20662B855846C2C8L,
0x5F04850FEC81A27AB5FC98BEFA4EB40CL,
0xECF8DCAC7503E63A6A3667C5FB94F610L,
0xC0FD15AE2C3931BC1E140523AE934722L,
0x569F606FD6DA5D612F10CFB95C0BDE6DL,
0x68CB5A1CF54C078BF0E7E89584C1A4EL,
0xC11E2CD82D1F9FBD7E4D6EE9581FF3BDL,
0x1DF4C637D625313720F45706A48FF20FL,
0x3122EF3A001AAECDB8DD9D843C029E06L,
0xADB778A0F729293E7E0B19B96A4C5A61L,
0x938C747C6A051B3E163EB802A325148EL,
0x38543C5E820DD9403B57BEFF6020596DL]
print 'Can you turn me back to python ? ...'
flag = raw_input('well as you wish.. what is the flag: ')
if len(flag) > 69:
print 'nice try'
exit()
if len(flag) % 5 != 0:
print 'nice try'
exit()
for i in range(0, len(flag), 5):
s = flag[i:i + 5]
if int('0x' + md5.new(s).hexdigest(), 16) != md5s[i / 5]:
print 'nice try'
exit()
continue
print 'Congratz now you have the flag'

flag的长度小于69且是五的倍数,然后flag每五个一组和上面给的MD5进行对比,所以只要把上面的MD5全部拼在一起就可以得到flag

flag:ALEXCTF{dv5d4s2vj8nk43s8d8l6m1n5l67ds9v41n52nv37j481h3d28n4b6v3k}

流浪者

屏幕截图 2022-01-23 142623
屏幕截图 2022-01-23 142614

题目先给出了str1,然后让str1的每个元素和字母表进行对比,反着来可以得到a1(v5),v5(在原函数中也是进行了变化,因此可以将v5逆回去得到flag

屏幕截图 2022-01-23 142523

flag:flag{j0rXI4bTeustBiIGHeCF70DDM}

actf universe_final_ans

打开ida发现有一个条件函数和一个比较函数,说明程序关键在这两个函数

屏幕截图 2022-01-13 165706

打开第一个函数发现是方程组,用这库写完后得到前一半flag

屏幕截图 2022-01-13 165807
屏幕截图 2022-01-13 165432
屏幕截图 2022-01-13 165442

第二个函数我死活分析不出来,卡住了。后来实在没办法就去参考了下题解,发现大家都没分析出来第二个函数,都是采用运行elf文件得到第二个部分。给了我启示,不要死磕在解出函数,如果程序有两个函数,可以尝试下将第一个部分的flag带入,说不定就能得到第二部分flag

buuctf 刮开有奖

用ida打开后发现是windows程序,同时看了下字符串,出现了ABCD.....789这类字符串,怀疑有base64加密,只调用了DialogBoxParamA这个api,打开dialogfunc函数后发现了主程序

对4010F0函数进行封装后的得到v7变化后的值

屏幕截图 2022-01-15 151601

点开v4v5调用的sub_401000发现调用了BCD....789这个字符串,肯定了用base64加密,base64解密后,将每个字符串对应string下标后得到flag: flag{UJWP1jMp}

wusctf2020 level1

用ida打开程序后发现主函数特别简单就是进行了移位和相乘,并且用fclose fopen fprintf将得到的数据存入了flag.txt文件中,只要将flag.txt文件中的数据提取出来,并且进行反移位后就可以得到flag

屏幕截图 2022-01-15 154722.png
屏幕截图 2022-01-15 154732.png

flag为flag{d9-dE6-20c}

[MRCTF2020]Transform

首先用ida打开找到主函数后跟进分析

屏幕截图 2022-01-15 162805

这里要注意一点:存储flag的str字符串在进行异或时是str[dword_40f040]所以会先把str打乱

发现主函数进行了异或操作,于是找到数据

屏幕截图 2022-01-15 162818

用shift+e提出数据后写脚本得到答案即可

屏幕截图 2022-01-15 163413

flag为flag{Tr4nsp0sltiON_Clph3r_1s_3z}

FlareOn4 login

第一次做java类的题目,挺简单的但还是记录一下,用vscode打开html文件后得到

屏幕截图 2022-01-15 163809

可知用了rot13加密,解密后就可以得到flag:flag{ClientSideLoginsAreEasy@flare-on.com}

FlareOn6 OverLong

首先看了下题目名字overlong和hint:

1
The secret of this next challenge is cleverly hidden. However, with the right approach, finding the solution will not take an <b>overlong</b> amount of time.

我猜测真正的数据应该是被隐藏了。

先用IDA打开程序,发现程序除了一个MessageBox api什么都没有

屏幕截图 2022-01-16 100728

于是逐个分析函数

屏幕截图 2022-01-16 101626 屏幕截图 2022-01-16 101638

发程序在401160函数执行了28次,同时402008处的数据给出了,但特别多超过了28个

屏幕截图 2022-01-16 101717

于是我开始分析,但没分析出来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

屏幕截图 2022-01-09 114941

观看反编译找到关键函数cmpstring,得知flag肯定和这个比较函数有关,跟进后就发现了flag:flag{hello_world_gogogo};

[WUSTCTF2020]level3

屏幕截图 2022-01-09 130825

看题目给出的提示发现这道题要用到base64加密,但又和普通的base64加密有所不同。于是继续查找函数。

找到这个可疑的函数,后发现了base64字母表的变换规律:

屏幕截图 2022-01-09 130833
屏幕截图 2022-01-09 115825

但是因为不会写变异后的base64解密脚本,于是查看了题解,按着题解的脚本写了一遍后得到了flag:

屏幕截图 2022-01-09 115900

flag{Base64_is_the_start_of_reverse}

[WUSTCTF2020]Cr0ssfun

这题比较常规,反编译后发现了主函数中的关键函数check(),点进去后发现他给出了a1数组的每个下标的字母,将每个字母提取出来后,输出就可以得到flag:

屏幕截图 2022-01-09 130041
屏幕截图 2022-01-09 130050
屏幕截图 2022-01-09 130059
屏幕截图 2022-01-09 130106
屏幕截图 2022-01-09 130113
屏幕截图 2022-01-09 130027

得到flag: wctf2020{cpp@nd_r3verse@re_fu} 修改为 flag{cpp@nd_r3verse@re_fu}

[FlareOn3]Challenge1

屏幕截图 2022-01-09 131624
屏幕截图 2022-01-09 131700
20210203123555487
20210203123510173

我一个一个改str1后再base64得到了flag

flag{sh00ting_phish_in_a_barrel@flare-on.com}

后来看了题解按着题解的步骤,抄了下代码:

[ACTF新生赛2020]Oruga

首先找关键函数,发现是迷宫题:

屏幕截图 2022-01-09 133709

于是开始找迷宫,发现以下汇编语言,找到迷宫:

屏幕截图 2022-01-09 133724

输出迷宫:

屏幕截图 2022-01-09 134115

手打得到flag:flag{MEWEMEWJMEWJM}


逆向做题记录
http://www.ooorz.site/2022/01/24/逆向做题记录/
作者
Lin Xinjie
发布于
2022年1月24日
更新于
2024年3月31日
许可协议