- 博客(415)
- 资源 (11)
- 收藏
- 关注
原创 求和 - 洛谷P2671 - 数据维护 - dp
#include <bits/stdc++.h>using namespace std;const int mod = 10007;const int maxn = 1e5 + 10;int n, m;long long a[maxn], b[maxn], num[maxn][2], sum[maxn][2], ans;long long tmp;int main(){ //freopen("input.txt", "r", stdin); scanf("%d%d", &.
2022-03-05 10:30:25
376
原创 单调栈 - 洛谷 P2866
#include <bits/stdc++.h>using namespace std;int n;long long st[100010], top, ans, h;int main(){ //freopen("input.txt", "r", stdin); scanf("%d", &n); st[0] = 1e9 + 10, top = ans = 0; for(int i = 1; i <= n; i++){ scanf("%lld", &.
2022-03-05 10:27:37
304
原创 rNrAPCuaYZ
第一章 内容综述 bootimage.Z 具有美国键盘代码的压缩启动映像文件 rootimage.Z 以 1200 kB 压缩的根文件系统映像文件 linux-0.11.tar.Z 内核源代码文件,大小为94 kB,展开后也仅有 325 kB as86.tar.Z...
2020-05-03 07:45:51
397
原创 STL之python中list
样例题:https://codeforces.com/contest/1234/problem/B1主要是需要对每个数字 Ai 保存的位置进行记录,Ai 最大是1e9,会导致数组保存不了,于是想到python中的listlist声明:mylist = []print (type(mylist))list增加:list = [1,2,3,4]list.append(5)...
2019-10-29 17:38:30
396
原创 STL之C++中map
样例题:https://codeforces.com/contest/1234/problem/B2主要是需要对每个数字 Ai 保存的位置进行记录,Ai 最大是1e9,会导致数组保存不了,于是想到mapmap的功能:建立key - value的对应,key和value可以是任意类型定义与初始化:#include<map>map<int, int> mp;...
2019-10-28 22:04:35
223
原创 hackme pwn onepunch
做的题太少了,不知道应该把这种题目如何归类int __cdecl main(int argc, const char **argv, const char **envp){ …… v5 = __isoc99_scanf("%llx %d", &v6, &v4); if ( v5 != 2 ) return 0; *v6 = v4; …… ...
2019-03-14 23:59:11
519
原创 2015-CSAW-contacts [fmtstr in heap]
先尝试着找到漏洞点:fmtstr在新建联系人时,如果在Description项中输入格式化字符串,在存在相应漏洞点然后对应到:先Create,再Display,并定位到相关函数程序开启了NX和Canary,来单步调试一下看看在漏洞点处发生了什么Breakpoint 1, 0x08048c22 in ?? ()gdb-peda$ stack 200000| 0xff...
2019-03-05 23:05:46
1210
1
原创 三个白帽 pwnme - k0 [fmtstr] - [Hijack RetAddr]
程序运行起来功能很简单:输入用户名密码、输出用户名密码、退出运行起来发现:这里可能会有个缓冲区溢出的漏洞,在输入用户名时可以超过20个,超过的部分成了密码进一步测试发现,该程序存在fmtstr漏洞在程序4008A6处提供了system("/bin/sh"),所以我们的思路是,劫持某个函数返回地址到这儿即可先来计算偏移:在这里下断Breakpoi...
2019-02-27 19:55:47
1169
2
原创 LibcSearcher
来自github的CTF工具https://github.com/lieanu/LibcSearcherhttps://github.com/niklasb/libc-database做pwn题时经常需要泄露libc中某些函数地址(如puts、write、gets等)来确定libc版本,然后根据版本和相对偏移计算system等函数地址,从而进行下一步例题:基本ROP - ret2l...
2019-02-14 16:57:55
4359
1
原创 2018 - 安恒杯 - babypie [stack partial overwrite]
明显的是缓冲区溢出呀,read函数可以多读64位程序,开启了NX和PIE,且程序里有了system("/bin/sh")目标:控制RIP到A3E函数即可~首先,要处理canary的问题~然后,覆盖返回地址~partial overwrite:在开启了PIE后,无论高位地址如何变化,低位地址是不变的,意味着有概率“撞到”正确的地址exp如下:#!/usr/bin/e...
2019-02-13 22:36:51
1410
原创 pwnable.tw start [stack]
题目网站:https://pwnable.tw/challenge/分析题目:在IDA下,还算是看得挺明显的,利用了0x80的syscall,即相当于执行了两个函数:syscall(write, 1, 0x14)syscall(read, 0, 0x3C)但是明显看到:在恢复堆栈的时候,代码是add esp, 14h,即存在缓冲区溢出意味着,我们在read时可以利用...
2019-02-13 15:53:34
255
原创 X-CTF Quals 2016 - b0verfl0w [Stack Pivoting]
学习资料:https://ctf-wiki.github.io/ctf-wiki/pwn/linux/stackoverflow/fancy-rop/#stack-pivoting为什么要使用?(1)栈溢出时,覆盖后剩下的栈空间不够写exp、ROP等溢出利用(2)开启了PIE,栈地址不固定,没法利用要求:可以控制EIP或ESP的至少一个,利用gadgets:pop esp...
2019-02-13 15:06:09
1080
原创 jarvisoj pwn XMAN系列
目录level0level1level2level2_x64level3Level3_x64level0题目明显提示:buf的长度是0x80,可以直接覆盖掉return address到callsystem函数level1漏洞是一样的,难度加大:没有system函数地址,需要泄露;没有"/bin/sh",需要用read函数写入bss段看...
2019-02-09 14:47:10
437
原创 hackme pwn smash-the-stack [stack smash]
根据提示:stderr!和32C3的readme一样,原理看上篇,这里贴两个exp#! /usr/bin/env python# coding=utf-8from pwn import *#io = process('./smash-the-stack')io = remote('hackme.inndy.tw', 7717)argv_addr = 0xffffcfa4buf...
2019-02-07 23:42:56
350
原创 jarvisoj pwn smashes (2015 32c3-ctf hackme) [Stack Smash]
题目链接:https://www.jarvisoj.com/challenges题目bin文件来源:github - ctfswriteup - 2015 - 32c3ctf - pwn - hackme 分析过程:开启了NX与Canary程序流程:输入名字之后,即可输入一个地址去覆盖flag~这里涉及的知识点是:Stack Smash当程序开启了Can...
2019-02-07 23:36:40
599
原创 gdb工具pwndbg与peda与gef
在调试时有时候需要不同功能,在gdb下需要安装两个工具pwndbg和peda,可惜这两个不兼容pwndbg在调试堆的数据结构时候很方便peda在查找字符串等功能时方便安装pwndbg:git clone https://github.com/pwndbg/pwndbgcd pwndbg./setup.sh安装peda:git clone https://git...
2019-02-07 23:05:02
13894
5
原创 hackme re [helloworld simple passthis pyyy]
helloworld:拖入IDA里看一下就知道数了simple-rev:拖入IDA里看一下s = "UIJT.JT.ZPVS.GMBH"r = ""for i in s: r += chr(ord(i) - 1)print rpassthis:a = [0xC1, 0xCB, 0xC6, 0xC0, 0xFC, 0xC9, 0xE8, 0xAB, 0xA7, 0xDE,...
2019-02-06 11:32:05
707
原创 hackme pwn rop2 [syscall + rop]
先checksec一下:有个大概思路:rop过NXmain中和overflow函数里都有syscall函数,如下:观察到这里有缓冲区溢出!"A" * 0xC!先来学习syscall函数:syscall(int arg1, ……),为可变参数的函数,第一个参数为系统调用号,用以下命令查询:cat -n /usr/include/x86_64-linux-gnu/...
2019-02-05 23:12:45
559
原创 hackme pwn rop [ROPgadget]
IDA找漏洞点很快 所以,栈溢出的偏移值为:0xC + 0x4 = 0x10因为开了NX,所以需要ROP~剩下的就是工具:ROPgadget --binary rop --ropchain
2019-02-01 13:17:49
572
原创 湖湘杯 pwn200(pwne) [format string]
网上随便找一下能够找到二进制文件和libc,这里就不贴了~在函数80485CD处有上图所示的printf漏洞checksec发现,32位程序,和hackme的echo不同的是,开了Canary和NX所以思路还是一样,先要泄露偏移值#!/usr/bin/env python# coding=utf-8from pwn import *context.log_lev...
2019-01-31 23:19:06
422
原创 hackme pwn echo [format string]
题目名称就已经是很明显的提示了!echo ~ 提示:格式化字符串从IDA中看main:即可看到printf(&s)!漏洞原理部分:http://www.cnblogs.com/Ox9A82/p/5429099.html漏洞刷题提升:https://www.anquanke.com/post/id/85785https://www.anquanke.com/pos...
2019-01-31 22:28:07
500
原创 hackme pwn toomuch2 [buffer overflow + ROPx86]
checksec一下,发现啥保护也没有,不需要再找libc的版本了这里的漏洞点在toomuch1中说过了在toooomuch函数中,覆盖0x18+4个值,即可达到溢出效果下一步目标是:将"/bin/sh"写入bss段中,然后执行system函数即可类似x64平台,在x86中也有相似的通用gadgetsexp1:利用gets+system:#!/usr/bi...
2019-01-27 17:59:31
393
转载 RCTF 2015 welpwn [ROP] [x64通用gadgets] [简单写法]
https://blog.youkuaiyun.com/u011987514/article/details/70232881按照自己习惯,代码重写一下:#!/usr/bin/env python# coding=utf-8from pwn import *io = process("./welpwn")#gadgetsp4r = 0x40089Cpr = 0x4008A3mai...
2019-01-26 23:27:22
396
原创 RCTF 2015 welpwn [ROP] [x64通用gadgets]
先checksec一下:漏洞点其实蛮好找的:程序里也没几个函数main函数中read了一个字符串,然后当成参数传递给了echo函数在echo中的函数的接收buffer长度仅仅为0x10,而且是一个一个字符赋值的,栈缓冲区溢出漏洞,0x10 + 0x8 = 0x18个填充控制了ESP之后,程序开启了NX,一定想到的是ROP这里的基础知识是:http:/...
2019-01-26 23:12:26
824
原创 hackme pwn toomuch1 - buffer overflow
一开始看到这个漏洞还是蛮明显的~这里s的长度只有0x18个字节,然后用的是gets和strcpy来输入和传递,意味着没有长度限制与安全检查,所以可以直接缓冲区溢出来覆盖函数返回地址返回地址在ebp + 4,这里是ebp - 18中间的填充值也就好算了~和homework一样,这里有现成的函数重用代码如下:#!/usr/bin/env python# coding=utf...
2019-01-23 23:12:49
345
原创 hackme pwn toomuch1 - 二分法解题
分析函数流程:首先是密码正确性判断,然后是玩游戏~第一关:43210典型的二分法猜数字:0~100的区间,有8次机会!2^8=256>100,次数足够了第一次猜50,大了就说明数字在0~49中,则猜25;小了就说明数字在51~99中,则猜75;最后得到结果,即得到fake_flag(fake_flag是这个题的第一关)截图如下:这里运气比较好,...
2019-01-23 23:07:24
279
原创 hackme pwn homework
根据提示:Index out bound, Return Address根据源码:void run_program(){ int arr[10], i, v, act; …… while(1) { …… switch(act) { case 0: return; ...
2019-01-23 22:39:02
395
原创 angr - re - asisctffinals2015_fake
IDA分析:长度不超过10,程序会把读入的字符串转成数字,我们需要找到一个不超过10位数的数字使得程序输出flag~angr中需要hook这个strtol函数的原因:angv[1]输入时是一个字符串。程序处理时会用strtol函数,将字符串转为长整型,然后计算。而如果angv[1]参数就是一个符号变量,再将符号变量传入strtol函数,进行求解时会出错。添加限制条件...
2019-01-13 10:25:47
428
原创 angr - re - ais3_crackme
程序拖入64位IDA,逻辑很简单,flag是argv[1],verify是检查函数,输入key长度是23先说不用angr的做法:需要自己把数据扣出来,按照题目中的算法去逆向算(当然因为数少,也可以爆破)扣数据的代码:for i in xrange(0x601020, 0x601037): print hex(Byte(i)),',',print然后是爆破的代码:an...
2019-01-12 22:05:53
543
原创 angr - A+B problem
python - angr(github):是一个符号执行工具,可以很好的辅助逆向和漏洞挖掘等二进制工作一般可以自己先手动分析程序,得到许多限制条件,然后利用符号执行的方法遍历整个数据流和代码流,从而得到想要的结果~举例如下: 自己的代码:#include<stdio.h>int main(){ int a,b; printf("Please ...
2019-01-12 21:43:42
270
原创 [uva 1335] Beijing Guards [数学 - 脑洞 - 贪心]
有n个人围成一圈,每个人想要Ai种糖果。要求相邻的两个人不能有相同类型的糖果,问最小需要的糖果数量分析:n = 1,简单n=偶数,简单,为相邻两个人糖果数量和的最小值,即max{Ai + A((i%n)+1)}n=奇数采取构造法:首先二分一个糖果数量M,然后以O(n)的时间复杂度内判断其是否成立M的最小可能值为max{Ai + A((i%n)+1)},最大可能值为sum{A...
2018-10-26 13:28:51
245
原创 [uva 10934] Dropping water balloons - [dp]
题意:n层楼楼房,有K个水球,每个水球都有一个相同的扛摔系数。即从某层楼高及其以下的楼层摔下不会坏,而从其以上的楼层摔下会坏。问:最少需要多少次尝试能够求得扛摔系数 更简单的抽象:现在有一个未知数X,范围在1-n内。现在需要猜至少多少次Y,返回的结果是Y<X或Y>X或Y=X,则可以求出X我们定义dp[i]为:猜测 i 次后能够得到的最大区间那么有如下几种情况:A:第...
2018-10-26 13:17:51
222
原创 恶意代码分析实战Lab1702
运行1701的py代码,结果如下:Number of potential Anti-VM instructions: 1Anti-VM: 100061db点进去三个引用的地方,发现判断条件都是一样的拿InstallSB举例看到提示字符串,说明10003592函数是printf~ 在cmd运行:rundll32 Lab17-02.dll,InstallRT...
2018-08-07 12:56:42
333
原创 恶意代码分析实战Lab1701
IDA -> main -> Name字符串,HGL345,很明显,这个程序我们之前分析过,特征字符串这次的分析目的不一样,是要patch掉反虚拟机技术,从而使得代码运行起来根据书中17.2.5反虚拟机的x86指令一节,如下指令:sidt,sgdt,sldt,smsw,str,in(第二个操作数被设置为VX),cpuid恶意代码通常并不运行这些指令,除非它们执行VM...
2018-08-07 11:20:12
273
原创 恶意代码分析实战Lab18
论工具的重要性:百度一下找个万能脱壳机:linxerUnpacker可以准确识别4个且成功脱壳Lab18-02.exe : [FSG v1.00 (Eng) -> dulek/xt]Lab18-03.exe : [PECompact v1.4x+]Lab18-04.exe : [ASPack v2.12]Lab18-05.exe : [Upack V0.37 -> Dwi...
2018-08-06 17:11:12
608
原创 [2018看雪] - 第七题 - 有限域数学变换(2)
既然是个逆向题,就一定有逆向的做法学习链接:https://bbs.pediy.com/thread-229327.htm把题目中的运算理解成代数运算中的双射:正向时:已知(a,b,c)可求d,那么逆向是已知d的,a,b,c三个数可以“知二求一”也即,a、b、c、d四个数知三求一于是,构造CM的逆运算成为了可能,倒过来算20步可以把Input运算出来(再正向检验)逆向思路:...
2018-07-28 23:38:44
344
原创 Codeforces - 1010C
数学结论题 - 数论题意:给定n个数Ai,一个整数k,每个数可以用任意次,求这些数的和模K之后有多少种可能,分别是哪些数提交:http://codeforces.com/problemset/problem/1010/C思路:从简到繁(1)当存在某个Ai模K等于1时,那答案是K,从0到K-1都可以;(2)当n个数模K都不是1,如果存在Ai % K = x,Ai % K = y,...
2018-07-28 15:08:48
312
原创 [2018看雪] - 第七题 - 有限域数学变换
在之前插播一个数学知识:一个在素数p下的有限域:GF(p) = {0,1,2,3,……,p-1},加法运算是模p加,乘法运算是模p乘数学上可以证明对于在GF(p)中的每一个元素都存在加法逆元和乘法逆元,因此是可以做四则运算的加法 = 加法,减法 = 加上 加法逆元,乘法 = 乘法,除法 = 乘以 乘法逆元在有限域里,会出现特殊的“循环”的现象:任意一个数x属于GF(p),一直加...
2018-07-27 00:25:26
697
原创 [2018看雪] - 第四题 - 对抗反汇编+密码
逆向断章取义MIRACL大数库了解一下 在OD中调试下断的时候,看到了这个字符串有个反调试原理:查看当前进程的父进程是否为explorer.exe双击运行和cmd运行的程序的父进程都是explorer.exe,在OD下调试的程序的父进程是OD,这可以作为一个反动态调试的原理根据,奇怪的是对OD没啥用,还是可以正常下断正常调试(除了输出的提示字符串不同,不影响...
2018-07-20 20:09:39
939
原创 [2018看雪] - 第二题 - Trie Tree
main中的结构很好分析401C40函数:XORCalc函数(401B80函数):给出了4个异或关系用来限制输入的flag:s[0] ^ s[1] = 84,s[7] ^ s[8] = 19,s[14] ^ s[15] = 18,s[17] ^ s[18] = 77所以重点应该放在dword_407E48s上使用JumpToXref功能找到关键函数:...
2018-07-20 13:14:56
191
upx脱壳环境和工具包
2018-01-23
windows下的socket编程
2015-12-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人