逆向攻防世界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...
BUUCTF-re-page1
BUUCTF-re-page1easyre 提交 reverse1跟进Str2,加flag 瞎了,上面还有个如果是o就换成0,改一改提交 {hell0_w0rld} reverse2flag:{hacking_for_fun} 但做了替换 flag{hack1ng_fo1_fun} 内涵的软件DBAPP{49d3c93df25caad81232130f3d2ebfad} flag{49d3c93df25caad81232130f3d2ebfad} 新年快乐upx壳,工具脱壳 xor 有个异或逻辑 跟进global 12345678910111213enc = [ 0x66, 0x0A, 0x6B, 0x0C, 0x77, 0x26, 0x4F, 0x2E, 0x40, 0x11, 0x78, 0x0D, 0x5A, 0x3B, 0x55, 0x11, 0x70, 0x19, 0x46, 0x1F, 0x76, 0x22, 0x4D, 0x23, 0x44, 0x0E, 0x67, 0x06, 0x68, 0x0F, 0x47, 0x32, 0x4F]for i...
逆向攻防世界CTF系列26-parallel-comparator-200
逆向攻防世界CTF系列26-parallel-comparator-20012345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#include <stdlib.h>#include <stdio.h>#include <pthread.h>#define FLAG_LEN 20void * checking(void *arg) { char *result = malloc(sizeof(char)); char *argument = (char *)arg; *result = (argument[0]+argument[1]) ^ argument[2]; return result;}int highly_optimized_parallel_comparsion(char...