寒假作业
记录一下寒假做的题
以后看看可能还会有新的收获
ADWorld
1.Hello, CTF
拖入IDA得到
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
其中:
aS即”%s”
asc_408044即”%x”
且输入的字符串长度不超过17
do—while循环中,把输入的v9转化为16进制,最后与v13比较,若相等则成功
故将”437261636b4d654a757374466f7246756e”转为字符串则为flag
flag为:CrackMeJustForFun
2.Getit
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
其中:
1 | .data:00000000006010A0 ; char s[] |
s是’c61b68366edeb7bdce3c6820314b7498’ 长度为32
本来以为t是’harifCTF{????????????????????????????????}’,后来发现这样的话+10取到的就不对了,才发现上面还有个53h,试试看0x53转字符变成S,发现对了,所以t是’SharifCTF{????????????????????????????????}’ ?个数也是32
查到LOWORD是取低4位,后面又取signed int, 那是不是基本上就是int v5=0……
所以截取中间生成flag的片段
1 |
|
flag为:SharifCTF{b70c59275fcfa8aebf2d5911223c6589}
3.insanity
拖进IDA
看常量的值,发现flag
flag为:9447{This_is_a_flag}
4.simple-unpack
题目说了加壳,拖到Exeinfo PE里,得到
Detected UPX! packer - http://upx.sf.net -> try unpack with “upx.exe -d” from http://upx.sf.net
然后upx unpacker脱不了??大概又是文件问题
notepad打开,搜,找到
flag为:flag{Upx_1s_n0t_a_d3liv3r_c0mp4ny}
5.py-trade
用在线工具反编译pyc文件
得到
1 | #!/usr/bin/env python |
先把correct用base64解密
1 | import base64 |
得到em为b’^SdVkT#S ]`Y\!^)\x8f\x80ism’,查到b是byte的意思,去掉再逆向操作
1 | em='^SdVkT#S ]`Y\\!^)\x8f\x80ism' |
flag为:nctf{d3c0mpil1n9_PyC}
6.logmein
拖入IDA得到
1 | void __fastcall __noreturn main(__int64 a1, char **a2, char **a3) |
截取生成flag片段运行
1 |
|
flag为:RC3-2016-XORISGUD
7.no-string-attached
查壳,没壳,ELF。拖入IDA,找到真正的程序和存flag的s2
1 | void authenticate() |
s2由decrypt生成,但参数很繁琐,本来想用gdb调,搞了半天一直出错,请教了fdgg,原来是文件问题……
那就只能硬逆了
1 | wchar_t *__cdecl decrypt(wchar_t *s, wchar_t *a2) |
到Hex-View1页面读取参数的值
1 | a=[1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5] |
写脚本,逆一下
1 | a=[1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5] |
flag为:9447{you_are_an_international_mystery}
BugKu
8.Easy_vb
拖入IDA,发现MCTF{N3t_Rev_1s_E4ay}
但是不符合格式,改一下格式,得到flag
flag为:flag{N3t_Rev_1s_E4ay}
9.逆向入门
拖入Exeinfo PE发现不是pe或elf文件
用notepad打开,发现文件头为
1 | data:image/png;base64,…… |
复制到浏览器打开得到二维码,扫描得到flag
flag为: bugku{inde_9882ihsd8-0}
10.love
拖入Exeinfo PE,没壳,拖入IDA
找到真正的主函数
1 | __int64 __usercall main_0@<edx:eax>(int a1@<ebx>, int a2@<edi>, int a3@<esi>) |
对正确的flag进行操作后会得到Str2:‘e3nifIH9b_C@n@dH’
同时在常量的地方看到
.text:004158B8 dd offset aBase64input ; “base64input”
很长的的那个sub_4110BE()应该就是base64加密。所以对flag进行的操作是加密后+j,逆向一下
1 | import base64 |
flag为:flag{i_l0ve_you}
11.Easy_Re
在常量中找到flag,逆向输出
flag为:DUTCTF{We1c0met0DUTCTF}
12.不好用的CE
查壳,没壳32位,拖入IDA,F5……没用。虽然题目叫CE但是不会用只好用OD试试看……
拖入OD,查中文字符串,看到嫌疑人
DeZmqMUhRcP8NgJgzLPdXa
看着像base64,结果不是。百度发现是base58
flag为: flag{c1icktimes}
13.linux
解压,notepad打开,搜索’{‘得到flag
flag为:key{feb81d3834e2423c9903f4755464060b}
14.Mountain climbing
运行之和根据提示,是要得出能获得最高分数的输入
查壳,upx壳,脱壳。拖入IDA
1 | __int64 __cdecl main_0() |
因为srand()的参数是定值,所以随机出来的随机数是固定的
输入的key存在Str里,长度为19
进入函数内部,看到对Str进行的操作为
1 | BOOL __cdecl sub_411750(LPCVOID lpAddress, int a2, int a3) |
其中a3=4,也就是逐个字符和4进行异或运算
结合main函数,输入只有chr(76)chr(80)和能够和4异或生成这两个的才是有效的,即L R H V
写代码
1 |
|
得到最高分的输入为:RVRVRHLVRVLVLVRVLVL
flag为: zsctf{RVRVRHLVRVLVLVRVLVL}
15.进制转换
1 | d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65 x20 b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 o151 x66 d116 b101110 b100000 d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001 d54 b110011 x39 o64 o144 o145 d53 x61 b1100010 b1100011 o60 d48 o65 b1100001 x63 b110110 d101 o63 b111001 d97 d51 o70 d55 b1100010 d125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103 d111 d111 x64 d32 o164 b1101001 x6d o145 x7e |
d-10进制 x-16进制 o-8进制
编写脚本
1 | str="d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65 x20 b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 o151 x66 d116 b101110 b100000 d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001 d54 b110011 x39 o64 o144 o145 d53 x61 b1100010 b1100011 o60 d48 o65 b1100001 x63 b110110 d101 o63 b111001 d97 d51 o70 d55 b1100010 d125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103 d111 d111 x64 d32 o164 b1101001 x6d o145 x7e" |
得到:Welcome to kelaibei. Give you a flag as a gift. flag{1e4bf81a6394de5abc005ac6e39a387b} . Have a good time~
flag为:flag{1e4bf81a6394de5abc005ac6e39a387b}