W4ntY0u每日训练
Last Update:
5.3
xctf:流浪者
一道mfc的逆向,ida打开,利用字符串定位关键函数
定位到sub_4017F0函数:
1 |
|
主要逻辑就是一个置换加密,再交叉引用查看谁调用了他
1 |
|
可以看到对输入的字符进行了三次判断,如果不在该判断范围内,直接错误
那么逆向脚本如下:
1 |
|
re2-cpp-is-awesome
main函数:
1 |
|
前面的逻辑还算不少,但是关键是最后的比较,直接用了明文,所以前面就都不用管了,直接逆向最后的比较
先idc爬数据:
1 |
|
脚本:
1 |
|
5.4
whats-the-hell-500
题目直接给了源码了,vs打开:(真抽象)
1 |
|
这个是调用了一个cxx的库,稍微google一下,可以大概了解到那一坨抽象的东西是等于一个数的,要么继续学怎么计算,这个时候gpt-4就挺好用的了(3.5是傻子),得到12个的结果,然后直接爆破:
1 |
|
easyRE
main函数:
1 |
|
v15存输入的内容,第一段就是将输入异或下标后与已知的v12数组比较(ida分析错了,v12,v13,v14应该是一个数组,地址连在一起的)
脚本解密:
1 |
|
第二次输入,进行了10次base64加密,解密即可:
1 |
|
接下来又是两段异或,第一段可以通过已知的flag反向解出v5,第二段异或根据已知数组和v5异或解出flag
1 |
|
5.5
[CISCN 2022 东北]easycpp
今年的全国大学生信息安全竞赛快开了,做做往年的题
这个应该是一个签到
主程序逻辑非常简单,直接上脚本:
1 |
|
AnCTFxD^3CTF:d3sky
还是没看汇编的习惯,人家悄悄把密钥变了都没发现
首先是一个tls反调试,修改标志位跳过,接着就不能看f5的伪代码了,看汇编:
可以看到有try,except的代码,说明程序通过异常来控制执行流程,其中就有一个除零异常,但是按理来说动调时候应该是会触发的,但是没有(这里我还没有完全看明白,大概猜测还是与在调试的状态有关),那么先假设他触发了除零异常了,接下来就会跳转到loc_6310EF那里继续执行,在密钥后面又加上了一个字符串(这才是真正的密钥)。利用这个密钥初始化了s盒,解密opcode最后一部分,长度为74
接下来是一个虚拟机:
进入虚拟机,每次解密3个opcode,然后执行opcode,最后再加密回去
1 |
|
5.6
Reverse
主要逻辑:
1 |
|
关键函数sub_4014A0(v7, v5, v1),跟进:
1 |
|
其中sub_401460没有flag参与,直接仿写就行
抄的exp:
1 |
|
bad_python
是一个被修改的的pyc文件, 根据文件名得到编译环境为python3.6,所以先百度正确的文件头是 33 0d 0d 0a 0c 63 4a 63 61 02 00 e3 00 00 00 。修改好后就可以正常反编译了
1 |
|
简单的tea,逆写:
1 |
|
5.7
TEA
魔改的xtea加密:
1 |
|
其中do{}内的是tea加密的算法,外层套了个for()循环,因为原文有10个整数
解密脚本:
1 |
|
xxxorrr
main函数:
1 |
|
输入的s1与s1的元素进行异或,点击sub_916函数找s1
1 |
|
exp:
1 |
|
5.8
ISCC Convert
今天做了两道ISCC的题目,这个比赛还没结束,不可以写wp捏。贴张截图
testre
主要逻辑:
1 |
|
可以看到最后是s跟D9cS9N9iHjMLTdA8YSMRMp
作比较
而s来自于v11
分析一下可能得到是base58编码,解码即可:base58_is_boring
5.9
ISCC Pull the Wool Over People’s Eyes
比赛还是没结束捏,不能写wp
[CISCN 2022 东北]hana
upx壳,使用工具脱掉,幸好我有两个脱壳工具,只有一个能用,动调断在输入处,可以看到加密只有一个异或,比较处也可以找到密文,key反查一下,抄的exp:
1 |
|
5.10
[HNCTF 2022 WEEK2]e@sy_flower
简单的花指令,找到冒红的地方,先u重定义,再将第一个字节改为nop,回到上面main函数那按p重建函数,f5即可反编译
直接逆写即可:
1 |
|
luck_guy
1 |
|
5.11
hackme
1 |
|
解密:
1 |
|
SignIn
1 |
|
5.12
[强网杯 2022]GameMaster
c#逆向 dnspy打开,可以看到main函数一开始就打开了gamemessage文件,这个文件也是题目给出的
1 |
|
将该文件传给了memory,在goldfunc函数里异或了34
1 |
|
将memory 用AES,ECB 解密生成ExploitClass.dll
1 |
|
所以,解密:
1 |
|
查看PE,发现了MZ文件头,把前面的删掉,还是一个c#程序,继续拖入dnspy
先看看key是啥,仿写即可:
1 |
|
check函数:
1 |
|
z3解方程:
1 |
|
exp:
1 |
|
xctf babymips
main函数:
1 |
|
1 |
|
exp:
1 |
|
5.13
litctf 逆向wp | shimmer’s blog (shimmer123456.github.io)
5.14
春秋杯 Poisoned_tea_CHELL(壳是真难脱啊,还好我脱掉了)
春秋杯 sum
比赛还没结束捏,不能写wp,(目前为止逆向ak,嘿嘿)贴个图算了:
5.15
[SWPUCTF 2021 新生赛]fakebase
1 |
|
其中s
的值都是s_box
中取的,因此[b1%31]
是可以得知的。也就是
1 |
|
我们是从0开始爆破,因为b1是从大每次整除31
,依次减小的,因此我们s
选好 是需要逆序。因此:
1 |
|
最后直接将整数转换为字符串即可:
1 |
|
[SWPUCTF 2021 新生赛]fakerandom
逆着逻辑好了
1 |
|
5.16
[HGAME 2022 week1]easyasm
附件是16位的MS-DOS程序,用IDA分析start函数,代码不多,大意是将flag的每个字符前四位和后四位进行置换,然后与0x17异或,再与密文逐位比较。
1 |
|
[WUSTCTF 2020]level3
1 |
|
1 |
|
5.17
[BJDCTF 2020]Easy AmtuOrRF
IDA pro 动调
1.先在 0x00401723 断点 方便查看flag
2.在0x0401773断点 运行到此
3.然后修改EIP 为 0x0401520
4.继续运行看cmd窗口得到flag
HACKIT4FUN
[HNCTF 2022 Week1]X0r
1 |
|
5.19
[2023春秋杯 sum]
main函数:
1 |
|
首先是一个do while嵌套for的一个81次的循环,循环时当v3[i]的值等于0,会让用户输入一个字符,并且该输入必须在0-9之间
那么接下来进入verify函数:
不仔细看的话中等复杂,但他肯定是一段验证程序,因为它在if条件里嘛,满足条件就是win了。分析的话要么动调,要么为了省事直接问gpt(这个题效果还不错,有时候小心他会胡说八道):
solve:
知道是数独,提取出81个数据,找个在线网站解一下数独,再运行程序填进去flag就输出了
[GDOUCTF 2023]doublegame
直接运行程序是一个贪吃蛇游戏,撞壁游戏就结束了。
拖入ida,因为没有main函数,所以通过字符串来定位关键逻辑,看到挺多0,跟进去,来到了这么一个函数:
1 |
|
很明显是一个迷宫,但刚才的贪吃蛇哪去了(因为是double game啦),那么就再交叉引用看看谁调用了这个迷宫的函数,一直可以追到贪吃蛇游戏里
这个dword_140022CD0就是当前得分了,当它>13371337时就会跳转到迷宫游戏
逻辑清楚了,那么在判断分数前下个断点,贪吃蛇游戏结束之后断下来,修改两次标志位(sf)跳转到迷宫游戏
接下来通过wsad控制上下左右走迷宫,先把小猫救出来后,程序会让输入key(其实就是贪吃蛇分数13371337),也可以通过判断key的逻辑再把key逆出来:
输入key之后,又回到原点了,再走一下迷宫,flag就是{key+md5(最短路径)}
5.20
[LitCTF 2023]enbase64
变表base64,下断点dump出变表
1 |
|
5.21
[GXYCTF 2019]luck_guy
1 |
|
5.22
[NISACTF 2022]ezpython
使用pyinstxtractor解包exe
使用010修复src.pyc的文件头
1 |
|
1 |
|
5.23
[HNCTF 2022 WEEK2]来解个方程?
1 |
|
5.24
[GDOUCTF 2023]L!s!
考察了bindiff插件的使用
比较两个文件的不同之处,一般用来比较原文件和dump之后的文件
先用ida随便打开一个文件,再关闭,生成集成的那个文件(i64),再用ida打开另一个文件,打开插件bindiff,选择Diff Database 打开刚刚的i64文件,就可以查看这两个文件的不同之处了
密文提取出来:
1 |
|
加密就仅仅只有一个异或v7,从0-256爆破遍,去结果里找flag
还算好找
5.26
EasyDotnet
月赛的一道题。c#逆向,加了confuserex的壳。
用工具可以脱掉壳,但是会破坏程序,虽然源码能看到但程序不能动调,而这个题的源码里有字符串加密,要看字符串就必须动调看,所以这条路不行
那么就考虑手动脱壳:
仔细阅读代码可以发现,程序中 .static constructor() 是没有被加密的。阅读它调用的 第一个函数,可以发现其中调用了 Marshal.GetHINSTANCE() 和 kernel32.VirtualProtect() ,可 以猜测该函数是用于解密代码的。于是,在 .static constructor() 的第二行下断点,待 运行到该点之后,将程序的内存映像 dump 下来,完成脱壳
注意这里的dump必须要在dnspy下边的那个模块那里保存,不能去左上角文件那里保存模块,这样保存的是整个文件,会报错
dump之后再用dnspy打开,这个时候就可以看到main函数内有源码了,但是还有一些没回复,使用de4dot继续脱一下,就完整的脱掉了
再看源码,有两处反调试nop掉,再逆逻辑就行了,是一个base32加密
如何逆就不说了,主要是手动脱壳
5.27 5.28
这两天国赛,不太想写了
5.29
ciscn 2023 babyRE
进入题目开头给的网站,可视化编程,真是baby re了,导入xml文件,可以看到对输入的处理就是逐位与前一位异或,密文也给出,不过顺序有点不好搞,那么就插入一个for循环,让程序自己打印出密文
5.30
春秋杯 re wp | shimmer’s blog (shimmer123456.github.io)
5.31
春秋杯 re wp | shimmer’s blog (shimmer123456.github.io)
6.1
ciscn 逆向wp | shimmer’s blog (shimmer123456.github.io)
6.2
ciscn 逆向wp | shimmer’s blog (shimmer123456.github.io)
6.3
[MoeCTF 2022]chicken_soup
1 |
|
6.4
hsctf dasctf
6.5
陕西省赛 逆向wp | shimmer’s blog (shimmer123456.github.io)
6.6
陕西省赛 逆向wp | shimmer’s blog (shimmer123456.github.io)
6.7
[SWPUCTF 2021 新生赛]PYRE
1 |
|
6.8
[MoeCTF 2021]Realezpy
直接爆破:
1 |
|
6.9
[MTCTF 2021]wow
1 |
|
6.10
[WUSTCTF 2020]level4
1 |
|
6.11
[长城杯 2021 院校组]Just_cmp-re
1 |
|
6.12
[MoeCTF 2022]ezTea
1 |
|
6.13
[MoeCTF 2021]大佬请喝coffee
1 |
|
6.15
[MoeCTF 2022]D_flat
1 |
|
6.16
[MoeCTF 2022]fake_key
1 |
|
1 |
|
1 |
|
6.17
[SDCTF 2022]A Bowl of Pythons
1 |
|
6.18
[MoeCTF 2022]Art
1 |
|
6.19
[长城杯 2022 高校组]baby_re
1 |
|
1 |
|
6.20
[MoeCTF 2021]midpython
1 |
|
1 |
|
1 |
|
6.21
[MoeCTF 2021]EinfachRe
1 |
|
6.22
[MoeCTF 2022]Broken_hash
1 |
|
6.23
[HUBUCTF 2022 新生赛]Anger?Angr
1 |
|