Unicorn模拟执行
Unicorn模拟执行基操导入与初始化123from unicorn import *from unicorn.x86_const import *uc=Uc(UC_ARCH_X86,UC_MODE_64)
手动初始化内存、分配堆栈空间123address=0x400000 #运行地址stack_addr=0x410000 #堆栈地址data_addr=0x420000 #数据地址
映射内存1uc.mem_map(address,2*1024*1024) #加载的地址和大小
内存读写12uc.mem_read(address,length) #要读取的地址 要读取的长度uc.mem_write(address,Sub_code) #将Sub_code的代码写入运行地址
寄存器读写12uc.reg_write(UC_X86_REG_ESP,stack_addr)uc.reg_read(UC_X86_REG_ESP)
原神启动12uc.emu_start(Startaddr,Endaddr) #模拟开始地址 模拟结束地址uc.emu_stop()
实操[鹤城杯 2021]Pet ...
SICTF2024个人解题报告
SICTF2024个人解题报告[签到]Baby_C++就在flag数组里。
Ez_pyc简单代码阅读,发现是个数独,井号空下,0为要填的,解密得:
2456835127469673891564192578837194925486324875196156342796214853
python转16进制直接运行即可。
(好像后来附件换了,结果附件MD5估计是错的…
ArtBreakerIDA的Graph最大尺寸开成99999,转为图形界面即可。
SweetTofu动调,发现函数sub_55633523BB00,尝试解密。
123enc=[0x00,0x0A,0x07,0x01,0x1D,0x3F,0x09,0x13,0x39,0x07,0x08,0x02,0x39,0x2F,0x39,0x21,0x09,0x02,0x41,0x15,0x39,0x25,0x14,0x03,0x07,0x12,0x0F,0x09,0x08,0x47,0x22,0x09,0x08,0x41,0x12,0x39,0x04,0x03,0x39,0x15,0x03,0x14,0x0F,0x09,0x13,0x15, ...
PWN入门-Canary
PWN入门-Canary[2021 鹤城杯]littleofbuf尺寸为0x50,amd64下canary占用后0x8字节,i386下占用0x4字节。为了保证canary能与buf字符串分割开来,设计为小端序最后一个字节为0x00,sendline后自带发送换行符0x0a,即可填充0x00并取得后面0x7字节canary内容。
每次canary内容不同,每次都要重新获取。
开启canary后,0x50-0x8处为canary,0x50处为padding,0x50+0x8处为原ebp。
绕canary劫持plt泄漏puts的got表地址,找libc后重新绕canary打。
libcsearcher日常找不到库。
1234567891011121314151617181920212223242526272829303132from pwn import *context(log_level='debug',os='linux',arch='amd64')p=remote("node4.anna.nssctf.cn&quo ...
Crypto入门-基础数论复盘
Crypto入门-基础数论复盘高中OI学过数论相关,都还给教练了,现在开始复盘,死去的记忆开始拷打我。
RSA相关欧拉函数$\varphi(n)$表示小于$n$的正整数中与$n$互质的数的数目。基本性质:
如果$n$为质数,则$\varphi(n)=n-1$。
如果$p,q$为质数,则$\varphi(pq)=\varphi(p)\varphi(q)=(p-1)(q-1)$。
同余
若$a,b,c,d\in\mathbb Z,m\in\mathbb N_+,a\equiv b\pmod m,c\equiv d\pmod m$,则有:
$$ \displaylines{ a\pm c\equiv b\pm d\pmod m,\\ac\equiv bd\pmod m } $$
若$a,b\in\mathbb Z,k,m\in\mathbb N_+,a\equiv b\pmod m$,则有:$ak\equiv bk\pmod{mk}$。
中国剩余定理求解一元线性同余方程组:
$$\begin{cases} \displaylines{ ...
Crypto入门-RSA
Crypto入门-RSA基础概念公钥与私钥
随机选择两个不同的大质数$p$和$q$,计算$N=pq$。
求得$\varphi(N)=\varphi(p)\varphi(q)=(p-1)(q-1)$。
选择一个$e(e<\varphi(N),e\bot\varphi(N))$,并求得$e$的逆元$d$:$ed\equiv1\pmod{\varphi(N)}$。
销毁$p,q$的记录,公钥为$(N,e)$,私钥为$(N,d)$。
消息加密:
将消息转化为$m(m<N,m\bot N,m\in\mathbb Z)$,如果消息太长可以分成几段,即块加密。利用以下公式加密:$m^e\equiv c\pmod N$。
消息解密:
利用密钥$d$解密:$c^d\equiv \pmod N$。
共模攻击攻击条件:两个用户使用相同模数$N$、不同私钥加密同一明文消息时。
设两个用户公钥分别为$e_1$和$e_2$,且$e_1\bot e_2$,明文为$m$,密文分别为:
$$\begin{cases} \displaylines{ ...
Web3逆向初探
Web3逆向初探holesky.beconcha.in上查询合约字节码,Remix中下方控制台使用web3.eth.getCode(0x…)查询代码。
或者去openchain.xyz/signature查询。
反编译字节码:app.dedaub.com/decompile,如果再次出现字节码则再次反编译。
可删除下一个6080前的字节码。没识别出来的去signature。
刷题去chainflag.org,学习去www.wtf.academy/solidity-104。
PWN入门-入门泛做题
PWN入门-入门泛做题[LitCTF 2023]只需要nc一下~Dockerfile
[NISACTF 2022]ReorPwn?略。
[HNCTF 2022 Week1]easync略。
[SWPUCTF 2022 新生赛]Does your nc work?略。
[HGAME 2023 week1]test_nc略。
[GDOUCTF 2023]EASY PWN应该是ret2text,但是题出的有问题…
[LitCTF 2023]口算题卡123456789from pwn import *context(log_level='debug')p=remote("node4.anna.nssctf.cn",28864)for i in range(0,100): p.recvuntil("What is ") line_get=p.recvline().strip().strip(b'?').decode() ans=str(eval(line_get)).encode() p.se ...
BeginCTF2024个人解题报告
BeginCTF2024个人解题报告xor123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#include <cstdio>#include <cstring>using namespace std;char inputStr4[32],key2_1[32],key2_2[32],key1_1[32],key1_2[32],inputStr3_1[32],inputStr3_2[32],inputStr2[32],inputStr1_1[32],inputStr1_2[32];int main(void){ strcpy(inputStr4,"`agh{^bvuwTooahlYocPtmyiijj|ek'p"); strcpy(key2_1,"4180387362590136"); strcpy(key2_2,&qu ...
HGAME2024Week1-2个人解题报告
HGAME2024Week1-2个人解题报告Week1ezIDAIDA打开就看到。
ezASM将db区域定义的每个字节数据异或0x22即可。
ezPYCpyinstxtractor解包.exe,得到ezPYC改后缀.pyc。应该是3.10以上编译的,Magic Number为0xa7,从解包出来的其他.pyc中找到16字节文件头,再pycdc反汇编,发现简单异或加密。
ezUPXupx -d直接解包,发现简单异或加密。
EzSignInnc连上就给。
签到关注公众号然后HGAME2024。
SignIn直接画图调整图片尺寸,改水平缩放为500%能勉强看出来。
Week2其实从Week2往后都没有参加,以下两道是帮学长解的…
ezcpp4次TEA加密,只不过明文地址挺尴尬的。
12345678910111213141516171819202122232425262728293031323334353637383940414243#include <cstdio>using namespace std;unsigned char enc[32] = { 0x88 ...
CheatEngine基本操作
CheatEngine基本操作第1关打开进程即可。
第2关:精确值扫描初始血量为100,数值查找100,扫描类型选择精确数值,数值类型最好为4字节或2字节,点击“首次扫描”,左侧出现若干地址及数值。点击目标进程的“打我”后血量变95,将右侧100改为95,点击“再次扫描”,左侧只剩下一个地址,双击移动到下侧,再在下侧双击或选中回车改变为1000,“下一步”按钮激活。
第3关:未知初始值&减少的数值点击“新的扫描”。本关只知道血条,不知道具体数值。
第一次扫描时扫描类型选择“未知的初始值”,然后“首次扫描”。点击“打我”,扫描类型选择“减少的数值”,然后“再次扫描”,左侧筛选出一些地址,重复这个操作,直到左侧数量不再减少。从左侧列表找一个看起来正常的值,修改为5000即可。
第4关:单/双精度“健康”和“弹药”值分别为单浮点和双浮点,都要求改为5000。
对于“健康”,数值类型选择“单浮点”,对于“弹药”,数值类型选择“双浮点”。扫描类型都选“精确数值”。
第5关:代码查找下方数值的保存地址一直在变,无法正常锁定该地址。首先先第一次锁定该地址,然后F6右键“找出是什么改 ...