首页
Search
1
[CTF/Reverse] 2022DASCTF X SU 三月 逆向部分
135 阅读
2
[CTF/Reverse] [HWS2022硬件安全 x DAS Jan] EasyVM + BabyVM
125 阅读
3
[CTF/Reverse] [XMAN2018排位赛]easyvm
92 阅读
4
[CTF/Reverse] [GWCTF 2019]babyvm
88 阅读
5
[应用/笔记]Typecho博客搭建
76 阅读
原创
笔记
程序员的自我修养
CTF
Reverse
Pwn
登录
Search
Yirannn
累计撰写
65
篇文章
累计收到
3
条评论
首页
栏目
原创
笔记
程序员的自我修养
CTF
Reverse
Pwn
页面
搜索到
50
篇与
的结果
2022-04-06
[CTF/Reverse] [FlareOn8]MyAquaticlife
本来这题都分析差不多了... WP都在学校, 但是总不能直接跳了, 所以干脆再来一遍upx壳, 直接脱就行最下面可以看到Multimedia Builder, 这东西是个巨古老的所见即所得编程器.一顿乱点之后可以发现这个... 另外也可以发现这好像是个.. 网页? 测试发现是点到中间文字的时候会出现, 基本上可以猜测是正确顺序点鱼, 然后点完了按文字check文件监控发现这东西在Temp下搞了好多东西, Html和dll让我比较感兴趣, 去看看Html里这样的, 就是这里的这些图片, 这些a标签指向了不同的Script, 也不知道是怎么调用的..看了看fathom.dll, 好像没什么用回到Exe, 我本来是在IDA里查的Script, 奈何这种封装程序字符串实在是太多了, IDA非常不方便, 所以Vscode查, 果然发现了Script15/Script3什么的, 每一个Script几乎都对应了一个PartX, 以及它们可能的字符串值, 大概就是parti$="word:nonce"的形式, 稍微整理一下:, 后面跟着的像Base64Script15 p4 = derelict:RTYXAc Script3 p2 = flotsam:DFWEyEW Script5 p2 = derelict:LDNCVYU Script11 p1 = jetsam:SLdkv Script 1 p1 = derelict :MZZWP Script 9 p1 = lagan:rOPFG S7 - p2 = jetsam S8 - p3 = lagan s2 - p2 = lagan s10 - p3 = jetsam s6 - p3 = derelict s12 - p2 = derelict s17 - "PluginFunc19, PlugIn var1$" s14 - p4 = lagan s4 - p1=flotsam s16 - p2 = lagan s13 - p3 = flotsam额, 这怎么这么多p2但是p4不够呢... 管他呢, 随便点一个) 当我随便选了一个单词顺序点完之后就过了), 我感觉有点非预期以下是读完官方WP后的复盘确实非预期了, 正常还要反那个dll, 发现只有jetsam和flotsam用到了, 只要点它们两个就可以了, 但是反正我点对了)逆向嘛, 半猜半调还好我觉得麻烦用的vscode, 这东西只是缀在文件后面了, IDA不会解析, 自然也就查不到了找到Script的常规方法是文件监视器发现它打开了自己, 进而发现读了文件尾, 虽然我意识到了它打开了自己, 但是真的没想到那是读数据, 学到了这题写成WP简单.. 是因为是分析差不多了回头做的, 实际当时做的时候浪费的时间很多很多, 第一步就没想到用文件监视器监控, 还是别的师傅建议试试Flare-on的第4题就这么难了...第10题真的能做么..
2022年04月06日
12 阅读
0 评论
0 点赞
2022-04-05
[CTF/Reverse] [FlareOn3]DudeLocker
Win32程序, 给了一个PE和一个应该是被加密了的doc全是WinAPI, MSDN先备好关注一下预处理, 16是Desktop, Filename是~\Desktop\Briefcase,如果打开失败就说你显然不是Re, 否则进else关闭文件句柄到第42行获取卷序列号, 要求必须是0x7DAB1D35, 下面申请堆就不关注了, 直接关注1940a3就是上面的十六进制, a1是一个明文表, 注意端序, 应该是0x35, 0x1D, 0xAB, 0x7D直接解一下thosefilesreallytiedthefoldertogether1080长这样, WinCrypt, 看上去1180比较重要因为和上面的字符串有关把上面的SHA1掉6610则是AES256, 用哈希值产生一个秘钥, 一层层返回到main的hKey里关注13004030F4是\*, 后面接一起把filename下的所有文件都加密之应该是8003都能背下来了, MD5把传进来的第四个参数Hash之后SetKey, 具体Set的是一个IV,之后没再做别的了, 回main关注1500a1是key, 这瞎猜都能猜到了吧..就是以一个明文SHA1为秘钥生成根, 用CryptoAPI生成一个AES-256的秘钥, IV是文件名的MD5因为本身用Python模仿CryptoAPI生成秘钥挺麻烦的, 分析通了就做到这儿了.
2022年04月05日
7 阅读
0 评论
0 点赞
2022-04-01
[CTF/Reverse] [SUCTF2019]babyunic
看名字就看得出来是Unicorn题, 有两个so和一个func, 猜测是OPCODE把un.so给babyunic, babyunic负责主逻辑, 这是baby的main, 读入到v5之后扔CBA里, 最后和明文对比, 拿出来不亏unsigned char ida_chars[] = { 0xFF, 0xFF, 0xFF, 0x94, 0xFF, 0xFF, 0xFF, 0x38, 0x00, 0x00, 0x01, 0x26, 0xFF, 0xFF, 0xFF, 0x28, 0xFF, 0xFF, 0xFC, 0x10, 0x00, 0x00, 0x02, 0x94, 0xFF, 0xFF, 0xFC, 0x9E, 0x00, 0x00, 0x06, 0xEA, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xFF, 0x0C, 0xFF, 0xFF, 0xFD, 0xF6, 0xFF, 0xFF, 0xFA, 0x82, 0xFF, 0xFF, 0xFC, 0xD0, 0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x03, 0xDE, 0x00, 0x00, 0x01, 0x4E, 0x00, 0x00, 0x02, 0xB2, 0xFF, 0xFF, 0xF8, 0xD8, 0x00, 0x00, 0x01, 0x74, 0xFF, 0xFF, 0xFA, 0xA6, 0xFF, 0xFF, 0xF9, 0xD4, 0x00, 0x00, 0x01, 0xC2, 0xFF, 0xFF, 0xF9, 0x7C, 0x00, 0x00, 0x03, 0x5A, 0x00, 0x00, 0x01, 0x46, 0xFF, 0xFF, 0xFF, 0x3C, 0xFF, 0xFF, 0xFA, 0x14, 0x00, 0x00, 0x01, 0xCE, 0x00, 0x00, 0x07, 0xDC, 0xFF, 0xFF, 0xFD, 0x48, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x08, 0x5E, 0xFF, 0xFF, 0xFD, 0xB0, 0xFF, 0xFF, 0xFF, 0xBC, 0x00, 0x00, 0x03, 0x6E, 0xFF, 0xFF, 0xFF, 0x4E, 0xFF, 0xFF, 0xF8, 0x36, 0x00, 0x00, 0x05, 0xC0, 0x00, 0x00, 0x06, 0xAE, 0x00, 0x00, 0x06, 0x94, 0x00, 0x00, 0x00, 0x22 };这儿看起来得学一波ucUNICORN_EXPORT uc_err uc_open(uc_arch arch, uc_mode mode, uc_engine **uc);第一个是架构, 第二个是模式typedef enum uc_arch { UC_ARCH_ARM = 1, // ARM architecture (including Thumb, Thumb-2) UC_ARCH_ARM64, // ARM-64, also called AArch64 UC_ARCH_MIPS, // Mips architecture UC_ARCH_X86, // X86 architecture (including x86 & x86-64) UC_ARCH_PPC, // PowerPC architecture (currently unsupported) UC_ARCH_SPARC, // Sparc architecture UC_ARCH_M68K, // M68K architecture UC_ARCH_MAX, } uc_arch; typedef enum uc_mode { UC_MODE_LITTLE_ENDIAN = 0, // little-endian mode (default mode) UC_MODE_BIG_ENDIAN = 1 << 30, // big-endian mode // arm / arm64 UC_MODE_ARM = 0, // ARM mode UC_MODE_THUMB = 1 << 4, // THUMB mode (including Thumb-2) UC_MODE_MCLASS = 1 << 5, // ARM's Cortex-M series (currently unsupported) UC_MODE_V8 = 1 << 6, // ARMv8 A32 encodings for ARM (currently unsupported) // mips UC_MODE_MICRO = 1 << 4, // MicroMips mode (currently unsupported) UC_MODE_MIPS3 = 1 << 5, // Mips III ISA (currently unsupported) UC_MODE_MIPS32R6 = 1 << 6, // Mips32r6 ISA (currently unsupported) UC_MODE_MIPS32 = 1 << 2, // Mips32 ISA UC_MODE_MIPS64 = 1 << 3, // Mips64 ISA // x86 / x64 UC_MODE_16 = 1 << 1, // 16-bit mode UC_MODE_32 = 1 << 2, // 32-bit mode UC_MODE_64 = 1 << 3, // 64-bit mode // ppc UC_MODE_PPC32 = 1 << 2, // 32-bit mode (currently unsupported) UC_MODE_PPC64 = 1 << 3, // 64-bit mode (currently unsupported) UC_MODE_QPX = 1 << 4, // Quad Processing eXtensions mode (currently unsupported) // sparc UC_MODE_SPARC32 = 1 << 2, // 32-bit mode UC_MODE_SPARC64 = 1 << 3, // 64-bit mode UC_MODE_V9 = 1 << 4, // SparcV9 mode (currently unsupported) // m68k } uc_mode;MIPS+MIPS32+BIGENDIAN基本能看出来吧, 通过a1算a2, a2一共41个, 41*4应该是正好和对比数据一样大, 这样我们z3跑一下就行了, IDA真乃神器也代码太长了就不贴了, 除了s.add以外基本上啥也没有, 就是传统z3题, 哦, 记得那些0xFFFFF打头的一看就是补码, 要转一下{Un1c0rn_Engin3_Is_@_P0wer7ul_TO0ls!}
2022年04月01日
21 阅读
0 评论
0 点赞
2022-04-01
[CTF/Reverse] [FlareOn2]gdssagh
[FlareOn2]gdssagh我直接? 我还以为是加壳, 但是这怎么直接.. 退出了? 我疑惑了一下并进行动调发现仍然是直接退出.中间巨大的数据里面都是可见字符, 是Base64..413H-CC1A4H, python提一下>>> with open('./gdssagh', "rb") as f: ... b = f.read()[0x413:0xCC1A5] ... import base64 ... b = base64.b64decode(b) ... ff = open("./out", "wb") ... ff.write(b) ... ff.close()err, 竟然是个PNG, 这他妈的不会是个隐写把.. 直接zsteg一把梭试试这俩比较像, 但是正常人肯定都看看PE..就它了, 导出这他妈是Misc, 不是逆向, 狗看了都摇头
2022年04月01日
11 阅读
0 评论
0 点赞
2022-04-01
[CTF/Reverse] [SCTF2019]music
逛一圈关注到了这个yes和no这个g(a)要是1和Resource里的资源相等, 回去看看a哪里来的000就是inputb定位到了这儿c.a有两个参数, 一个是输入的字符串, 另一个是经过this.a变换的this.d, this.d来自于上面这个get, 是一个db把get经过md5之后传进来, c.a的两个参数来源都有了, 回头看看c.a怎么加密看上去像个RC4, 应该是魔改过的. 整个流程已经很清楚了: 用md5(db.iwantofind)做秘钥, 输入做明文, 加密之后hex, 然后和resource里的明文做对比out[i] = (char)((flagenc[i] ^ S[(S[k] + S[k] % 256) % 256]) + k);注意rc4的最后一轮是改过的flag{IT_IS_A_NICE_SONG}
2022年04月01日
10 阅读
0 评论
0 点赞
1
2
3
...
10