逆向攻防世界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,...
逆向攻防世界CTF系列37-crackme
逆向攻防世界CTF系列37-crackme参考https://blog.csdn.net/xiao__1bai/article/details/120230397 nspack的壳,查了一下好像是北斗的一个壳 没找到什么脱壳软件,只能手动脱壳了 手动脱壳的最终要的是ESP定律 ESP定律的原理就是“堆栈平衡”原理 涉及的汇编知识: call命令: 向堆栈中压入下一行程序的地址; JMP 到 call 的子程序地址处。 例如: 00401029 E8 DA240A00 call 004A3508 0040102E 5A pop edx 在执行了00401029以后,程序会将0040102E(下一条指令地址)压入堆栈,然后 JMP 到 004A3508 地址处 RETN命令: 将当前的 ESP 中指向的地址出栈;JMP 到这个地址。 堆栈平衡可以简单的理解为在一个函数的ret之前,中间入栈和出栈的次数要相等(也就是一定要保证在 RETN 这条指令之前,ESP指向的是我们压入栈中的地址) 软件加壳就是隐藏了OEP(或者用了假的OEP),...
逆向攻防世界CTF系列36-re4-unvm-me
逆向攻防世界CTF系列36-re4-unvm-mepyc文件反编译 发现自己用uncompyle6的结果不太对,转而用在线网站反编译: https://tool.lu/pyc/ 1234567891011121314151617181920212223242526272829303132333435#!/usr/bin/env python# visit https://tool.lu/pyc/ for more information# Version: Python 2.7import md5md5s = [ 0x831DAA3C843BA8B087C895F0ED305CE7L, 0x6722F7A07246C6AF20662B855846C2C8L, 0x5F04850FEC81A27AB5FC98BEFA4EB40CL, 0xECF8DCAC7503E63A6A3667C5FB94F610L, 0xC0FD15AE2C3931BC1E140523AE934722L, ...
逆向攻防世界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,...