buu刷题re(7.30)
[WUSTCTF2020]level3
拖进IDA找到主函数
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
明显是Base加密
最后加密的字符串也给我们了,但经典的Base加密都无法解出flag,猜测位换表
关键在base64_encode是否换表
点进去
1 | char *__fastcall base64_encode(char *a1) |
这里我们没有发现换表的
Crtl + E查看调用
最终在这里发现了换表
1 | _int64 O_OLookAtYou() |
用python写的脚本
1 |
|
[FlareOn4]IgniteMe
IDA打开找到主函数
1 | void __noreturn start() |
有用的只有一个 sub_401050()函数
1 | int sub_401050() |
其中byte_403000是已知的
我自己试了几次一直找不到出错
找不到问题出在哪
看了Wp了解到v4是有一个初始值的
10000000000001110000000000000000 左移4位后变成 00000000011100000000000000001000 转变为 无符号16位0000000000001000 右移1位变成 0000000000000100 转变成char 就是 4。
最简单的方法是直接动调
上脚本
1 | s = [0x0D, 0x26, 0x49, 0x45, 0x2A, 0x17, 0x78, 0x44, 0x2B, 0x6C, |
[WUSTCTF2020]Cr0ssfun
IDA打开
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
关键在check函数
点进去
1 | BOOL8 __fastcall iven_1s_great(_BYTE *a1) |
1 | _BOOL8 __fastcall iven_is_handsome(_BYTE *a1) |
好吧都是一样的,就不往下面看了,总共33位
33位 = 125 = }
整理一下就成
1 | a1=33*[''] |
[FlareOn6]Overlong
IDA32位打开
整个页面只有三个函数
找到字符串位置
好多好多
但是第一个主函数只循环了28次
结合程序运行
猜测后面的字符没有打印
拖进OD
这里先找到了字符串的长度应该是0XAF,而不是循环的0X1C次
直接数据窗口跟随,南通学长讲过的
OK
还有一种写法是直接写脚本比较麻烦
网上找的代码借鉴一下
1 | #include <stdio.h> |
[FlareOn3]Challenge1
ida32位点进去
关键函数在这
1 | _BYTE *__cdecl sub_401260(int a1, unsigned int a2) |
一眼Base换表
1 | import base64 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hyang's blog!
评论