学习pwn
前言目前在0基础学习pwn
记录一下最近学习过程中遇到的一些知识点
pwntools的运用细节发送 payload
p.send(payload) 发送 payload
p.sendline(payload) 发送 payload,并进行换行(末尾\n)
p.sendafter(some_string, payload) 接收到 some_string 后, 发送你的 payload
p.sendlineafter(some_string, payload) 接收到 some_string 后, 发送你的 payload,加个换行
接收返回内容
p.recv() 一直接收输出
p.recvn(N) 接受 N(数字) 字符
p.recvline() 接收一行输出
p.recvlines(N) 接收 N(数字) 行输出
p.recvuntil(some_string) 接收到 some_string 为止
p.interactive() 直接进行交互,相当于回到shell的模式,一般在取得shell之后使用
生成 shellcode
asm(shellcraft.sh() ...
密码学数论基础-自己的思考
前前言下面是记录的一些可能会用到的markdown数学公式语法,读者完全可以忽略掉这部分内容$$\epsilon \frac {1}{2} \equiv \mod{a} \pm \sum \prod \pmod{a}\bull \Leftarrow \Leftrightarrow \Rightarrow \ne$$
前言最近在学密码学的数论知识,有些问题的证明在课程中没有讲到,在此我进行了自己的思考,并对某些问题给出证明过程,但是由于这些仅仅是本人独自思考的产物,因此可能显得非常随意,读者不要太过在意。
第一个问题:模运算下的除法化简(不是乘法逆元)模运算中有以下结论:
现在有一个同余式:$$a\equiv b \pmod{n}$$假设a和b有公约数t,那么上面这个式子就可以进行化简
接下来分为两种情况:$$第一种情况:gcd(t,n)=1,也就是t和n互为素数时,有\a//t \equiv b//t \pmod{n}\第二种情况,gcd(t,n) \ne 1,也就是t和n不互为素数时,一定有\a//t\ ...
bindiff
前言在4.16进行的广东海洋大学校赛中获得的新知识。
一个用于二进制文件对比的工具,比如现在有两个文件,他们大部分是相似的,只有少许不同,我们需要找不同的时候,就可以用到这个工具了。
安装前提:java环境、有IDA
我的IDA版本是v7.0
前往官网下载(挂代理):https://www.zynamics.com/software.html
点击msi字样的文件进行下载,我下载时最新版本是bindiff7
下载完成后进行安装,这里我安装在了D盘
我这个版本的bindiff安装程序中没有提示IDA的目录,因此我这里以我的版本进行讲解
然后将 Plugins\IDA Pro目录下的四个dll文件复制到IDA中的\plugins路径下
然后安装就成功了
使用打开IDA,在IDA菜单页面中查看plugins中是否有bindiff
如果有的话就说明安装成功了,如果没有,很有可能是IDA版本不合适
现在我们有两个想要比较的二进制文件,首先使用IDA打开其中一个,然后关闭,目的是获得.i64文件。然后再用IDA打开另一个文件,点击插件中的bindiff,然后选择上面的蓝色选项,之后再在目录中找到刚 ...
windows x86 SEH学习
前言参考师傅博客:
https://www.yunzh1jun.com/2022/05/27/WindowsSEH/
http://s0rry.cn/archives/yi-chang-chu-li-yuan-li-ji-zhan-zhan-kai-xiang-guan-cao-zuo
参考其他文章:
https://zhuanlan.zhihu.com/p/573449712
参考视频链接:
https://youtu.be/COEv2kq_Ht8
这是youtube上的,b站有人搬运了
https://www.bilibili.com/video/BV1UU4y1K7et?spm_id_from=333.337.search-card.all.click
这两个视频是一样的,但是如果有条件最好还是看youtube上的,也有中文翻译。
这个视频非常推荐,建议仔细观看!
一些需要扫盲的知识读者们可能在系统学习SEH之前了解过相关名词,什么异常处理,什么SEH链之类的,这里讲一下我在学习过程中感到疑惑的知识。
SEH是Windows操作系统提供的一种异常处理方式,也就是 ...
angr的一些使用
前言1众所周知,angr有非常多的使用限制,一般的程序很难直接使用angr来进行解题。但是,虽然不能直接使用angr来进行解题,但是我们完全可以间接使用angr。一般的程序,只要知道它的加密逻辑后,我们就可以用C语言复现这个程序,保证同样的输入下,重写的程序和原程序其加密之后的结果是一样的,然后再用angr对重写的程序进行解题。
这种解题方法的优势与劣势优势:我们可以不用再完全分析出程序的加密逻辑,也不用知道加密算法的逆算法是怎么样的,我们只需要无脑重写程序的逻辑,无脑使用angr即可。
劣势:这种解题方法很显然存在缺陷,很容易看到,在重写程序这一步骤,我们需要花费大量时间来保证加密逻辑与原程序是完全一致的,往往在短时间内很难一次就复现成功,这对我们的解题信心会产生很大的冲击。
前言2这种解题方法在之前学angr的时候就已经想过,但是奈何没有合适的题目来进行实践。前几天KM爷给了我们一道raffle,在做这道raffle的时候,想过其他的解法,一种是按照加密函数的顺序一步步逆回去,但是这个方法破产了,因为有的函数无法逆,因为在加密中进行了这样的操作:main_input[3]*=54, ...
themida一键脱壳
工具名称unlicense
链接:
https://github.com/ergrelet/unlicense/releases
使用下载下来之后,会有py打包后的exe文件
注意32位和64位的不同程序
然后直接将待脱壳的文件拖入exe就可以了……
没错,就是这么简单
一键脱壳yyds
魔改upx工具脱壳
前言之前一直学的是用esp定律进行脱壳,可是脱完壳的软件往往无法运行。
而之前也从来没有接触过对upx壳进行修改的方法,导致使用 upx -d 命令不成功。
本文就upx魔改的方法来讲解一下如何使用十六进制工具+upx -d进行脱壳。顺便复习一下PE文件知识。
本文的主要内容来自于下面这个链接
链接如下:
https://www.pianshen.com/article/4621592135/
UPX壳的特征1. 区段名upx壳保护的exe文件中,会有以下几个区段,upx0,upx1,resc。
其中upx0的实际大小是0。
实际上,UPX压缩器将这些节区压缩后放置于UPX1中,并且将压缩和解压代码也放到里面去。一旦该程序被加载运行,位于UPX1节的解压缩代码会释放原数据到UPX0中并且让PE正常运行。
https://blog.csdn.net/qq_37232329/article/details/97131186
“.rsrc”是程序资源信息区段名,这个区段含有原资源段的完整头部以及图标、Manifest、版本等未被压缩的资源,当然还有UPX自身需要的导入信息等(如果程序 ...
RSA维纳共计脚本
import base64, libnum,gmpy2def continuedFra(x, y): """计算连分数 :param x: 分子 :param y: 分母 :return: 连分数列表 """ cf = [] while y: cf.append(x // y) x, y = y, x % y return cfdef gradualFra(cf): """计算传入列表最后的渐进分数 :param cf: 连分数列表 :return: 该列表最后的渐近分数 """ numerator = 0 denominator = 1 for x in cf[::-1]: # 这里的渐进分数分子分母要分开 numerator, denominator = denominator, x * denominator + nu ...
SMC的一些知识
什么是SMCSMC,即Self Modifying Code,动态代码加密技术,指通过修改代码或数据,阻止别人直接静态分析,然后在动态运行程序时对代码进行解密,达到程序正常运行的效果。
(上面这一部分是从别人的博客里抄的)
简单来说,就是在程序内部对代码进行改变,一般是直接对字节码进行操作。
SMC的一些特征SMC既可以修改代码,也可以修改数据,一般来说,数据段是可读可写的,但是代码段是只读的,因此如果想对代码段的字节码进行修改,肯定改变代码段的属性,使其变成可读可写的。
1. Windows 系统下在 Windows 程序中使用了VirtualProtect()函数来改变虚拟内存区域的属性。
BOOL VirtualProtect(LPVOID lpAddress,SIZE_T dwSize,DWORD flNewProtect,PDWORD lpflOldProtect);/*VirtualProtect()函数有4个参数,lpAddress是要改变属性的内存起始地址,dwSize是要改变属性的内存区域大小,flAllocationType是内存新的属性类型,lpflOldProt ...
文件操作
前言前段时间遇到了一些对文件操作的题目,因此这里介绍一下常见的文件操作API函数(不是大全,只是本人遇到的)
CreatFileAHANDLE CreateFileA( LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);/*各个参数的作用是:- lpFileName:指定要创建或打开的文件名或设备名。- dwDesiredAccess:指定对文件或设备的访问权限。- dwShareMode:指定其他进程可以与文件或设备共享的方式。- lpSecurityAttributes: ...














