逆向攻防世界CTF系列47-crazy
逆向攻防世界CTF系列47-crazy64位无壳 丢入IDA并远程调试,随便输入,发现要32位长度,也跟踪到几个函数 校验函数: 判断长度和简单处理逻辑 主函数: 到这逻辑理顺了,其实这题的难点主要在眼花缭乱的C++代码 会头看这,应该是把输入赋值给a1+16和a1+48,然后把327a6c4304ad5938eaf0efb6cc3e53dc给了a1+80 12345678910111213141516unsigned __int64 __fastcall HighTemplar::HighTemplar(DarkTemplar *a1, __int64 a2){ char v3; // [rsp+17h] [rbp-19h] BYREF unsigned __int64 v4; // [rsp+18h] [rbp-18h] v4 = __readfsqword(0x28u); DarkTemplar::DarkTemplar(a1); *(_QWORD *)a1 = &off_401EA0; *((_DWORD *)a1 + 3) =...
逆向攻防世界CTF系列46-key
逆向攻防世界CTF系列46-key32位,无壳,跟踪 IDA动调,发现会一闪而过退出,OD调试 fiopen在401620中 congra在下面这里 到这其实我已经凌乱了,加上中午没休息,已经又困又累了 硬着头皮干吧 梳理下:我们已经知道这些字符串在哪输出的,最终目的是输出congrat…,中间肯定有个判断的过程,我们需要把在哪判断的地方找出来,那么之前有个wrong key,那里可能存在判断 彻底懵逼了,看大佬的wp,好像是需要创建一个flag文件的 建了一个,od测试了一下 如果没有这个文件的话,应该最后肯定会经过下面的exit 就是在那个插入口判断了,然后输出了wrongkey,我们把如何判断的逻辑搞清楚应该就可以找出flag 跟进 复杂,先放一放 还需要注意的是,之前文件写入的去哪了? 如果能跟踪到分析会更轻松 之前跟踪到是在sub_D01620(v2, v16, v17,...
逆向攻防世界CTF系列45-Windows_Reverse1
逆向攻防世界CTF系列45-Windows_Reverse132位,upx壳 跟进sub_401000 发现传了a1也就是输入v5,这里的v1是ecx,看汇编代码发现,它也是被传递的参数也就是main里的v4 v4 = a1 - v1;求了一个地址差,v1一开始是0 *v1 = byte_402FF8[(char)v1[v4]]; 有点没看懂 v1一开始是0,v4是地址差 *v1 = byte_402FF8[(char)v1[v4]]; 这里V1作为地址和v4作为地址差值执行的是v1+v4的操作,因为数组a[b]本质就是在数组头地址a加上偏移量b来遍历数组的, 也就是一开始是v4=a1-v1,v1为0,其实就是我们输入的第一个字符的位置,后面v1[v4]倒不如理解成v4[v1],v1会加加,就会遍历 byte_402FF8[xx]就是以这个地址为便宜去取字符 数组地址偏移从0x00402FF8~0x00403078 看上面的标识char...
逆向攻防世界CTF系列44-happyctf
逆向攻防世界CTF系列44-happyctf 是个C++风格的代码 不用关心这些乱七八糟的,其实都是对象,仔细看一下跟进第一个operator(add) 异或 直接猜出来了… 1234key = 'rxusoCqxw{yqK`{KZqag{r`i'for i in range(len(key)): print(chr(ord(key[i]) ^ 0x14),end='') flag{Welcome_to_Neusoft}
逆向攻防世界CTF系列43-gametime
逆向攻防世界CTF系列43-gametime做了好久,收获很多,参考了很多题解,这是比较适合初学者的攻防世界 gametime 使用IDA pro+OD动调 - C4emc1oudy -...
逆向攻防世界CTF系列42-reverse_re3
逆向攻防世界CTF系列42-reverse_re3参考:CTF-reverse-reverse_re3(全网最详细wp,超4000字有效解析)_ctfreverse题目-CSDN博客 64位无壳 12345678910_int64 __fastcall main(__int64 a1, char **a2, char **a3){ int v4; // [rsp+4h] [rbp-Ch] sub_11B4(a1, a2, a3); do v4 = sub_940(); while ( v4 != 1 && v4 != -1 ); return 0LL;} 跟进sub_11B4 __readfsqword(0x28u)经常会出现,反调试,先记住 下面是dowhile v4必须要为1或者-1最后 跟进sub_940 1234567891011121314151617181920212223242526272829303132333435363738394041__int64 sub_940(){ int v0;...
逆向攻防世界CTF系列41-EASYHOOK
逆向攻防世界CTF系列41-EASYHOOK看题目是一个Hook类型的,第一次接触,虽然学过相关理论,可以看我的文章 Hook入门(逆向)-CSDN博客 题解参考:https://www.cnblogs.com/c10udlnk/p/14214057.html和[攻防世界逆向高手题之EASYHOOK-CSDN博客](https://blog.csdn.net/xiao__1bai/article/details/119920369) 123456789101112131415161718192021222324252627int __cdecl main(int argc, const char **argv, const char **envp){ HANDLE FileA; // eax DWORD NumberOfBytesWritten; // [esp+4h] [ebp-24h] BYREF char Buffer[32]; // [esp+8h] [ebp-20h] BYREF sub_401370(aPleaseInputFla); ...
逆向攻防世界CTF系列40-ReverseMe-120
逆向攻防世界CTF系列40-ReverseMe-120直接定位到关键函数 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849int __cdecl main(int argc, const char **argv, const char **envp){ unsigned int v3; // edx unsigned int v4; // ecx __m128i si128; // xmm1 unsigned int v6; // esi const __m128i *v7; // eax __m128i v8; // xmm0 int v9; // eax char v11[100]; // [esp+0h] [ebp-CCh] BYREF char v12[100]; // [esp+64h] [ebp-68h] BYREF unsigned int v13; // [esp+C8h] [ebp-4h] ...
逆向攻防世界CTF系列39-debug
逆向攻防世界CTF系列39-debug查了资料说.NET要用其它调试器,下载了ILSPY和dnSPY ILSPY比较适合静态分析代码最好了,函数名虽然可能乱码不显示,但是单击函数名还是能跟踪的,而dnSPY在动态调试上效果好,它的函数名不仅乱码不显示,点击后还无法跟踪。(最好两个都下载,一个动态分析,一个静态分析) dnspy找半天,在这 这里下一个断点直接读到了flag 因为这里flag直接被返回了,多试几次就找到了 当然也可以静态分析 可以猜到这段是在做处理 ILSPY打开 123456789import hashlibkey1 = [3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]key2 = "CreateByTenshine"flag = ""for a in key2: for i in key1: a = chr(i^ord(a)) flag +=...
逆向攻防世界CTF系列38-xxxorrr
逆向攻防世界CTF系列38-xxxorrr64位无壳,很自然的找到main和一个比较函数 以为逻辑很简单了 12345678910111213141516enc = [ 0x56, 0x4E, 0x57, 0x58, 0x51, 0x51, 0x09, 0x46, 0x17, 0x46, 0x54, 0x5A, 0x59, 0x59, 0x1F, 0x48, 0x32, 0x5B, 0x6B, 0x7C, 0x75, 0x6E, 0x7E, 0x6E, 0x2F, 0x77, 0x4F, 0x7A, 0x71, 0x43, 0x2B, 0x26, 0x89, 0xFE]key = [ 0x71, 0x61, 0x73, 0x78, 0x63, 0x79, 0x74, 0x67, 0x73, 0x61, 0x73, 0x78, 0x63, 0x76, 0x72, 0x65, 0x66, 0x67, 0x68, 0x6E, 0x72, 0x66, 0x67, 0x68, 0x6E, 0x6A, 0x65, 0x64, 0x66, 0x67, 0x62,...