逆向攻防世界CTF系列35-tt3441810
逆向攻防世界CTF系列35-tt3441810 没有一些其他信息,不要怕,flag那就肯定在里面 全部提取出来chr,多试几次 123456789101112131415161718192021222324252627282930313233343536373839404142enc = [ 0x68, 0x66, 0x6C, 0x00, 0x00, 0x48, 0xBF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8D, 0x34, 0x24, 0x48, 0xBA, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x05, 0x68, 0x61, 0x67, 0x00, 0x00, 0x48, 0xBF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48,...
逆向攻防世界CTF系列34-BABYRE
逆向攻防世界CTF系列34-BABYRE参考xctf攻防世界 REVERSE 高手进阶区 BABYRE-CSDN博客 查完壳扔进IDA judge应该是个函数,点进去却是个数组??看了wp才知道这是smc自解密,再7-11行进行了加密 self-Modifying Code 在真正执行某一段代码时,程序会对自身的该段代码进行自修改,只有在修改后的代码才是可汇编, 可执行的 在程序未对该段代码进行修改之前,在静态分析状态下,均是不可读的字节码,IDA之类的反汇编器无法识别程序的正常逻辑。 SMC是一种局部代码加密技术,它可以将一个可执行文件的指定区段进行加密,使得黑客无法直接分析区段内的代码,从而增加恶意代码分析难度和降低恶意攻击成功的可能性。 SMC的基本原理是在编译可执行文件时,将需要加密的代码区段(例如函数、代码块等)单独编译成一个section(段),并将其标记为可读、可写、不可执行(readable, writable,...
逆向攻防世界CTF系列33-流浪者
逆向攻防世界CTF系列33-流浪者shift+f12看到pass,跟进 是个输入的处理,其实很简单,看不懂也没关系,先看看return 这里strcmp成功后return的就是成功 最后要为KanXueCTF2019JustForhappy 123456while ( *(_DWORD *)(a1 + 4 * v4) <= 0x3Du ){ Str1[v4] = aAbcdefghiabcde[*(_DWORD *)(a1 + 4 * v4)]; ++v4;}Str1[v4] =...
逆向攻防世界CTF系列32-hackme
逆向攻防世界CTF系列32-hackme64位无壳,追踪 审计 v16就是我们的输入,v10没有说,可以猜出来是下标,追踪byte_6B4270 写解密代码 123456789101112enc = [ 0x5F, 0xF2, 0x5E, 0x8B, 0x4E, 0x0E, 0xA3, 0xAA, 0xC7, 0x93, 0x81, 0x3D, 0x5F, 0x74, 0xA3, 0x09, 0x91, 0x2B, 0x49, 0x28, 0x93, 0x67]for i in range(22): v24 = 0 for j in range(i + 1): v24 = 1828812941 * v24 + 12345 print(chr((enc[i] ^ v24) % 256), end='') flag{d826e6926098ef46}
逆向攻防世界CTF系列31-elrond32
逆向攻防世界CTF系列31-elrond32 追踪 跟进sub_8048538 这是输出 回头看sub_8048414 可以发现是个递归,模拟一下得到字符串a2(main中的是a2,这里代表a1)是isengard 取出密文,idapython代码 1234567891011start_addr = 0x08048760end_addr = 0x080487E3list = []for i in range(start_addr,end_addr,4): list.append(idaapi.get_dword(i)) print(list)# [15, 31, 4, 9, 28, 18, 66, 9, 12, 68, 13, 7, 9, 6, 45, 55, 89, 30, 0, 89, 15, 8, 28, 35, 54, 7, 85, 2, 12, 8, 65, 10, 20] 解密代码: 12345678enc = [15, 31, 4, 9, 28, 18, 66, 9, 12, 68, 13, 7, 9, 6, 45, 55, 89, 30,...
逆向攻防世界CTF系列30-re2-cpp-is-awesome
逆向攻防世界CTF系列30-re2-cpp-is-awesome64位无壳,c++代码,根据shift+f12得flag定位到这,直接看到if(V8!=xx)可以猜测是在验证,跟进sub_400B56也验证了我们的猜测 初始化和字符串分配: 123std::allocator<char>::allocator(&v12, a2, a3);std::string::basic_string(v11, a2[1], &v12);std::allocator<char>::~allocator(&v12); 这里,程序使用分配器对象 allocator 来管理内存,并将用户输入的字符串(即 flag 值)存储在 v11 中。之后释放分配器对象。 其实上面的那些不认识的代码可以猜测出来的,重要的是while循环 if ( *v8 != off_6020A0[dword_6020C0[v14]]...
逆向攻防世界CTF系列29-secret-galaxy-300
逆向攻防世界CTF系列29-secret-galaxy-30032位无壳,扔进IDA,main函数包括 1234567int __cdecl main(int argc, const char **argv, const char **envp){ __main(); fill_starbase((int)&starbase); print_starbase((int)&starbase); return 0;} 其中跟进fill_starbase,应该是赋值,跟进print就是打印,没有发现什么输入,动态运行一下 设置断点 回去看看这几个galaxyname怎么来的 跟进 发现这个从来没用到,而且跟题目名类似,交叉引用off_409014 逻辑其实就是从前几个字符串里拼接flag 设置断点 运行到这时,提取出enc 12345678enc = [ 0x61, 0x6C, 0x69, 0x65, 0x6E, 0x73, 0x5F, 0x61, 0x72, 0x65, 0x5F, 0x61, 0x72, 0x6F,...
逆向攻防世界CTF系列28-1000Click
逆向攻防世界CTF系列28-1000Click题目名1000Click,点进exe看看,发现点一次Click会+1我猜测,要点1000次 解法1: 1234567891011import pyautoguiimport time# 等待几秒,以便你有时间切换到1000Click.exe应用窗口time.sleep(10)# 执行点击1000次for _ in range(1000): pyautogui.click() # 在鼠标当前所在位置点击 time.sleep(0.01) # 每次点击之间延迟10毫秒,可以根据需要调整 让Python去点1000次得flag 解法2: 静态分析 发现Check按钮随便输入会出来Error,SHIFT+F12搜索Error定位 其中这里的Text就是flag 此外还有多种解法如动态分析改点击次数等等 flag{TIBntXVbdZ4Z9VRtoOQ2wRlvDNIjQ8Ra}
JavaSe
JavaSe一、Java简介1.C/S,B/S...
逆向攻防世界CTF系列27-200simple-check-100
逆向攻防世界CTF系列27-200simple-check-100巨难受的一题,gdb环境配了半天 32位无壳 这里要check,先跟进下面的interesting_function看看 putchar,这里就是输出,那我们只需要动调将check_key那修改为正确就行 下断点 右上角右键modify成1 但是输出乱码。 查阅资料后可以用gbd动调 环境配了半天 如果是2024-11-11左右安装gbd如果出现报错,可以参考[Kali 2024 逆向调试 GDB 13.2 安装插件 Peda...